def load_image(file, path): print "Loading image %s..." % file, try: file = open(path, 'rb') except IOError: print 'exists not' raise ValueError('Texture exists not') type, width, height = image_info(file.read(65536)) file.seek(0, 0) if type: check_size(width, height) if magick: file.close() file = Image(path.encode('mbcs' if os.name == 'nt' else 'utf8')) geo = file.size() check_size(geo.width(), geo.height()) print blob = Blob() file.flip() file.write(blob, 'RGBA') texture = blob.data mode = GL_RGBA else: try: raw = image.load(path, file=file) except IOError: print 'exists not' raise ValueError('Texture exists not') width, height = raw.width, raw.height check_size(width, height) print mode = GL_RGBA if 'A' in raw.format else GL_RGB # Flip from BGR to RGB if raw.format in ('BGR', 'BGRA'): if bgra: mode = {GL_RGBA: GL_BGRA, GL_RGB: GL_BGR}[mode] texture = raw.data else: texture = bgr_to_rgb(raw.data, width, height, 'A' in raw.format) elif raw.format in ('RGB', 'RGBA'): texture = raw.data else: texture = raw.get_data('RGBA', width * 4) return path, width, height, len(raw.format), mode, texture
def load_texture(file): if file in cache: return cache[file] print "Loading image %s..." % file, path = os.path.join(os.path.dirname(__file__), "assets", "textures", file) try: file = open(path, 'rb') except IOError: print 'exists not' raise ValueError('Texture exists not') type, width, height = image_info(file.read(8192)) file.seek(0, 0) if type: check_size(width, height) if magick: file.close() file = Image(path.encode('mbcs' if os.name == 'nt' else 'utf8')) geo = file.size() check_size(geo.width(), geo.height()) print blob = Blob() file.flip() file.write(blob, 'RGBA') texture = blob.data mode = GL_RGBA else: try: raw = image.load(path, file=file) except IOError: print 'exists not' raise ValueError('Texture exists not') width, height = raw.width, raw.height check_size(width, height) print mode = GL_RGBA if 'A' in raw.format else GL_RGB # Flip from BGR to RGB # I hate you too, Pyglet... # REGULAR EXPRESSIONS ARE NOT MEANT TO PARSE BINARY DATA!!! #texture = raw.get_data('RGBA', width * 4) if safe else raw.data[::-1] if 'BGR' in raw.format else raw.data if raw.format in ('BGR', 'BGRA'): texture = bgr_to_rgb(raw.data, width, height, 'A' in raw.format) elif raw.format in ('RGB', 'RGBA'): texture = raw.data else: texture = raw.get_data('RGBA', width * 4) buffer = c_ulong() glGenTextures(1, byref(buffer)) id = buffer.value glBindTexture(GL_TEXTURE_2D, id) filter = GL_NEAREST if badcard else GL_LINEAR glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter) glTexImage2D(GL_TEXTURE_2D, 0, mode, width, height, 0, mode, GL_UNSIGNED_BYTE, texture) cache[file] = id return id