Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL python glTextImage2D因总线错误而崩溃_Python_Macos_Opengl_Glfw_Glteximage2d - Fatal编程技术网

OpenGL python glTextImage2D因总线错误而崩溃

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”。以下是调试中

在我当前基于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”。以下是调试中的一些详细信息:

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