OpenGL绘制缓冲区问题

时间:2012-03-16 13:36:43

标签: c arrays opengl buffer

我已经开始做一些OpenGL了,我刚刚发现了固定功能管道的替代品,所以我去搜索教程。可悲的是,大多数优秀的教程都使用C ++,如果可能的话我想坚持使用C语言。所以我无法复制粘贴东西并尝试它。

复制粘贴和合并代码虽然给出了错误,但我不确定如何处理它们。有问题的错误是“分段错误”,这里是代码:

#include <GL/glfw.h>
#include <GL/glu.h>
#include <stdlib.h>

#define SCREEN_WIDTH 1600
#define SCREEN_HEIGHT 1000

void main(int argc, char **argv)
{
    float mouse_x, mouse_y;

    GLuint positionBufferObject;
    const float vertexPositions[] = {
    0.75f, 0.75f, 0.0f, 1.0f,
    0.75f, -0.75f, 0.0f, 1.0f,
    -0.75f, -0.75f, 0.0f, 1.0f,
};
    glGenBuffers(1, &positionBufferObject);

    glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexPositions), vertexPositions, GL_STATIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, 0);

    int running = GL_TRUE;
    // Initialize GLFW
    if( !glfwInit() )
    {
        exit( EXIT_FAILURE );
    }

    // Open an OpenGL window
    if( !glfwOpenWindow(SCREEN_WIDTH,SCREEN_HEIGHT, 8,8,8,8,8,8, GLFW_WINDOW ) )
    {
        glfwTerminate();
        exit( EXIT_FAILURE );
    }

    while (running)
    {
        glBindBuffer(GL_ARRAY_BUFFER, positionBufferObject);
        glEnableVertexAttribArray(0);
        glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);

        glDrawArrays(GL_TRIANGLES, 0, 3);
    }
}

当然,这里缺少很多代码,因为它(显然)没有影响错误。 注释掉“glDrawArrays”修复了错误,OpenGL正常运行(逻辑上没有绘制任何内容)。

任何帮助?

1 个答案:

答案 0 :(得分:4)

您应该在开始绑定缓冲区之前初始化gl,依此类推。初始化过程获取并分配指向这些函数的指针。否则他们就是空的。