在没有直接API的情况下调试OpenGL 3.0(也称为glBegin()…)

在没有直接API的情况下调试OpenGL 3.0(也称为glBegin()…),opengl,opengl-3,Opengl,Opengl 3,我很清楚,直接API(如glBegin();glVertex();glBegin();)对于渲染复杂场景和真实应用程序(如游戏)是无效的 但是对于调试和测试小事情来说,它是非常有用的。用于调试场景中对象的物理特性(矢量可视化,如速度矢量、力…) 你可能会问,为什么不回到OpenGL 1.x来处理这么小的事情呢?因为程序的其余部分使用OpenGL 3.0功能,而且我非常喜欢片段着色器 有没有办法将其与OpenGL 3.0及更高版本一起使用? 如果我不想把整个仪式写成这样,那么调试的策略是什么 gl

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

但是对于调试和测试小事情来说,它是非常有用的。用于调试场景中对象的物理特性(矢量可视化,如速度矢量、力…)

你可能会问,为什么不回到OpenGL 1.x来处理这么小的事情呢?因为程序的其余部分使用OpenGL 3.0功能,而且我非常喜欢片段着色器

有没有办法将其与OpenGL 3.0及更高版本一起使用? 如果我不想把整个仪式写成这样,那么调试的策略是什么

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);

对于我要绘制的每个箭头

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

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

在OpenGL3.1之前,只有一个配置文件。分为兼容性和核心的过程发生在3.2中


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

在一些助手类/函数中包装这些类不起作用?请参见我在这里概述的方法