from OpenGL.GL import * import Image GL_REFLECTION_MAP_ARB= 0x8512 GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB= 0x8515 GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB= 0x8516 GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB= 0x8517 GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB= 0x8518 GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB= 0x8519 GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB= 0x851A GL_TEXTURE_CUBE_MAP_ARB = 0x8513 class TextureCube: def __init__(self, xres, yres, wrap=GL_CLAMP, minFilter=GL_LINEAR, magFilter=GL_LINEAR): self.xres = xres self.yres = yres self.wrapS = wrap self.wrapT = wrap self.minFilter = minFilter self.magFilter = magFilter self.defined = False self.id = 0 def define(self): self.id = glGenTextures(1) glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, self.id) glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, self.wrapS) glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, self.wrapT) glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, self.minFilter) glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, self.magFilter) data = '\00\00\00' * (self.xres * self.yres) glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB, 0, GL_RGB, self.xres, self.yres, 0, GL_RGB, GL_UNSIGNED_BYTE, data) glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB, 0, GL_RGB, self.xres, self.yres, 0, GL_RGB, GL_UNSIGNED_BYTE, data) glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB, 0, GL_RGB, self.xres, self.yres, 0, GL_RGB, GL_UNSIGNED_BYTE, data) glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB, 0, GL_RGB, self.xres, self.yres, 0, GL_RGB, GL_UNSIGNED_BYTE, data) glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB, 0, GL_RGB, self.xres, self.yres, 0, GL_RGB, GL_UNSIGNED_BYTE, data) glTexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB, 0, GL_RGB, self.xres, self.yres, 0, GL_RGB, GL_UNSIGNED_BYTE, data) glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0) self.defined = True def copyImage(self, tex): if not self.defined: self.define() glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, self.id) glCopyTexSubImage2D(tex, 0, 0, 0, 0, 0, self.xres, self.yres) glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0) def apply(self): if not self.defined: self.define() glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, self.id) glDisable(GL_TEXTURE_2D) if self.id != 0: glEnable(GL_TEXTURE_CUBE_MAP_ARB) else: glDisable(GL_TEXTURE_CUBE_MAP_ARB) def disable(self): glBindTexture(GL_TEXTURE_CUBE_MAP_ARB, 0) glDisable(GL_TEXTURE_CUBE_MAP_ARB)