所以这段代码应该呈现一个矩形(最终我希望它能渲染一个立方体,但尝试这样做是没有意义的,而不能先绘制一个矩形)。
我有代码检查GL错误,虽然有一个,但question的答案让我相信它不相关(它是GL_INVALID_ENUM
,之后被抛出immediatley 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();
}
我很乐意按要求提供更多信息。
注意:之前我已经能够绘制三角形的东西了,但是我的旧代码没有提供任何关于为什么失败的信息。
答案 0 :(得分:2)
当您将数组作为函数参数传递时,它会将其视为指针,并且您无法在函数中使用sizeof来获取数组的完整大小。在这种情况下,您还需要将数组的大小作为函数参数传递。当你调用glBufferData时,size参数需要数组的字节大小而不是数组中的元素数。