C OpenGL空白屏幕
我正试图在OpenGL中渲染一个白色正方形,我有这个函数来实现这一点:C OpenGL空白屏幕,c,linux,opengl,C,Linux,Opengl,我正试图在OpenGL中渲染一个白色正方形,我有这个函数来实现这一点: void main_loop(window_data *window) { printf("%s\n", glGetString(GL_VERSION)); GLuint vertex_array_objects, vertex_buffer_objects; glGenVertexArrays(1, &vertex_array_objects); glBindVertexArray
void main_loop(window_data *window)
{
printf("%s\n", glGetString(GL_VERSION));
GLuint vertex_array_objects, vertex_buffer_objects;
glGenVertexArrays(1, &vertex_array_objects);
glBindVertexArray(vertex_array_objects);
glGenBuffers(1, &vertex_buffer_objects);
glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer_objects);
GLfloat vertices[6][2] = {
{-0.90, -0.90},
{0.85, -0.90},
{-0.90, 0.85},
{0.90, -0.85},
{0.90, 0.90},
{-0.85, 0.90}};
glBufferData(
GL_ARRAY_BUFFER,
sizeof(vertices),
vertices,
GL_STATIC_DRAW);
glVertexAttribPointer(0,
2,
GL_FLOAT,
GL_FALSE,
0,
(void*)0);
glEnableVertexAttribArray(0);
while (!glfwWindowShouldClose(window->glfw_window))
{
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(vertex_array_objects);
glDrawArrays(GL_TRIANGLES, 0, 6);
glfwSwapBuffers(window->glfw_window);
glfwPollEvents();
}
return;
}
这很好,但我试着把它分成两个函数,如下所示:
void initialize_image(GLuint *vArray, GLuint *vBuffer, GLfloat vertices[][2])
{
glGenVertexArrays(1, vArray);
glBindVertexArray(*vArray);
glGenBuffers(1, vBuffer);
glBindBuffer(GL_ARRAY_BUFFER, *vBuffer);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(vertices),
vertices,
GL_STATIC_DRAW);
glVertexAttribPointer(
0,
2,
GL_FLOAT,
GL_FALSE,
0,
(void*)0);
glEnableVertexAttribArray(0);
return;
}
然后我在主循环函数中调用它(就在while循环之前):
但这一直给我一个虚无的黑屏。
这可能是什么原因造成的?将指针传递到顶点数组时,其sizeof()是指针大小,而不是数据大小
将附加的顶点大小参数传递给函数,并在glBufferData调用中使用它而不是sizeof。可能与您引用的错误类型完全相同!哇-那是一个漂亮的接球。
initialize_image(&vArray, &vBuffer, vertices);