带和不带着色器的VBO OpenGL C++;

带和不带着色器的VBO OpenGL C++;,opengl,vbo,Opengl,Vbo,我正在尝试实现现代OpenGL,但问题是:大多数教程都是基于3.3+,说到GLSL 330,我只有GLSL 130。因此,许多事情显然是不同的,因为我的VBO不起作用 你能给我一些一般性的提示或者一个教程来解释如何在VBO中使用GLSL 130吗?在我的例子中,我加载了vbo,但是当我使用着色器程序时,只有使用glVertex调用的顶点被渲染,这就像vbo被忽略一样(没有输入)。如何解决这个问题 你能在没有着色器的情况下使用VBO吗?我尝试过这样做,但它崩溃了…是的,VBOs仍然可以在GLSL

我正在尝试实现现代OpenGL,但问题是:大多数教程都是基于3.3+,说到GLSL 330,我只有GLSL 130。因此,许多事情显然是不同的,因为我的VBO不起作用

你能给我一些一般性的提示或者一个教程来解释如何在VBO中使用GLSL 130吗?在我的例子中,我加载了vbo,但是当我使用着色器程序时,只有使用glVertex调用的顶点被渲染,这就像vbo被忽略一样(没有输入)。如何解决这个问题


你能在没有着色器的情况下使用VBO吗?我尝试过这样做,但它崩溃了…

是的,VBOs仍然可以在GLSL 130中使用,即使没有着色器也可以使用。VBO的目的是保存图形的顶点属性。我看到的大多数最新教程都使用布局位置说明符来指示如何处理着色器中的不同属性,即

layout(location = 0) in vec3 Position;
这在GLSL 130中不受支持,因此必须使用另一种方法将属性与VBO关联起来。这很简单。。。您可以使用或。调用
glGetAttriblLocation
将为您提供需要在
glVertexAttribPointer
中使用的标识符,以将VBO数据与特定属性关联。您可以在程序编译后的任何时候调用它。此外,如果在创建程序对象之后但在链接着色器之前调用,则可以调用GLBindAttriblLocation来专门设置将与给定属性名称关联的标识符。这很方便,因为它可以让您自己决定位置应该是什么,就像您可以使用布局说明符一样


最后,如果希望使用VBO而不使用着色器,则仍然需要找到一种方法,将VBO中的数据与固定函数管道所需的各种输入关联起来。这是使用一种现已弃用的方法来完成的,该方法名为
glEnableClientState()
glVertexPointer()
,它们一起可以告诉OpenGL要填充的固定函数管道属性,以及如何在VBO中找到数据

VBO和着色器(以及着色器版本)是GL中完全正交的功能。(现代GL两者都需要。)是什么让你认为“你的VBO不工作”,仅仅因为你使用的是GLSL 1.30而不是3.30?正如我所说,它们对我来说是新的,所以我遵循了教程,但大多数教程(或我发现的所有教程)都是针对330 GLSL的。例如,布局(=0)或某物在130中不存在,而gl_modelview_matrix等在330中可能不存在。我只是不知道从哪里开始…你混淆了很多不同的东西。不幸的是,现在编程OpenGL的这一方面对于试图学习东西的人来说是一团混乱。你感到困惑是完全可以理解的,因为这是一个令人困惑的局面。您是否可以选择升级到新的驱动程序或与3.3+兼容的新操作系统?我使用NVIDIA,我可以更新我的驱动程序,但是我担心我的计算机不支持330+GLSL。这是一个坏运气,因为GLSL 330+显然是一个现代标准,您实际上不必调用
glvertexinter(…)
glvertexattributepointer(0,…)
保证在固定函数管道中别名到顶点位置
glVertexPointer
无疑是更好的方法,因为不知道这一点的人会被在固定函数应用程序中设置顶点属性0指针的代码所迷惑。我很好奇这是在哪里记录的,以及其他固定函数顶点属性是否有标准别名。如果你看一下规范,在第387页的“10.8.2传输顶点属性为零的顶点”小节中,以丑陋的红色(不推荐)文本描述了这种行为。这仅(可移植)适用于顶点属性0,但在将GLSL引入核心(GL 2.0)之前,在表X.1中定义了一整套别名。它们不应该在GLSL中工作。现在我不支持330 GLSL,我应该使用不推荐的功能吗?我的目标是编写一个能够在大多数OpenGL实现上运行的引擎,因此我可以从您不能结合使用glVertex()和VBO开始(并且您也不能使用glBegin()/glEnd(),您需要使用glDrawElements()或glDrawArrays()。在固定函数管道中使用VBO主要是调用glEnableClientState(),以便OpenGL知道如何从VBO中提取顶点,然后使用glDrawArrays()方法强制管道开始在三角形中旋转。