OpenGL无法渲染,可能是由于我无法找到的一些简单错误

时间:2014-03-16 23:44:45

标签: c++ opengl

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

我有代码检查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();
}
  • engine(pastebin链接,因为SO似乎不希望我在帖子中有那么多文字)更新以修复user3256930指出的漏洞
  • engine_shaders.hpp(出于同样的原因再次使用pastebin)

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

注意:之前我已经能够绘制三角形的东西了,但是我的旧代码没有提供任何关于为什么失败的信息。

1 个答案:

答案 0 :(得分:2)

当您将数组作为函数参数传递时,它会将其视为指针,并且您无法在函数中使用sizeof来获取数组的完整大小。在这种情况下,您还需要将数组的大小作为函数参数传递。当你调用glBufferData时,size参数需要数组的字节大小而不是数组中的元素数。