gpt4 book ai didi

c++ - OpenGL 不渲染,可能是由于一些我找不到的简单错误

转载 作者:行者123 更新时间:2023-11-28 02:53:53 25 4
gpt4 key购买 nike

所以这段代码应该渲染一个矩形(最终我希望它渲染一个立方体,但是如果不能先绘制一个矩形就尝试这样做是没有意义的)。

我有适当的代码来检查 GL 错误,虽然有一个,但这个 question 的答案让我相信它不相关(它是 GL_INVALID_ENUM,在 glewInit(); 之后被立即抛出)。

这是我的代码:

主要内容:

#include <glm/glm.hpp>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <GL/gl.h>
#include <GL/glext.h>
#include <thread>

#define GLEW_STATIC
#include <GL/glew.h>

#include <engine.hpp>

GLuint VertexBuffer, VertexArray, ElementBuffer, ShaderProgram;

GLfloat vertices[] = {
-0.5, 0.5, 0.5, // Front Top Left - 0
0.5, 0.5, 0.5, // Front Top Right - 1
0.5, -0.5, 0.5, // Front Bottom Right - 2
-0.5,-0.5, 0.5, // Front Bottom Left - 3
-0.5, 0.5,-0.5, // Back Top Left - 4
0.5, 0.5,-0.5, // Back Top Right - 5
0.5, -0.5,-0.5, // Back Bottom Right - 6
-0.5,-0.5,-0.5, // Back Bottom Left - 7
};

GLuint elements[]{
0,1,2,
2,3,0
};

int main()
{
CheckForGLErrors(__func__, __LINE__);

/*Initialization*/
GLFWwindow* window = InitializeContext();
CheckForGLErrors(__func__, __LINE__);

//Create our element buffer object using the elements array
ElementBuffer = InitializeElementBuffer(elements, sizeof(elements)/sizeof(GLuint));
CheckForGLErrors(__func__, __LINE__);

//Load and compile the shaders
ShaderProgram = LoadShaders("vertexshader.cpp", "fragmentshader.cpp");
CheckForGLErrors(__func__, __LINE__);

//Create our vertex attribute array
VertexArray = CreateVertexArray();
CheckForGLErrors(__func__, __LINE__);

//Create our vertex buffer object using the vertices array
VertexBuffer = InitializeVertexBuffer(vertices, sizeof(vertices)/sizeof(GLfloat));
CheckForGLErrors(__func__, __LINE__);

//Assign our array the appropriate structure
InitializeVertexArray(ShaderProgram);
CheckForGLErrors(__func__, __LINE__);




while(!glfwWindowShouldClose(window))
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS){
glfwSetWindowShouldClose(window, GL_TRUE);
}

glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

CheckForGLErrors(__func__, __LINE__);
glfwSwapBuffers(window);
glfwPollEvents();
}

CheckForGLErrors(__func__, __LINE__);

glfwTerminate();
}
  • engine (pastebin 链接因为 SO 似乎不希望我在我的帖子中有那么多文字)已更新以修复 user3256930 指出的缺陷
  • engine_shaders.hpp (出于同样的原因再次粘贴)

我很乐意根据要求提供更多信息。

注意:我之前已经能够绘制三角形 n 东西,但我的旧代码无法让我了解为什么会失败。

最佳答案

当您将数组作为函数参数传递时,它会将其视为指针,您不能在函数内使用 sizeof 来获取数组的完整大小。在这种情况下,您还需要将数组的大小作为函数参数传递。当您调用 glBufferData 时,size 参数期望数组的大小(以字节为单位)而不是数组中的元素数。

关于c++ - OpenGL 不渲染,可能是由于一些我找不到的简单错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22444687/

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