1

整数の内部形式でテクスチャを作成して操作したいと思います(openclとのさらなる相互運用のため)。ただし、このテクスチャのマッピングに関して重要なことを見逃しているようです。これはもっと多くのことを言うコードサンプルです。内部形式は、INTERNAL変数とDATACOPY変数を定義することで切り替えることができます。

テクスチャにfloat正規化内部フォーマット(GL_RGBA、GL_RGBA)を使用すると、かなりうまく機能します。サンプルコードは、ノイズの多い色の画像を描画します。しかし、(GL_RGBA8UI、GL_RGBA_INTEGER)に切り替えると、ウィンドウが黒くなります。

おそらく問題は私の構成(nvidiafermi-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()        
4

1 に答える 1

2

シェーダーはどこにありますか?シェーダーなしでインテグラルテクスチャを使用することはできません。おそらくどこかでOpenGLエラーが発生しました。

于 2011-11-10T18:13:27.020 に答える