1
정수 내부 형식으로 텍스처를 만들고 조작하고 싶습니다 (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()
opencl 커널을 사용하여 텍스처를 생성 할 계획입니다. 그러나 조금 전에 테스트를하고있었습니다. 호스트 메모리에서 텍스처 데이터를 업로드 할 수 있습니까? 또는 셰이더를 사용해서 만 생성 할 수 있습니까? – reddot
@ reddot : 셰이더없이 완전한 텍스처를 생성 할 수 있습니다. 그러나 셰이더 없이는 (그림자로 렌더링) 접근 할 수 없습니다. 고정 기능 파이프 라인에는 통합 텍스처에 대한 작업을 수행 할 수있는 기능이 없습니다. 어떻게 만드는지는 중요하지 않습니다. 하지만 실제로 그걸로 무언가를하고 싶다면 셰이더가 필요합니다. –