2013-07-23 20 views
22

Ok, quindi so già perché ho bisogno di GLEW, ma solo fino a un certo punto.Cosa fa GLEW e perché ne ho bisogno?

Se sto usando roba moderna OpenGL, probabilmente dalla versione 3.0 in poi, e/o sto usando il profilo principale, GLEW è richiesto poiché senza di esso errore di compilazione come glGenVertexArrays non è stato dichiarato.

Così GLEW fa un po 'di lavoro di fondo tra cui le moderne funzioni OpenGL che vorremmo utilizzare, probabilmente.

A parte questo, fa qualcos'altro? Inoltre, come funziona.

A titolo di esempio, ci si migliora la compilazione multipiattaforma? (Richiede meno modifiche al codice se si passa da Linux a Windows o OS X ad esempio?

Ha anche migliorato la "cross-platform-ness" dell'hardware grafico? Ad esempio, supponiamo di avere due computer identici, incluso il Sistema operativo Un programma è compilato usando i comandi OpenGL 4.3 su un sistema.Se l'altro sistema ha una scheda grafica o un driver che supporta solo OpenGL 3.3, GLEW è d'aiuto? (

)?

Così si può vedere, probabilmente io in realtà non so cosa fa GLEW o come lo fa

un ultimo punto;.? qualcuno sa come usare GLEW con GLFW potrei postare che come ques separata in realtà.

risposta

11

GLEW non è 'necessario', come dici tu. Potresti usare l'intestazione glcorearb.h, o qualcosa del genere. Tuttavia, se si collega con alcune funzioni, deve esistere sulla piattaforma di destinazione, altrimenti il ​​programma non verrà avviato. GLEW e gli altri lo gestiscono esattamente - non si collegano direttamente alle funzioni GL, ma si ottengono invece i puntatori di funzione dopo la fase di inizializzazione. Permette di verificare in fase di esecuzione quali estensioni sono presenti e quali funzioni possono essere utilizzate.

L'unica cosa che aiuta nella portabilità è ottenere i puntatori di funzione: potrebbe essere wglGetProcAddress/glxGetProcAddress ed è analogo per i sistemi operativi Apple. Quindi no, non è un caso. Tuttavia, la varietà di estensioni GL disponibili è.

GLEW non richiede punti di contatto con la libreria di inizializzazione GL preferita - basta chiamare glewInit dopo aver creato contesto GL.

+0

Se creo una finestra e chiamo glewInit() viene visualizzato un errore segfault? – user3728501

+0

@EdwardBird: hai creato un contesto OpenGL su quella finestra? È attivo un contesto OpenGL quando si chiama glewInit? – datenwolf

+0

Sì, l'ho fatto, ma ho risolto il problema ora - grazie comunque (: – user3728501

5

Per GLEW correttamente init un contesto OpenGL deve essere creato ewglMakeCurrent() deve essere chiamato prima di chiamare glewInit();

vorrei mettere questo nei commenti di risposta di keltar, ma non vedo come.

+0

Grazie per l'aggiunta - upvoted – user3728501