2012-01-26 11 views
6

Quindi questo è un doozie;
Ho una soluzione OpenGL piuttosto grande, scritta nella versione 3.2 core con GLSL 1.5 in Windows 7. Sto usando GLEW e GLM come librerie helper. Quando creo una finestra, sto usando le seguenti linee:Impossibile distribuire GLFW 3.2

// Initialize main window 
glewExperimental = GL_TRUE; 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); // Use OpenGL Core v3.2 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
if(!glfwOpenWindow(Game::WINDOW_X, Game::WINDOW_Y, 0, 0, 0, 0, 32, 0, GLFW_WINDOW)) 
{ ... 

Se Tralascio le tre funzioni glfwOpenWindowHint, l'applicazione va in crash i miei driver video su chiamata a glDrawArrays (GL_TRIANGLES, 0, m_numIndices);

Ma ecco il calciatore. Quando qualcun altro nel mio gruppo tenta di aggiornare ed eseguire la soluzione, ottiene una finestra vuota senza geometria. Commentando le tre linee, il programma funziona bene per loro. C'è una divisione abbastanza uniforme tra lavorare con il suggerimento 3.2core e senza. Non sono stato in grado di determinare alcuna differenza tra nVidia, AMD, desktop o laptop.

Il meglio che ho trovato è stato un suggerimento per aggiungere glewExperimental = GL_TRUE; come si dice che Glew abbia problemi con il core. Non ha fatto differenza. La soluzione è troppo grande per scrivere codice, ma posso creare shader, codice di rendering, ecc. Se necessario.

Grazie mille! Questo ci ha uccisi per diversi giorni.

+0

Quindi, ha funzionato finalmente? – mlvljr

+1

No. GLFW è di gran lunga la soluzione di finestratura più semplice, ma non è affatto affidabile. Disabilitando il fuoco incrociato sul mio computer posso farlo funzionare la maggior parte del tempo. Ancora non funzionerà con le macchine nVidia nel nostro laboratorio. Ho contattato i ragazzi del GLFW su IRC e hanno solo uno sviluppatore Windows. La sua risposta fu "Non so". Ho fatto un tentativo di passare a SDL, ma questo non creerebbe un contesto 3.X su una delle nostre macchine. Ancora usando GLFW, solo in modo inaffidabile. – AGuyInAPlace

+0

Puoi collegarti a un esempio che si comporta in modo inaffidabile? È solo che ho impostato GLFW + GL3W su un AMD Llano 3650 ieri (seguendo i suggerimenti nella risposta di Nightcracker), e mentre l'esempio rudimentale è ok al 100%, vorrei sapere dei possibili punti di inciampo. – mlvljr

risposta

10

Prova a chiedere per una finestra forward-compatibile GLFW:

GLFW_OPENGL_FORWARD_COMPAT - Specificare se l'OpenGL contextshould essere compatibile-forward (cioè disabilitare la funzionalità legacy). Questo dovrebbe essere utilizzato solo quando si richiede OpenGL versione 3.0 o successiva.

E cercare non impostando il profilo suggerimento e lasciare che il sistema di scegliere:

// Use OpenGL Core v3.2 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); 

Inoltre, assicurarsi che effettivamente ottenere una versione che si desidera:

int major, minor, rev; 

glfwGetGLVersion(&major, &minor, &rev); 

fprintf(stderr, "OpenGL version recieved: %d.%d.%d", major, minor, rev); 

Non sei sicuro se esegui anche Mac, ma leggi comunque:

A.4 OpenGL 3.0+ su Mac OS X

Il supporto per OpenGL 3.0 e superiori è stato introdotto con Mac OS X 10.7, e anche OpenGL 3.2 principali contesti profilo quindi compatibili nel futuro sono sostenuto e ci non è un meccanismo per la richiesta di contesti di debug. Le versioni precedenti di Mac OS X supporta al massimo OpenGL versione 2.1.

A causa di questo, su Mac OS X 10.7, il GLFW_OPENGL_VERSION_MAJOR e suggerimenti GLFW_OPENGL_VERSION_MINOR fallirà se dato una versione sopra 3.2, i suggerimenti GLFW_OPENGL_DEBUG_CONTEXT e GLFW_FORWARD_COMPAT vengono ignorate, e impostando il suggerimento GLFW_OPENGL_PROFILE a nulla, tranne zero o GLFW_OPENGL_CORE_PROFILE causerà il fallimento di glfwOpenWindow.

Inoltre, su Mac OS X 10.6 e sotto, il GLFW_OPENGL_VERSION_MAJOR e suggerimenti GLFW_OPENGL_VERSION_MINOR fallirà se dato una versione sopra 2.1, l'hint GLFW_OPENGL_DEBUG_CONTEXT non avrà alcun effetto e l'impostazione degli hint GLFW_OPENGL_PROFILE o GLFW_FORWARD_COMPAT su un valore diverso da zero causerà il fallimento di glfwOpenWindow.

+0

Ritorno utile! Grazie! Inoltre stiamo costruendo per Mac, ma giriamo per OSX 10.7 proprio per questo motivo. Ho provato i tuoi suggerimenti e ho ottenuto quanto segue: Sul mio sistema, la versione 3.2.11318 risulta e funziona perfettamente. Negli altri computer, i risultati della versione 3.2.0 e nessuna geometria vengono disegnati. Omettere le righe mi mette al 4.2.11318, causando il solito crash della grafica. Omettere la loro corre alla 4.2.0 con geometria completa, tutto funziona bene. Non hai ancora colpito Google, ma qual è il significato della revisione 11318? È responsabile di questo strano comportamento? – AGuyInAPlace

+0

@AGuyInAPlace: non sono un esperto di OpenGL quindi non lo saprei. Un consiglio generale è di assicurarsi che i driver OpenGL di ogni client siano aggiornati. Non saprei chi dare la colpa qui, OpenGL o GLFW, ma puoi provare a metterti in contatto con gli sviluppatori di GLFW su #glfw su freenode. – orlp

+0

Stiamo eseguendo la versione più recente, ma sembra un ottimo passo successivo. Grazie per il puntatore! – AGuyInAPlace

0

Ho incontrato lo stesso problema. Ho dovuto creare un VAO prima dei miei VBO e ora funziona su OS X.

GLuint vertex_array; 
glGenVertexArrays(1, &vertex_array); 
glBindVertexArray(vertex_array);