Mercurial > touhou
comparison pytouhou/ui/window.pyx @ 503:c622eaf64428
Optimize GameRunner some more, fix replay, and remove Window dependency in Renderer.
| author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
|---|---|
| date | Fri, 04 Oct 2013 14:27:11 +0200 |
| parents | 104c737ce8b3 |
| children | 64a72df88de5 |
comparison
equal
deleted
inserted
replaced
| 502:3d3285918ba1 | 503:c622eaf64428 |
|---|---|
| 9 ## This program is distributed in the hope that it will be useful, | 9 ## This program is distributed in the hope that it will be useful, |
| 10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 12 ## GNU General Public License for more details. | 12 ## GNU General Public License for more details. |
| 13 ## | 13 ## |
| 14 | |
| 15 cimport cython | |
| 16 | 14 |
| 17 from pytouhou.lib.opengl cimport \ | 15 from pytouhou.lib.opengl cimport \ |
| 18 (glEnable, glHint, glEnableClientState, GL_TEXTURE_2D, GL_BLEND, | 16 (glEnable, glHint, glEnableClientState, GL_TEXTURE_2D, GL_BLEND, |
| 19 GL_PERSPECTIVE_CORRECTION_HINT, GL_FOG_HINT, GL_NICEST, | 17 GL_PERSPECTIVE_CORRECTION_HINT, GL_FOG_HINT, GL_NICEST, |
| 20 GL_COLOR_ARRAY, GL_VERTEX_ARRAY, GL_TEXTURE_COORD_ARRAY) | 18 GL_COLOR_ARRAY, GL_VERTEX_ARRAY, GL_TEXTURE_COORD_ARRAY) |
| 86 return False | 84 return False |
| 87 | 85 |
| 88 | 86 |
| 89 | 87 |
| 90 cdef class Window: | 88 cdef class Window: |
| 91 def __init__(self, tuple size=None, bint double_buffer=True, long fps_limit=-1, | 89 def __init__(self, bint double_buffer=True, long fps_limit=-1, |
| 92 bint fixed_pipeline=False, bint sound=True): | 90 bint fixed_pipeline=False, bint sound=True): |
| 93 self.fps_limit = fps_limit | 91 self.fps_limit = fps_limit |
| 94 self.use_fixed_pipeline = fixed_pipeline | 92 self.use_fixed_pipeline = fixed_pipeline |
| 95 self.runner = None | 93 self.runner = None |
| 96 | 94 |
| 97 sdl.gl_set_attribute(sdl.GL_CONTEXT_MAJOR_VERSION, 2) | 95 sdl.gl_set_attribute(sdl.GL_CONTEXT_MAJOR_VERSION, 2) |
| 98 sdl.gl_set_attribute(sdl.GL_CONTEXT_MINOR_VERSION, 1) | 96 sdl.gl_set_attribute(sdl.GL_CONTEXT_MINOR_VERSION, 1) |
| 99 sdl.gl_set_attribute(sdl.GL_DOUBLEBUFFER, int(double_buffer)) | 97 sdl.gl_set_attribute(sdl.GL_DOUBLEBUFFER, int(double_buffer)) |
| 100 sdl.gl_set_attribute(sdl.GL_DEPTH_SIZE, 24) | 98 sdl.gl_set_attribute(sdl.GL_DEPTH_SIZE, 24) |
| 101 | 99 |
| 102 self.width, self.height = size if size is not None else (640, 480) | |
| 103 | |
| 104 flags = sdl.WINDOW_OPENGL | sdl.WINDOW_SHOWN | 100 flags = sdl.WINDOW_OPENGL | sdl.WINDOW_SHOWN |
| 105 if not self.use_fixed_pipeline: | 101 if not self.use_fixed_pipeline: |
| 106 flags |= sdl.WINDOW_RESIZABLE | 102 flags |= sdl.WINDOW_RESIZABLE |
| 107 | 103 |
| 108 self.win = sdl.Window('PyTouhou', | 104 self.win = sdl.Window('PyTouhou', |
| 109 sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, | 105 sdl.WINDOWPOS_CENTERED, sdl.WINDOWPOS_CENTERED, |
| 110 self.width, self.height, | 106 640, 480, #XXX |
| 111 flags) | 107 flags) |
| 112 self.win.gl_create_context() | 108 self.win.gl_create_context() |
| 113 | 109 |
| 114 IF USE_GLEW: | 110 IF USE_GLEW: |
| 115 if glewInit() != 0: | 111 if glewInit() != 0: |
| 126 glEnableClientState(GL_TEXTURE_COORD_ARRAY) | 122 glEnableClientState(GL_TEXTURE_COORD_ARRAY) |
| 127 | 123 |
| 128 self.clock = Clock(self.fps_limit) | 124 self.clock = Clock(self.fps_limit) |
| 129 | 125 |
| 130 | 126 |
| 131 @cython.cdivision(True) | |
| 132 cdef void set_size(self, int width, int height) nogil: | 127 cdef void set_size(self, int width, int height) nogil: |
| 133 self.win.set_window_size(width, height) | 128 self.win.set_window_size(width, height) |
| 134 | |
| 135 runner_width = float(self.runner.width) | |
| 136 runner_height = float(self.runner.height) | |
| 137 | |
| 138 scale = min(width / runner_width, | |
| 139 height / runner_height) | |
| 140 | |
| 141 self.width = int(runner_width * scale) | |
| 142 self.height = int(runner_height * scale) | |
| 143 | |
| 144 self.x = (width - self.width) // 2 | |
| 145 self.y = (height - self.height) // 2 | |
| 146 | 129 |
| 147 | 130 |
| 148 cpdef set_runner(self, Runner runner=None): | 131 cpdef set_runner(self, Runner runner=None): |
| 149 self.runner = runner | 132 self.runner = runner |
| 150 if runner is not None: | 133 if runner is not None: |
