OpenGL python glTextImage2D因总线错误而崩溃
在我当前基于python的OpenGL项目中,我需要使用创建2d纹理。如果纹理宽度/高度大于888x888,则执行此操作时会遇到问题OpenGL python glTextImage2D因总线错误而崩溃,python,macos,opengl,glfw,glteximage2d,Python,Macos,Opengl,Glfw,Glteximage2d,在我当前基于python的OpenGL项目中,我需要使用创建2d纹理。如果纹理宽度/高度大于888x888,则执行此操作时会遇到问题 #有时当self.w*self.h>888*888时崩溃 glBindTexture(GL_TEXTURE_2D,self._id); glTexImage2D( GL_纹理_2D, 0,GL_RGB, 赛尔夫, 赛尔夫, 0, 德国劳埃德大学, GL_无符号字节, ''); # 初始化一个空纹理 有时它工作,有时它不工作,导致“总线错误:10”。以下是调试中
#有时当self.w*self.h>888*888时崩溃
glBindTexture(GL_TEXTURE_2D,self._id);
glTexImage2D(
GL_纹理_2D,
0,GL_RGB,
赛尔夫,
赛尔夫,
0,
德国劳埃德大学,
GL_无符号字节,
''); # 初始化一个空纹理
有时它工作,有时它不工作,导致“总线错误:10”。以下是调试中的一些详细信息:
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000103694000
硬件:mac book pro retina(2013年):
运行OpenGL core profile 4.1:
localhost:py keksnicoh$ python -m demos.plotter
[...] init GLFW
[...] load OPENGL_CORE_PROFILE 4.10
+ Vendor Intel Inc.
+ Opengl version 4.1 INTEL-10.2.46
+ GLSL Version 4.10
+ Renderer Intel Iris OpenGL Engine
+ GLFW3 3.0.4 Cocoa NSGL chdir menubar dynamic
GL_MAX_TEXTURE_SIZE 16384
在我研究这个问题的过程中,我在堆栈溢出上发现了一个非常类似的问题
. 解决方案是在调用glTexImage2d期间设置一个“锁”。这个问题似乎适合我的问题的原因是调用似乎在大约50%的时间内随机崩溃,这可能表明存在某种种族条件问题
有没有一种方法可以在python脚本中实现类似的锁定,或者应该用另一种方法初始化纹理?请注意,初始化时纹理为空,因为纹理将由帧缓冲区写入
已解决更新问题
因为我认为我尝试使用None而不是空字符串作为glTexImage2d中的init值,所以我传递了这个空字符串。此代码解决了此问题
#有时当self.w*self.h>888*888时崩溃
glBindTexture(GL_TEXTURE_2D,self._id);
glTexImage2D(
GL_纹理_2D,
0,GL_RGB,
赛尔夫,
赛尔夫,
0,
德国劳埃德大学,
GL_无符号字节,
无);#我不知道python的具体细节,但将'
指定为等同于空指针的东西对我来说似乎很奇怪。我必须同意Derhas的观点,这一点我也很奇怪。我本以为那里会有一个None
。我已经用“None”试过了。这是不允许的。我还试图上传一个大小正确的\x00全文。如果widt/height小于888,它就工作得很好。我搞砸了,它一点也不工作。更新了这篇文章。我不知道那些python的细节,但是指定'
作为等同于空指针的东西对我来说似乎很奇怪。我同意Derhas的观点,这一点也让我感到奇怪。我本以为那里会有一个None
。我已经用“None”试过了。这是不允许的。我还试图上传一个大小正确的\x00全文。如果widt/height小于888,它就工作得很好。我搞砸了,它一点也不工作。更新了文章。
localhost:py keksnicoh$ python -m demos.plotter
[...] init GLFW
[...] load OPENGL_CORE_PROFILE 4.10
+ Vendor Intel Inc.
+ Opengl version 4.1 INTEL-10.2.46
+ GLSL Version 4.10
+ Renderer Intel Iris OpenGL Engine
+ GLFW3 3.0.4 Cocoa NSGL chdir menubar dynamic
GL_MAX_TEXTURE_SIZE 16384