我遵循OpenGL编程指南:第8版,我有点陷入第1章(triangles.cpp)。
我正在运行Ubuntu 14.04.2,这是使用的代码:
// Draws 2 triangles on the screen
#include <iostream>
using namespace std;
#include "vgl.h"
#include "LoadShaders.h"
enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };
GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];
const GLuint NumVertices = 6;
// init
void init(void)
{
glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);
GLfloat vertices[NumVertices][2] = {
{ -0.90, -0.90 }, //Triangle 1
{ 0.85, -0.90 },
{ -0.90, 0.85 },
{ 0.90, -0.85 }, //Triangle 2
{ 0.90, 0.90 },
{ -0.85, 0.90 }
};
glGenBuffers(NumBuffers, Buffers);
glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
vertices, GL_STATIC_DRAW);
ShaderInfo shaders[] = {
{ GL_VERTEX_SHADER, "trianges.vert" },
{ GL_FRAGMENT_SHADER, "triangles.frag" },
{ GL_NONE, NULL }
};
GLuint program = LoadShaders(shaders);
glUseProgram(program);
glVertexAttribPointer(vPosition, 2, GL_FLOAT,
GL_FALSE, 0, BUFFER_OFFSET(0));
glEnableVertexAttribArray(vPosition);
}
// display
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAOs[Triangles]);
glDrawArrays(GL_TRIANGLES, 0, NumVertices);
glFlush();
}
// main
int main (int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA);
glutInitWindowSize(512, 512);
glutInitContextVersion(4, 3);
glutInitContextProfile(GLUT_CORE_PROFILE);
glutCreateWindow(argv[0]);
if (glewInit()) {
cerr << "Unable to initialize GLEW ... exiting" << '\n';
exit(EXIT_FAILURE);
}
init();
glutDisplayFunc(display);
glutMainLoop();
}
此代码编译成功,但在执行时会产生分段错误。
我使用gdb来调试错误。弹出一个随机窗口(仅当我使用gdb时),但它只是显示窗口后面的内容(因此它崩溃了,不会显示两个三角形)。
这是gdb的输出:
Traceback (most recent call last):
File "/usr/share/gdb/auto-load/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19-gdb.py", line 63, in <module>
from libstdcxx.v6.printers import register_libstdcxx_printers
ImportError: No module named 'libstdcxx'
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
程序应该在窗口上显示2个三角形。
我对C ++比较陌生,而且我非常擅长将库和调试与gdb连接起来。我在Segmentation Fault上看过很多Q&amp; A.一个人确实遇到了和我一样的问题,但不幸的是,他删除了这个问题。
我并不觉得这是重复的,因为我并没有真正理解我在同一主题上阅读的大部分答案。请尽量简单地回答。
我正在使用freeglut3-dev库,而且我使用的是NVIDIA驱动程序版本346.59。
编辑: 确切的错误发生在
中的init()glGenVertexArrays(NumVAOs, VAOs);
glBindVertexArray(VAOs[Triangles]);
答案 0 :(得分:0)
分段错误发生在使用GL的第一个命令处。所以,我确保导入freeglut,其中包括opengl所有必需的库。
#include freeglut
我要感谢Mateusz Grzejek指出这一点。