相关疑难解决方法(0)

glBindVertexArrays与glBindBuffer的作用是什么?它们的关系是什么?

我是OpenGL和图形编程的新手.到目前为止,我一直在读一本非常详尽且写得很好的教科书.但是,我在代码中找到了一点,我不太了解,我想在我之前理解这些线条.继续.

GLuint abuffer;

glGenVertexArrays(1, &abuffer);
glBindVertexArray(abuffer);
Run Code Online (Sandbox Code Playgroud)
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

该书解释说,前三行是创建一个顶点数组对象,用于将关联数据与顶点数组捆绑在一起.第二行找到一个未使用的名称(我猜测存储的无符号整数标识符abuffer),第三行创建对象/使其处于活动状态.

这本书解释了第4到第7行创建一个缓冲对象来存储我们的数据,第5行给我们一个未使用的标识符(类似于第2行的顶点数组对象?),第6行创建缓冲区,第7行line在CPU上分配足够的内存并创建指向我们的数据(点)的指针GL_STATIC_DRAW.

对象处于活动状态意味着什么?你abuffer什么时候会用?顶点数组捆绑关联数据是什么意思,以及与此顶点数组对象关联的数据何时?

我对abuffer和之间的关系感到困惑buffer.我对顶点数组与缓冲区对象的关系以及该关系形成的关系感到困惑.我不确定它们是否实际上是相关的,但是它们在教科书中一个接一个地出现.

任何帮助,将不胜感激.谢谢.

c++ opengl

71
推荐指数
4
解决办法
2万
查看次数

VAO和元素数组缓冲区状态

我最近写一些的OpenGL 3.3代码与顶点数组对象(VAO)并测试它以后英特尔图形适配器,我发现,我感到失望,该元件阵列缓冲器结合显然不是VAO状态的一部分,作为呼叫:

glBindVertexArray(my_vao);
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_INTEGER, 0);
Run Code Online (Sandbox Code Playgroud)

没有效果,而:

glBindVertexArray(my_vao);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, my_index_buffer); // ?
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_INTEGER, 0);
Run Code Online (Sandbox Code Playgroud)

渲染几何体.我认为这是在英特尔执行的OpenGL(因为它是在GL_ARB_vertex_array_object即使在GL_OES_vertex_array_object明确提出(和)该元素阵列的一个单纯的错误保存状态的一部分),但随后在移动的NVIDIA Quadro 4200发生这不好玩.

它是我的代码中的驱动程序错误,规格错误或错误吗?代码在GeForce 260和480上完美运行.

有没有类似的经历?

什么也奇怪的是,GL_EXT_direct_state_access不具有结合元件阵列缓冲器到VAO的函数(但是它确实有功能来指定顶点ATTRIB阵列,因此阵列缓冲器).GPU制造商是否违反规范并欺骗我们,或者是什么?

编辑:

我原本不打算显示任何源代码,因为我认为这里没有必要.但是根据要求,这是重现问题的最小测试用例:

static GLuint n_vertex_buffer_object, p_index_buffer_object_list[3];
static GLuint p_vao[2];

bool InitGLObjects()
{
    const float p_quad_verts_colors[] = {
        1, 0, 0, -1, 1, 0,
        1, 0, 0, 1, 1, 0,
        1, 0, 0, 1, -1, 0,
        1, 0, 0, -1, -1, 0, // red quad
        0, 0, 1, -1, 1, 0,
        0, 0, 1, …
Run Code Online (Sandbox Code Playgroud)

opengl nvidia intel vertex-array opengl-3

22
推荐指数
2
解决办法
2万
查看次数

标签 统计

opengl ×2

c++ ×1

intel ×1

nvidia ×1

opengl-3 ×1

vertex-array ×1