Mercurial > touhou
changeset 223:98c64ffcbdff
Make pytouhou.ui.{background,texture} Cython modules as they are only used by Cython modules.
author | Thibaut Girka <thib@sitedethib.com> |
---|---|
date | Sun, 18 Dec 2011 21:23:51 +0100 |
parents | 5cac48b328ad |
children | 9bb26dbb8438 |
files | pytouhou/ui/background.pxd pytouhou/ui/background.py pytouhou/ui/background.pyx pytouhou/ui/gamerenderer.pyx pytouhou/ui/renderer.pyx pytouhou/ui/texture.pxd pytouhou/ui/texture.py pytouhou/ui/texture.pyx pytouhou/utils/matrix.pxd |
diffstat | 7 files changed, 24 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/pytouhou/ui/background.pxd @@ -0,0 +1,1 @@ +cpdef object get_background_rendering_data(object background)
rename from pytouhou/ui/background.py rename to pytouhou/ui/background.pyx --- a/pytouhou/ui/background.py +++ b/pytouhou/ui/background.pyx @@ -17,10 +17,13 @@ from struct import pack from itertools import chain -from .sprite import get_sprite_rendering_data +from .sprite cimport get_sprite_rendering_data -def get_background_rendering_data(background): - #TODO +cpdef object get_background_rendering_data(object background): + cdef float x, y, z, ox, oy, oz, ox2, oy2, oz2 + cdef list vertices, uvs, colors + + #TODO: do not cache the results, and use view frustum culling try: return background._rendering_data except AttributeError: @@ -29,18 +32,22 @@ def get_background_rendering_data(backgr vertices = [] uvs = [] colors = [] + for ox, oy, oz, model_id, model in background.object_instances: for ox2, oy2, oz2, width_override, height_override, sprite in model: + #TODO: view frustum culling key, (vertices2, uvs2, colors2) = get_sprite_rendering_data(sprite) - vertices.extend((x + ox + ox2, y + oy + oy2, z + oz + oz2) for x, y, z in vertices2) + vertices.extend([(x + ox + ox2, y + oy + oy2, z + oz + oz2) + for x, y, z in vertices2]) uvs.extend(uvs2) colors.extend(colors2) nb_vertices = len(vertices) - vertices = pack(str(3 * nb_vertices) + 'f', *chain(*vertices)) - uvs = pack(str(2 * nb_vertices) + 'f', *uvs) - colors = pack(str(4 * nb_vertices) + 'B', *colors) + vertices_s = pack(str(3 * nb_vertices) + 'f', *chain(*vertices)) + uvs_s = pack(str(2 * nb_vertices) + 'f', *uvs) + colors_s = pack(str(4 * nb_vertices) + 'B', *colors) - background._rendering_data = [(key, (nb_vertices, vertices, uvs, colors))] + background._rendering_data = [(key, (nb_vertices, vertices_s, uvs_s, colors_s))] return background._rendering_data +
--- a/pytouhou/ui/gamerenderer.pyx +++ b/pytouhou/ui/gamerenderer.pyx @@ -18,7 +18,7 @@ from itertools import chain from pyglet.gl import * from .renderer cimport Renderer -from .background import get_background_rendering_data +from .background cimport get_background_rendering_data
--- a/pytouhou/ui/renderer.pyx +++ b/pytouhou/ui/renderer.pyx @@ -21,7 +21,7 @@ from struct import pack from pyglet.gl import * from .sprite cimport get_sprite_rendering_data -from .texture import TextureManager +from .texture cimport TextureManager MAX_ELEMENTS = 10000
new file mode 100644 --- /dev/null +++ b/pytouhou/ui/texture.pxd @@ -0,0 +1,3 @@ +cdef class TextureManager: + cdef public object loader + cdef public dict textures
rename from pytouhou/ui/texture.py rename to pytouhou/ui/texture.pyx --- a/pytouhou/ui/texture.py +++ b/pytouhou/ui/texture.pyx @@ -18,7 +18,7 @@ from pyglet.gl import (glTexParameteri, import os -class TextureManager(object): +cdef class TextureManager: def __init__(self, loader=None): self.loader = loader self.textures = {} @@ -54,7 +54,7 @@ class TextureManager(object): alpha_data = alpha_file.get_data('RGB', image_file.width * 3) image_file = pyglet.image.ImageData(image_file.width, image_file.height, 'RGBA', b''.join(data[i*3:i*3+3] + alpha_data[i*3] for i in range(image_file.width * image_file.height))) - #TODO + #TODO: improve perfs somehow texture = image_file.get_texture()