Python中OpenCL的OpenGL纹理

2024-10-03 02:42:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Python中将OpenGL纹理传递给OpenCL 因此,我在OpenGL中使用frambuffer创建纹理:

        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,如下所示

^{pr2}$

如果我在OpenGL中使用纹理,它的效果很好,但是当我试图在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

Tags: homeextjulfileopenglopencl纹理gl
1条回答
网友
1楼 · 发布于 2024-10-03 02:42:26

我不确定你能创造出“某种语境”。您需要使用OpenGL上下文的知识来创建OpenCL上下文。有关CL-GL互操作的更多信息,请查看here。在

相关问题 更多 >