рендеринг текстур с целочисленным внутренним форматом - PullRequest
1 голос
/ 10 ноября 2011

Я хочу создавать и управлять текстурами с целочисленным внутренним форматом (для дальнейшего взаимодействия с 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()        

1 Ответ

2 голосов
/ 10 ноября 2011

Где твой шейдер? Вы не можете использовать цельные текстуры без шейдера. Возможно, вы где-то получили ошибку OpenGL.

...