2011-12-19 18 views
5

Sto riscontrando un problema durante l'aggiornamento delle intestazioni GL. Fondamentalmente voglio accedere alla funzione glCompressedTexImage2D ma le mie intestazioni gl sono veramente vecchie e non credo che la funzione esista in quelle intestazioni. Così ho provato ad aggiornare il mio file gl.h ma ottengo un sacco di errori. Ho provato ad aggiornare il mio software della scheda grafica, tra le altre cose. Qualcuno può essere di aiuto?opengl, come aggiornare al meglio le intestazioni con Visual Studio?

risposta

3

Apparentemente, Windows è bloccato su una vecchia versione di OpenGL (1.2?). Prova a utilizzare GLEW o Glee per caricare l'estensione necessaria (GL_ARB_TEXTURE_COMPRESSION nel caso di glCompressedTexImage2D). Queste librerie caricheranno le estensioni disponibili e ti permetteranno di controllare il tuo codice se una particolare estensione è caricata o meno.

Esempio con GLEE:

#include <gl/GLee.h>   

if (GLEE_ARB_TEXTURE_COMPRESSION) 
{ 
    glCompressedTexImage2D(...); 
} 
else 
{ 
    // the extension is not available, use a different method 
} 

noti che GLEE non richiede di inizializzare esplicitamente (a differenza GLEW). Consiglio vivamente questo metodo per caricare manualmente un puntatore a funzione. Non perché sia ​​la mia risposta :), ma perché questo si occuperà anche di scoprire se l'hardware e il suo driver supportano l'estensione (che potrebbe essere molto disordinata), ed è indipendente dalla piattaforma.

+0

Nota che Glee è defunta e non viene più aggiornato. Si è fermato a GL 3.3; da allora sono state rilasciate 6 versioni di OpenGL. Quindi per quanto ti piaccia lo stile, non dovresti usarlo. Ci sono [una serie di alternative per caricare le funzioni OpenGL] (http://www.opengl.org/wiki/OpenGL_Loading_Library). –

+0

Grazie per l'heads-up. –

1

È necessario scoprire se il dispositivo corrente supporta la funzione, e quindi ottenere l'indirizzo della funzione, prima si può chiamare:

PFNGLCOMPRESSEDTEXIMAGE2DPROC p = NULL; 
const char* string = glGetString(GL_EXTENSIONS); 

if (strstr(string, "GL_ARB_texture_compression") != NULL) 
    p = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)wglGetProcAddress("glCompressedTexImage2D"); 
5

Sto avendo un po 'di un aggiornamento problema le mie intestazioni GL.

Questo perché non si dovrebbe fare questo. In Windows qualsiasi cosa oltre OpenGL-1.1 viene raccolta tramite il meccanismo di estensione. Il modo più semplice per accedervi è tramite GLEW. Installalo e usa GL/glew.h invece del normale GL/gl.h. Quindi, dopo aver creato un contesto OpenGL, la prima cosa da chiamare è glewInit().

0

Vai: http://www.opengl.org/registry/ e scaricare la versione più recente di glext.h e wglext.h

Ora sarete in grado di ottenere manualmente puntatore a funzione di funzionalità che si desidera. Sotto Windows c'è solo OpenGL 1.1.

Per un principiante Io suggerisco di usare GLEW (GLEE è anche grande, ma non è stato aggiornato per un tempo abbastanza lungo ...)

Problemi correlati