簡體   English   中英

用於OpenCL的OpenGL紋理在Python中

[英]OpenGL Texture for OpenCL in Python

我想在Python中將OpenGL紋理傳遞給OpenCL因此我使用frambuffer在OpenGL中創建一個紋理:

        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中使用它,但是當我試圖將它與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

我不確定你是否可以創造“某種背景”。 您需要在了解OpenGL上下文的情況下創建OpenCL上下文。 在這里查看有關CL-GL互操作的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM