Я начал немного заниматься 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 работает нормально (логически ничего не рисуя).
Любая помощь?