我希望这是描述我所做的正确的语言!我创建了一个支持FSAA的WGL OpenGL上下文。我已设法通过使用
使用着色器和VBO进行渲染glBindBuffer(GL_ARRAY_BUFFER, my_gl_vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data[0][0])*9, g_vertex_buffer_data, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, my_gl_vertexbuffer);
glVertexAttribPointer(
0,
3,
GL_FLOAT,
GL_FALSE,
0,
(void*)0
);
glBindBuffer(GL_ARRAY_BUFFER, my_gl_colorbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_color_buffer_data[0][0])*9, g_color_buffer_data, GL_STATIC_DRAW);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, my_gl_colorbuffer);
glVertexAttribPointer(
1, // attribute. No particular reason for 1, but must match the layout in the shader.
3, // size
GL_FLOAT, // type
GL_FALSE, // normalized?
0, // stride
(void*)0 // array buffer offset
);
glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle
我得到一个输出,没有光照,因为我的着色器中没有光照计算,因为我有3个灯点亮了场景。
所以有人建议我可以使用
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, g_vertex_buffer_data);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3, GL_FLOAT, 0,g_color_buffer_data);
glDrawArrays(GL_TRIANGLES, 0, 3); // 3 indices starting at 0 -> 1 triangle
哪种工作在简单的OpenGL上下文[不支持FSAA]。在FSAA WGL上下文[没有任何着色器加载所以我可以使用固定管道]我得到的是我清除屏幕的背景颜色 - 它似乎没有渲染任何东西。在FSAA WGL上下文中是否不支持glVertexPointer等命令?或者是否使用WGL上下文我必须使用着色器?
答案 0 :(得分:2)
glVertexPointer (...)
,glColorPointer (...)
等。您的问题与MSAA无关(虽然使用64x会引起人们的注意),而是告诉GL消除 所有 。在限制性方面,向前兼容的上下文是 core 之外的一步。有些东西已被弃用但未在核心中删除,例如宽行... forward-compatible删除在核心中仍然有效的任何弃用。
尽管如此,glColorPointer (...)
,已弃用并从核心移除。您必须从上下文标志中删除前向兼容位才能使用它。