1
整数型の内部形式でテクスチャを作成して操作したいと考えています(さらにopenclとの相互作用のために)。しかし、私はこのテクスチャをマッピングすることに関して何か重要なことを忘れてしまったようです。ここにはもっと多くのことを言うコードサンプルがあります。内部形式は、INTERNALとDATACOPY変数を定義することによって切り替えることができます。インテグラル内部形式のテクスチャをレンダリングする
テクスチャにfloat正規化内部形式(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:シェーダーなしのインテグラルテクスチャを作成できます。しかし、シェーダを使わずにそれにアクセスすることはできません。固定機能パイプラインには、統合テクスチャ上で操作を実行するための機能がありません。どのように作成するかは問題ではありません。実際に何かをしたいのであれば、シェーダが必要です。 –