在没有直接API的情况下调试OpenGL 3.0(又名glBegin()...)

时间:2014-11-11 20:00:17

标签: opengl opengl-3

我很清楚,直接API(如glBegin(); glVertex(); glBegin();)对渲染复杂场景和游戏等真实世界应用程序无效。

但是为了调试和测试小东西,它非常有用。例如。用于调试场景中物体的物理(矢量的可视化,如速度矢量,力......)。

您可能会问 - 为什么不回归OpenGL 1.x这样的小事?因为程序的其余部分使用OpenGL 3.0功能,因为我真的很喜欢片段着色器。

有没有办法在OpenGL 3.0及更高版本中使用它? 或者如果我不想像

那样写整个仪式,那么什么是debuging的策略
glGenVertexArrays(1, &vao);                 
glBindVertexArray(vao);                       
glGenBuffers(2, vbo);                       
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);      
glBufferData(GL_ARRAY_BUFFER, 8 * sizeof(GLfloat), diamond, GL_STATIC_DRAW);     
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);                          
glEnableVertexAttribArray(0);               
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);      
glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), colors, GL_STATIC_DRAW); 
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);        
glEnableVertexAttribArray(1);                                
glDrawArrays(GL_LINES, 0, 4);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDeleteProgram(shaderprogram);
glDeleteBuffers(2, vbo);
glDeleteVertexArrays(1, &vao);

我想绘制的每一支箭头?

1 个答案:

答案 0 :(得分:2)

如果使用兼容性配置文件创建上下文,您仍然可以使用OpenGL 3.2或更高版本的所有旧功能。只有核心配置文件删除了旧版功能。

大多数平台似乎仍支持兼容性配置文件。一个值得注意的例外是Mac OS,其中3.x上下文仅受Core Profile支持。

直到OpenGL 3.1,只有一个配置文件。兼容性和核心的分裂发生在3.2。

使用较新的界面,一旦掌握了它,就不会那么糟糕。如果你的调试使用相对重复,你总是可以编写一些很好的实用程序类来提供更方便的接口。