尝试在方法中包装glGenVertexArrays调用时出现分段错误
Segmentation fault when trying to wrap glGenVertexArrays call in a method
我试图在Mac OS上使用SDL 2.0.3和c++的"现代"OpenGL(3+),如果我直接调用OpenGL函数,它就会起作用,但是一旦我试图将它包装在一个类中,它就不起作用了。更具体地说,我想存储一个顶点数组对象作为类成员,并在它的类方法中调用glGenVertexArrays
,但这会导致段错误。
直接调用的最小工作示例(没有什么有用的,但不会崩溃):
#include <cstdlib>
#include <SDL.h>
#include <OpenGL/gl3.h>
int main()
{
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *sdlWindow = SDL_CreateWindow(
"OpenGL Works",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640,
480,
SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI
);
SDL_GLContext sdlGLContext = SDL_GL_CreateContext(sdlWindow);
unsigned int vertexArrayObject;
// This works
glGenVertexArrays(1, &vertexArrayObject);
// Wait some seconds before closing the window
SDL_Delay(3000);
SDL_GL_DeleteContext(sdlGLContext);
SDL_DestroyWindow(sdlWindow);
return EXIT_SUCCESS;
}
使用简单类不工作(分段错误):
#include <cstdlib>
#include <memory>
#include <SDL.h>
#include <OpenGL/gl3.h>
class Graphics
{
public:
void createVAO();
private:
unsigned int vertexArrayObject;
};
void Graphics::createVAO()
{
glGenVertexArrays(1, &this->vertexArrayObject);
}
int main()
{
SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_Window *sdlWindow = SDL_CreateWindow(
"OpenGL Shit",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
640,
480,
SDL_WINDOW_OPENGL | SDL_WINDOW_ALLOW_HIGHDPI
);
SDL_GLContext sdlGLContext = SDL_GL_CreateContext(sdlWindow);
std::unique_ptr<Graphics> g;
g->createVAO();
// Wait some seconds before closing the window
SDL_Delay(3000);
SDL_GL_DeleteContext(sdlGLContext);
SDL_DestroyWindow(sdlWindow);
return EXIT_SUCCESS;
}
同样发生在glGenBuffers
。我想知道这是否只是由于我缺乏c++技能而导致的一个"简单"的c++问题,或者它是否与OpenGL和/或SDL相关的更严重的问题。我发现了很多关于堆栈溢出的问题,有类似的症状,但其中大多数是由我根本不使用的GLUT或GLEW的缺失选项glewExperimental = GL_TRUE;
或我拥有的缺失OpenGL上下文引起的,因为我能够在屏幕上画画:
- glGenVertexArrays(1, &vao);分割错误 调用glGenVertexArrays导致程序崩溃
- 在OpenGL中实现VBO,窗口保持黑色
- OpenGL segfault on glGenVertexArrays
我希望有人能解释为什么这是崩溃,因为我不能:(
我使用的是Mac OS 10.9.3,编译器是Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
,这是编译器调用:c++ -o OpenGLTest main.cpp -I /usr/local/include/SDL2 -lSDL2 -framework OpenGL
std::unique_ptr<Graphics> g;
g->createVAO();
你在哪里用东西填充g
?
现在看起来你正在解引用一个NULL指针。
试试这个:
std::unique_ptr<Graphics> g( new Graphics );
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?