2012-01-26 19 views
6

Así que este es un doozie;
Tengo una solución OpenGL bastante grande, escrita en core versión 3.2 con GLSL 1.5 en Windows 7. Estoy usando GLEW y GLM como bibliotecas de ayuda. Cuando creo una ventana, estoy usando las siguientes líneas:No se puede implementar 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)) 
{ ... 

Si Omito las tres funciones glfwOpenWindowHint, la aplicación se bloquea mis controladores de vídeo sobre la llamada a glDrawArrays (GL_TRIANGLES, 0, m_numIndices);

Pero aquí está el truco. Cuando alguien más en mi grupo intenta actualizar y ejecutar la solución, obtienen una ventana en blanco sin geometría. Comentando las tres líneas hace que el programa funcione bien para ellos. Hay una muy buena división entre trabajar con la sugerencia de 3.2core y sin ella. No he podido determinar ninguna diferencia entre nVidia, AMD, computadora de escritorio o computadora portátil.

Lo mejor que pude encontrar fue una sugerencia para agregar glewExperimental = GL_TRUE; como se dice que Glew tiene problemas con el núcleo. No hizo ninguna diferencia. La solución es demasiado grande para publicar el código, pero puedo poner shaders, renderizar código, etc. según sea necesario.

¡Muchas gracias! Esto nos ha estado matando por varios días.

+0

Entonces, ¿funcionó finalmente? – mlvljr

+1

No. GLFW es, de lejos, la solución de ventanas más fácil, pero no es confiable en absoluto. Al desactivar el fuego cruzado en mi computadora, puedo hacer que funcione la mayor parte del tiempo. Todavía no se ejecutará en las máquinas nVidia en nuestro laboratorio. Contacté a los chicos de GLFW en IRC, y solo tienen un desarrollador de Windows. Su respuesta fue "No lo sé". Hice un intento de pasar a SDL, pero eso no crearía un contexto 3.X en ninguna de nuestras máquinas. Todavía usando GLFW, solo de manera no confiable. – AGuyInAPlace

+0

¿Puedes vincular a un ejemplo que se comporta de manera no confiable? Es solo que ayer preparé GLFW + GL3W en un AMD Llano 3650 (siguiendo los consejos de la respuesta del petardo), y aunque el ejemplo rudimentario es 100% correcto, me gustaría saber de posibles puntos de tropiezo. – mlvljr

Respuesta

10

intentar pedir una ventana GLFW compatibles con visión de:

GLFW_OPENGL_FORWARD_COMPAT - Especificar si el OpenGL contextshould ser compatible hacia delante (es decir, no permitir la funcionalidad heredada). Esto solo debe utilizarse cuando se solicita OpenGL versión 3.0 o superior.

Y tratar no ajuste de la pista perfil y dejar que el sistema seleccione:

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

Además, asegúrese de que en realidad se obtiene una versión que desee:

int major, minor, rev; 

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

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

No estoy seguro de si también ejecuta Macs, pero lea esto de todos modos:

A.4 OpenGL 3.0 o superior en Mac OS X

soporte para OpenGL 3.0 y superior se introdujo con Mac OS X 10.7, e incluso compatibles con visión de entonces OpenGL 3.2 del núcleo del perfil contextos se apoyado y hay no es un mecanismo para solicitar contextos de depuración. Las versiones anteriores de Mac OS X admiten, como máximo, la versión 2.1 de OpenGL.

Debido a esto, en Mac OS X 10.7, la GLFW_OPENGL_VERSION_MAJOR y consejos GLFW_OPENGL_VERSION_MINOR fallarán si se les da una versión anterior 3.2, los consejos GLFW_OPENGL_DEBUG_CONTEXT y GLFW_FORWARD_COMPAT son ignorados, y el establecimiento de la indirecta GLFW_OPENGL_PROFILE a nada, excepto cero o GLFW_OPENGL_CORE_PROFILE hará que glfwOpenWindow falle.

Además, en Mac OS X 10.6 y más adelante, el GLFW_OPENGL_VERSION_MAJOR y consejos GLFW_OPENGL_VERSION_MINOR fallarán si se les da una versión anterior 2.1, la sugerencia GLFW_OPENGL_DEBUG_CONTEXT no tendrá ningún efecto, y establecer las sugerencias GLFW_OPENGL_PROFILE o GLFW_FORWARD_COMPAT en un valor distinto de cero de hará que falle glfwOpenWindow.

+0

¡Retroalimentación útil! ¡Gracias! También estamos compilando para Mac, pero disparando para OSX 10.7 por esa razón exacta. Probé tus sugerencias y obtuve lo siguiente: en mi sistema, la versión 3.2.11318 resulta y funciona muy bien. En las otras computadoras, se obtienen resultados de la versión 3.2.0 y no se dibuja geometría. Omitir las líneas me pone en 4.2.11318, causando la caída de gráficos habitual. Omitir el suyo corre a 4.2.0 con geometría completa, todo funciona bien. Todavía no he llegado a Google, pero ¿cuál es el significado de la revisión 11318? ¿Es eso responsable de este extraño comportamiento? – AGuyInAPlace

+0

@AGuyInAPlace: No soy un experto de OpenGL, así que no lo sabría. Un consejo general es asegurarse de que los controladores OpenGL de cada cliente estén actualizados. No sabría a quién echarle la culpa aquí, OpenGL o GLFW, pero puede intentar ponerse en contacto con el desarrollador de GLFW en #glfw en freenode. – orlp

+0

Todos estamos ejecutando la versión más reciente, pero eso suena como un excelente paso siguiente. Gracias por el puntero! – AGuyInAPlace

0

Me encontré con el mismo problema. Tuve que crear un VAO antes de mi VBO y ahora funciona en OS X.

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