Проблемы с буфером рисования OpenGL - PullRequest
0 голосов
/ 16 марта 2012

Я начал изучать 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 Ответ

4 голосов
/ 16 марта 2012

Вы должны инициализировать gl, прежде чем начинать связывать буферы и так далее.Процесс инициализации выбирает и назначает указатели на эти функции.В противном случае они нулевые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...