from OpenGL.GL import * import Image class Texture1D: def __init__(self, file, wrap=GL_REPEAT, minFilter=GL_LINEAR, magFilter=GL_LINEAR): self.file = file self.wrapS = wrap self.minFilter = minFilter self.magFilter = magFilter self.defined = False self.id = 0 def define(self): img = Image.open(self.file).transpose(Image.FLIP_TOP_BOTTOM).convert('RGBA') width = 2 while width < img.size[0]: width *= 2 width /= 2 if (width != img.size[0]): img = img.resize((width,img.size[1])) self.id = glGenTextures(1) glBindTexture(GL_TEXTURE_1D, self.id) glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, self.wrapS) glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, self.minFilter) glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, self.magFilter) if (self.minFilter == GL_NEAREST_MIPMAP_NEAREST) or \ (self.minFilter == GL_NEAREST_MIPMAP_LINEAR) or \ (self.minFilter == GL_LINEAR_MIPMAP_NEAREST) or \ (self.minFilter == GL_LINEAR_MIPMAP_LINEAR): gluBuild1DMipmaps(GL_TEXTURE_1D, GL_RGBA, img.size[0], GL_RGBA, GL_UNSIGNED_BYTE, img.tostring()) else: glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, img.size[0], 0, GL_RGBA, GL_UNSIGNED_BYTE, img.tostring()) glBindTexture(GL_TEXTURE_1D, 0) self.defined = True def apply(self): if not self.defined: self.define() glBindTexture(GL_TEXTURE_1D, self.id) if self.id != 0: glEnable(GL_TEXTURE_1D) else: glDisable(GL_TEXTURE_1D) def disable(self): glBindTexture(GL_TEXTURE_1D, 0) glDisable(GL_TEXTURE_1D)