我正在尝试用Objective-C编写一个波阵面OBJ文件查看器,它能够从文件中加载网格/材质/着色器。我已经为着色器和着色器程序创建了类,我正在尝试创建一个OpenGL着色器程序对象,作为着色器程序类的init方法的一部分:
- (id)initWithVertexShader:(NSString *)vshader FragmentShader:(NSString *)fshader {
self = [super init];
if (self) {
SRShader* shaders[2] = {
[[SRShader alloc] initWithFilename:vshader Type:GL_VERTEX_SHADER Source:nil],
[[SRShader alloc] initWithFilename:fshader Type:GL_FRAGMENT_SHADER Source:nil]
};
program = glCreateProgram();
for (int i = 0; i < 2; i++) {
SRShader* s = shaders[i];
NSError* e = nil;
s.source = [NSString stringWithContentsOfFile:s.filename encoding:NSUTF8StringEncoding error:&e];
if (!e) {
NSLog(@"Failed to read shader file: %@\n", s.filename);
exit(-1);
}
GLuint shader = [s compile];
... and so on.
但是,调用glCreateProgram会导致EXC_BAD_访问,调用[SRShader compile]也会导致EXC_BAD_访问,而[SRShader compile]又会调用glCreateShader。有人知道Objective-C中的这些函数调用有什么问题吗?可能与ARC有关,或者在初始化函数中调用它们?
正如特雷弗在另一篇帖子中回答的那样,你应该初始化glew。
glewInit();
答案来源:https://gamedev.stackexchange.com/a/22788
如果您使用的是NSOpenGLView,则需要在调用glCreateProgram()
之前添加以下代码行,因此如果您从Interface Builder加载视图,可能会在-(id)initSusCoder
中:
NSOpenGLContext* context = [self openGLContext];
[context makeCurrentContext];
非常基本,我知道这条线已经过时了,但如果有人在谷歌上搜索并找到这条线(就像我刚才做的那样),也许可以节省一两分钟的时间。
我的计算机使用Intel显卡运行Ubuntu 16.04。我的OpenGL配置文件使用Mesa 11.2。 我简陋的OpenGL程序在窗口中显示一个简单的正方形。如果我按某个键,我想让程序切换到线框图模式,所以我定义了以下回调函数: 不幸的是,在我的程序运行时按m会导致段错误。不过,奇怪的是,在我的另一台计算机(运行Ubuntu 16.04但使用Nvidia GPU)上,我没有这样的问题,并且程序
问题内容: 我有一个用于捕获任何分段错误或ctrl- c的应用程序。使用下面的代码,我能够捕获分段错误,但是该处理程序一次又一次地被调用。我该如何阻止他们。供您参考,我不想退出我的申请。我只是可以小心释放所有损坏的缓冲区。 可能吗? 处理程序就是这样。 在这里,对于Segmentation故障信号,处理程序被多次调用,并且很明显MyfreeBuffers()给我释放已释放的内存的错误。我只想释放一
我有一个便宜的5美元/月的服务器,1G内存为我的网站处理一些图像。在将GIF图像写入磁盘时,我很少会遇到PHP Imagick的分割错误。 我在console命令上设置了一个内存限制,希望PHP能够首先捕获这个问题,并抛出一个我可以正确处理的异常,但这不起作用。 特别的问题是某些GIF图像会导致它在这行代码中崩溃: 特定的GIF是与成人相关的GIF,因此我不确定是否可以共享它。 以下是我的服务器日
我有一个应用程序,我用它来捕捉任何分割错误或ctrl-c。使用下面的代码,我能够捕获分段错误,但是处理程序被一次又一次地调用。我怎样才能阻止他们。告诉你,我不想退出我的申请。我只是可以小心释放所有损坏的缓冲区。 可能吗? handler是这样的。 这里的分段故障信号,处理程序被多次调用,因为明显的MyFreeBuffers()给我释放已经释放的内存的错误。我只想免费一次,但仍然不想退出应用程序。
分段错误发生在 运行Glewinfo 运行VisualInfo 测试程序(详细信息如下) 调用glGetProgramInterfaceiv(详细信息如下) 使用gdb实现glewinfo的堆栈跟踪 使用gdb实现visualinfo的堆栈跟踪 下面是使用已安装的GLEW库和glfw3(3.0.3)的测试程序 编译: 运行前。/basic I设置 (否则我会得到分段错误,因为它试图使用安装的GLE
我正在用Python实现Kosaraju的强连接组件(SCC)图搜索算法。 这个程序在小数据集上运行得很好,但当我在一个超大图形(超过800000个节点)上运行它时,它会显示“分段错误”。 原因可能是什么?非常感谢。 附加信息:首先,我在超大数据集中运行时出现了这个错误: 然后我重置递归限制使用 但是有一个“分割错误” 相信我,这不是一个无限循环,它在相对较小的数据上正确运行。有可能是程序耗尽了资