gpt4 book ai didi

c - OpenGL 空白屏幕

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:18:04 24 4
gpt4 key购买 nike

我试图在 OpenGL 中渲染一个白色方 block ,我有这个函数可以这样做:

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

然后我在 main_loop 函数中调用它(就在 while 循环之前):

    initialize_image(&vArray, &vBuffer, vertices);

但这一直给我一个虚无的黑屏。可能是什么原因造成的?

最佳答案

当您将指针传递给顶点数组时,它的 sizeof() 是指针大小而不是您的数据大小!

将额外的顶点大小参数传递给您的函数,并使用它代替 sizeof 进行 glBufferData 调用。

关于c - OpenGL 空白屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27029494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com