【发布时间】:2012-11-15 22:12:18
【问题描述】:
我正在学习 OpenGL,但由于某种原因,我绘制三角形的程序无法正常工作。代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glfw.h>
#include <glm/glm.hpp>
using namespace glm;
int main()
{
if(!glfwInit())
{
fprintf(stderr, "Failed to initialize GLFW\n");
return -1;
}
glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
if(!glfwOpenWindow(1080, 720, 0, 0, 0, 0, 32, 0, GLFW_WINDOW))
{
fprintf(stderr, "Failed to open GLFW window\n");
glfwTerminate();
return -1;
}
if(glewInit() != GLEW_OK)
{
fprintf(stderr, "Failed to initialize GLEW\n");
return -1;
}
GLuint VertexArrayID;
glGenVertexArrays(1, &VertexArrayID);
glBindVertexArray(VertexArrayID);
static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};
GLuint vertexBuffer;
glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
glfwSetWindowTitle("Tutorial 01");
glfwEnable(GLFW_STICKY_KEYS);
do
{
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(
0,
3,
GL_FLOAT,
GL_FALSE,
0,
(void*)0
);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(0);
glfwSwapBuffers();
}
while(glfwGetKey(GLFW_KEY_ESC) != GLFW_PRESS &&
glfwGetWindowParam(GLFW_OPENED));
}
调试日志:
Debugger name and version: GNU gdb (GDB) 7.5
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:11
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:17
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:18
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:19
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:20
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:22
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:29
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:36
Program received signal SIGSEGV, Segmentation fault.
In ?? () ()
At /home/mike/Programming/OpenGL Tutorials/Opening a window/main.cpp:36
Debugger finished with status 0
【问题讨论】:
-
你试过断点看看它崩溃的地方吗?
-
您是否尝试在程序开始时将某些内容打印到
stderr,以查看您是否可以读取发送到stderr的内容? -
我做了你所说的 DJ,这是第 36 行的段错误:glGenVertexArrays(1, &VertexArrayID);现在的问题是为什么会发生这种情况,我该如何解决。
-
为了记录@Nicol,我可以毫无问题地写信给stderr。
-
你正在创建一个核心上下文,你的着色器在哪里?