【问题标题】:rendering textures with integer internal format以整数内部格式渲染纹理
【发布时间】:2011-11-11 02:13:49
【问题描述】:

我希望创建和操作具有整数内部格式的纹理(用于与 opencl 的进一步互操作)。但是,在映射此纹理的问题上,我似乎错过了一些重要的事情。这是一个代码示例,它会说更多。可以通过定义 INTERNAL 和 DATACOPY 变量来切换内部格式。

如果我对纹理使用浮点标准化内部格式(GL_RGBA、GL_RGBA),效果会很好。示例代码将绘制嘈杂的彩色图像。但是一旦我切换到 (GL_RGBA8UI, GL_RGBA_INTEGER) 窗口就会变黑。

问题可能只是我的配置(nvidia fermi-arch)。因此,对于指出我的问题根源的任何帮助表示赞赏。

    import pygame
    from OpenGL.GL import *
    import os

    XLEN, YLEN = 320, 200

    INTERNAL, DATACOPY = GL_RGBA, GL_RGBA
    #INTERNAL, DATACOPY = GL_RGBA8UI, GL_RGBA_INTEGER


    pygame.init()
    pygame.display.set_mode((XLEN, YLEN), pygame.DOUBLEBUF | pygame.OPENGL, 24)

    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glOrtho(0, XLEN, YLEN, 0, -1, 1)

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    glDisable(GL_DEPTH_TEST)

    tex = glGenTextures(1)
    glBindTexture(GL_TEXTURE_2D, tex)
    glTexImage2D(GL_TEXTURE_2D, 0, INTERNAL, 256, 256, 0, DATACOPY, GL_UNSIGNED_BYTE, os.urandom(4 * XLEN * YLEN))
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)

    running = True
    while running:
            for event in pygame.event.get():
                    if event.type == pygame.KEYUP and event.key == pygame.K_ESCAPE:
                            running = False

            glClearColor(0.0, 0.0, 0.0, 0.0)
            glClear(GL_COLOR_BUFFER_BIT)
            glEnable(GL_TEXTURE_2D)

            glBegin(GL_QUADS)

            glTexCoord2f(0.0, 0.0)
            glVertex2f(0.0, 0.0)

            glTexCoord2f(1.0, 0.0)
            glVertex2f(XLEN, 0.0)

            glTexCoord2f(1.0, 1.0)
            glVertex2f(XLEN, YLEN)

            glTexCoord2f(0.0, 1.0)
            glVertex2f(0.0, YLEN)

            glEnd()

            glDisable(GL_TEXTURE_2D)

            pygame.display.flip()

    glDeleteTextures(tex)

    pygame.quit()        

【问题讨论】:

    标签: opengl pygame textures pyopengl


    【解决方案1】:

    你的着色器在哪里?没有着色器就不能使用整体纹理。您可能在某处遇到了 OpenGL 错误。

    【讨论】:

    • 我打算使用opencl内核生成纹理。但是之前是测试了一下。是否可以从主机内存上传纹理数据?还是只能使用着色器生成?
    • @reddot:您可以在没有着色器的情况下创建完整的纹理。但是如果没有着色器,您就无法访问它(用它渲染)。固定功能管道没有对整体纹理执行操作的设施。你如何创建它并不重要。但如果你真的想用它做点什么,你需要着色器。
    猜你喜欢
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2012-11-08
    相关资源
    最近更新 更多