Estoy escribiendo un motor de juego, y cuando uso una cámara de perspectiva me sale una pantalla negra. No voy a preguntar exactamente por qué esto se debe a que habría mucho código para compartir y, francamente, creo que es una pregunta un tanto mezquina incluso para molestarlos a todos.
El problema es que no sé cómo depurarlo. Todo lo que cambia es mi matriz de proyección, y si mi matriz de proyección se ve bien, no sé por qué no funciona. Lo ideal sería imprimir los valores de varias cosas a medida que el sombreador hizo sus cálculos, pero GLSL no tiene la función printf ().
Entonces mi pregunta es: ¿cómo depuro mi problema? Lo único que se me ocurre es verificar tantos valores como pueda del lado del cliente y luego programar por permutación, pero lo hice y no llegué a ninguna parte. ¿Hay alguna manera de ver lo que sucede en la tarjeta de video? ¿Existe una técnica completamente diferente que podría estar usando?
Estoy usando GLSL versión 420 (y características específicas de esa versión), por lo que no creo que glslDevil sea una opción, teniendo en cuenta que se actualizó por última vez en 2010.
EDITAR
Logré resolver mi problema a través de una depuración completamente no relacionada.
Aunque no estoy seguro, NVIDIA Nsight debería poder depurar Shaders, al menos creo que era compatible con GLSL en alguna versión anterior (que debería poder encontrar). Se integra bastante bien con Visual Studio, no es fácil pero tiene muchas cosas útiles, pero en las versiones anteriores necesitabas 2 máquinas con una GPU para depurar sombreadores a través de una red (mientras que la última versión dice que permite la depuración "local") . Además, marque Shader Designer [2], que parece ser un IDE útil (pero que carece de depuración GLSL).
[1] http://developer.nvidia.com/content/nvidia-nsight-visual-studio-edition
[2] http://www.opengl.org/sdk/tools/ShaderDesigner/
fuente
Desafortunadamente, la depuración de opengl no es fácil. Aquí hay cosas que encontré útiles:
fuente
Personalmente, sigo usando RenderMonkey. Sin embargo, no es del todo adecuado para esta pregunta exacta porque es solo una fachada de una aplicación real y, por lo tanto, tiene algunas limitaciones extrañas. Está bastante fuera de soporte, pero no he encontrado nada mejor para depurar GLSL.
fuente