2012-01-26 9 views
6

Więc ten jest doozie;
Mam dość duże rozwiązanie OpenGL, napisane w wersji 3.2 core z GLSL 1.5 w Windows 7. Używam GLEW i GLM jako bibliotek pomocniczych. Kiedy utworzyć okno, używam następujące linie:Nie można wdrożyć 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)) 
{ ... 

Jeśli pominąć trzy funkcje glfwOpenWindowHint aplikacja wywala mi sterowniki wideo upon wezwanie do glDrawArrays (GL_TRIANGLES, 0, m_numIndices);

Ale tu jest kopacz. Gdy ktoś z mojej grupy próbuje zaktualizować i uruchomić rozwiązanie, otrzyma puste okno bez geometrii. Komentowanie tych trzech linii sprawia, że ​​program działa dobrze. Istnieje dość równomierny podział pomiędzy pracą z podpowiedzią 3.2core i bez. Nie udało mi się ustalić żadnej różnicy między nVidia, AMD, komputerem stacjonarnym lub laptopem.

Najlepsze co mogłem znaleźć to sugestia, aby dodać glewExperimental = GL_TRUE; jak mówi Glew ma problemy z rdzeniem. To nie miało znaczenia. Rozwiązanie jest zbyt duże, aby opublikować kod, ale w razie potrzeby mogę umieścić shadery, renderujące kod itp.

Dziękuję bardzo! To zabija nas od kilku dni.

+0

Czy to się udało w końcu? – mlvljr

+1

Nie. GLFW jest zdecydowanie najłatwiejszym rozwiązaniem do okienkowania, ale w ogóle nie jest wiarygodne. Wyłączając Crossfire na moim komputerze, mogę go uruchomić przez większość czasu. Nadal nie będzie działać na maszynach nVidii w naszym laboratorium. Skontaktowałem się z chłopakami z GLFW na IRC i mają tylko jednego programistę systemu Windows. Jego odpowiedź brzmiała: "Nie wiem". Podjęłam próbę przejścia na SDL, ale to nie tworzyłoby w ogóle kontekstu 3.X na jednej z naszych maszyn. Nadal korzystam z GLFW, tylko niesłusznie. – AGuyInAPlace

+0

Czy można połączyć z przykładem, który zachowuje się niesłusznie? Chodzi o to, że wczoraj założyłem GLFW + GL3W na AMD Llano 3650 (podążając za wskazówkami w odpowiedzi nocnika), a chociaż podstawowy przykład jest w 100% w porządku, chciałbym wiedzieć o możliwych potknięciach. – mlvljr

Odpowiedz

10

Spróbuj prosząc o okna GLFW przodu kompatybilne:

GLFW_OPENGL_FORWARD_COMPAT - Określ, czy OpenGL contextshould być kompatybilne z przodu (to uniemożliwić działanie starszych). To powinno być używane tylko podczas żądania OpenGL w wersji 3.0 lub wyższej.

I spróbuj nie ustawiając wskazówkę profil i niech system wyboru:

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

Ponadto, upewnij się, że rzeczywiście dostać wersję chcesz:

int major, minor, rev; 

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

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

Nie jesteś pewien, czy używasz komputera Mac, ale mimo to przeczytaj:

A.4 OpenGL 3.0+ na Mac OS X

Wsparcie dla OpenGL 3.0 i powyżej zostało wprowadzone do systemu Mac OS X 10.7, a nawet wtedy naprzód kompatybilne OpenGL 3.2 podstawowych profili konteksty są obsługiwane i nie nie jest mechanizmem żądania kontekstów debugowania. Wcześniejsze wersje systemu Mac OS X obsługują maksymalnie wersję 2.1 OpenGL.

Z tego powodu, w systemie Mac OS X 10.7, GLFW_OPENGL_VERSION_MAJOR i podpowiedzi GLFW_OPENGL_VERSION_MINOR zawiedzie, jeśli dana wersja powyżej 3.2 podpowiedzi GLFW_OPENGL_DEBUG_CONTEXT i GLFW_FORWARD_COMPAT są ignorowane, a ustawiając wskazówkę GLFW_OPENGL_PROFILE do niczego z wyjątkiem zero lub GLFW_OPENGL_CORE_PROFILE spowoduje niepowodzenie glfwOpenWindow.

Ponadto, w systemie Mac OS X 10.6 i poniżej, GLFW_OPENGL_VERSION_MAJOR i podpowiedzi GLFW_OPENGL_VERSION_MINOR zawiedzie, jeśli dana wersja powyżej 2.1, wskazówka GLFW_OPENGL_DEBUG_CONTEXT nie przyniesie żadnego efektu, a ustawienie wskazówek GLFW_OPENGL_PROFILE lub GLFW_FORWARD_COMPAT na wartość niezerową o wartości spowoduje niepowodzenie glfwOpenWindow.

+0

Pomocna informacja zwrotna! Dziękuję Ci! Poza tym budujemy dla Maca, ale z tego właśnie powodu strzelamy do OSX 10.7. Próbowałem twoich wskazówek i otrzymałem: W moim systemie wersja 3.2.11318 działa i działa dobrze. Na innych komputerach wyniki w wersji 3.2.0 nie są rysowane. Pominięcie linii powoduje, że mam 4.2.11318, powodując zwykłą awarię grafiki. Pomijanie ich działa w wersji 4.2.0 z pełną geometrią, wszystko działa poprawnie. Jeszcze nie trafiłem w Google, ale jakie jest znaczenie wersji 11318? Czy to jest odpowiedzialne za to dziwne zachowanie? – AGuyInAPlace

+0

@AGuyInAPlace: Nie jestem ekspertem OpenGL, więc nie wiedziałbym. Ogólną wskazówką jest upewnienie się, że sterowniki OpenGL każdego klienta są aktualne. Nie wiedziałbym, kogo tu winić, OpenGL czy GLFW, ale możesz spróbować skontaktować się z twórcami GLFW na #glfw at freenode. – orlp

+0

Wszyscy używamy najnowszej wersji, ale to brzmi jak doskonały następny krok. Dzięki za wskazówkę! – AGuyInAPlace

0

Wpadłem na ten sam problem. Musiałem stworzyć VAO przed moim VBO, a teraz działa na OS X.

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