2012-07-30 64 views
1

我想一個OpenGL的紋理傳遞到OpenCL的在Python 所以我創建使用對應的FrameBuffer在OpenGL紋理:的OpenGL紋理針對OpenCL在Python

 fbo =glGenFramebuffersEXT(1)) 
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo) 
     depthbuffer = glGenRenderbuffersEXT(1) 
     glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer) 
     glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, width, height) 
     glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthbuffer)  

     texture = glGenTextures(1)) 
     glBindTexture(GL_TEXTURE_2D, texture) 
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_NEAREST) 
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST) 
     glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, None); 
     glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D,texture, 0); 
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); 
     RENDERSCENE() 
     glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 

之後,我創建OpenCL上下文,並試圖通過從OpenGL的到OpenCL的紋理像這樣

 self.context = pyopencl.create_some_context() 
     self.queue = pyopencl.CommandQueue(self.context) 
     if pyopencl.have_gl(): 
       self.image = pyopencl.GLTexture(self.context, pyopencl.mem_flags.READ_WRITE,GL_TEXTURE_2D, 0, texture, 2) 

質地正常工作,如果我用它在OpenGL,但whehn我試圖用它來與OpenCL的崩潰:

Traceback (most recent call last): 
    File "/home/jul*/*/*er/FBOtest2.py", line 250, in <module> 
    fbo.mainGameLoop() 
    File "/home/jul*/*/*er/FBOtest2.py", line 223, in mainGameLoop 
    self.transformTexturesForOpenCL() 
    File "/home/jul*/*/*er/FBOtest2.py", line 63, in transformTexturesForOpenCL 
    self.image = pyopencl.GLTexture(self.context, pyopencl.mem_flags.READ_WRITE,GL_TEXTURE_2D, 0, texture, 2) 
pyopencl.LogicError: clCreateFromGLTexture2D failed: invalid context 

回答

3

我不確定你可以創建「一些上下文」。您將需要在瞭解OpenGL上下文的情況下創建OpenCL上下文。查看here瞭解更多關於CL-GL互操作的信息。