annotate pytouhou/ui/opengl/backend.pyx @ 636:4fa0a8e7d941

Add a GLFW implementation of gui.Window.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sun, 14 May 2017 20:14:03 +0100
parents 80687f258001
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
635
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
1 cimport pytouhou.lib.gui as gui
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
2 from pytouhou.lib.gui import Error as GUIError
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
3 from .backend_sdl import create_sdl_window
636
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
4 from .backend_glfw import create_glfw_window
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
5
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
6 from pytouhou.lib.opengl cimport \
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
7 (glEnable, glHint, glEnableClientState, GL_TEXTURE_2D, GL_BLEND,
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
8 GL_PERSPECTIVE_CORRECTION_HINT, GL_FOG_HINT, GL_NICEST,
579
b8df946d394d Add grouping for OpenGL calls, making traces much more readable.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 559
diff changeset
9 GL_COLOR_ARRAY, GL_VERTEX_ARRAY, GL_TEXTURE_COORD_ARRAY,
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
10 glPushDebugGroup, GL_DEBUG_SOURCE_APPLICATION, glPopDebugGroup,
585
e0166cda75d5 Use primitive-restart to lower the size of our ibo, if supported.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 583
diff changeset
11 epoxy_gl_version, epoxy_is_desktop_gl, epoxy_has_gl_extension,
592
19d930f9e3f0 Add the screenshot feature, using P or Home like the original game.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 590
diff changeset
12 GL_PRIMITIVE_RESTART, glPrimitiveRestartIndex, glPixelStorei,
611
a6a191e371c7 Add back a GL_QUADS path for legacy applications.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 610
diff changeset
13 GL_PACK_INVERT_MESA, GL_QUADS, GL_TRIANGLE_STRIP, GL_TRIANGLES)
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
14
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
15
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
16 GameRenderer = None
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
17
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
18
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
19 def init(options):
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
20 '''
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
21 Initialize the OpenGL module, and raise if something bad prevents it from
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
22 working.
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
23 '''
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
24
595
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
25 cdef str flavor
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
26
636
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
27 global profile, major, minor, double_buffer, is_legacy, GameRenderer, use_glfw
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
28
636
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
29 use_glfw = options['frontend'] == 'glfw'
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
30 flavor = options['flavor']
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
31 assert flavor in ('core', 'es', 'compatibility', 'legacy')
635
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
32 profile = flavor
556
c34b23e29d16 Make the OpenGL flavor and version options work.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 555
diff changeset
33 version = str(options['version'])
c34b23e29d16 Make the OpenGL flavor and version options work.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 555
diff changeset
34 assert len(version) == 3 and version[1] == '.'
c34b23e29d16 Make the OpenGL flavor and version options work.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 555
diff changeset
35 major = int(version[0])
c34b23e29d16 Make the OpenGL flavor and version options work.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 555
diff changeset
36 minor = int(version[2])
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
37
554
653a9f087673 Make both double- and single-buffer available on the CLI, but default to SDL’s default.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 553
diff changeset
38 maybe_double_buffer = options['double-buffer']
653a9f087673 Make both double- and single-buffer available on the CLI, but default to SDL’s default.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 553
diff changeset
39 double_buffer = maybe_double_buffer if maybe_double_buffer is not None else -1
653a9f087673 Make both double- and single-buffer available on the CLI, but default to SDL’s default.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 553
diff changeset
40
595
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
41 is_legacy = flavor == 'legacy' or flavor == 'compatibility' and major < 2
557
0f2af7552462 Don’t hardcode GLSL version in our shaders, instead make them dependent on GL version.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 556
diff changeset
42
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
43 #TODO: check for framebuffer/renderbuffer support.
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
44
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
45 from pytouhou.ui.opengl.gamerenderer import GameRenderer
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
46
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
47
617
a6af3ff86612 Change all “void except *” function into “bint except True”, to prevent PyErr_Occurred() from being called at each call.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 612
diff changeset
48 cdef bint discover_features() except True:
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
49 '''Discover which features are supported by our context.'''
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
50
610
1b31169dc344 Move the passthrough shader to the Framebuffer class, since it isn’t used in the use_framebuffer_blit path.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 609
diff changeset
51 global use_debug_group, use_vao, use_primitive_restart, use_framebuffer_blit, use_pack_invert, use_scaled_rendering
593
974decb8df4f Only selects between GL_TRIANGLE_STRIP and GL_TRIANGLES once, in the backend.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 592
diff changeset
52 global primitive_mode
974decb8df4f Only selects between GL_TRIANGLE_STRIP and GL_TRIANGLES once, in the backend.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 592
diff changeset
53 global shader_header
595
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
54 global is_legacy
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
55
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
56 version = epoxy_gl_version()
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
57 is_desktop = epoxy_is_desktop_gl()
610
1b31169dc344 Move the passthrough shader to the Framebuffer class, since it isn’t used in the use_framebuffer_blit path.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 609
diff changeset
58 is_legacy = is_legacy or (is_desktop and version < 20)
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
59
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
60 use_debug_group = (is_desktop and version >= 43) or epoxy_has_gl_extension('GL_KHR_debug')
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
61 use_vao = (is_desktop and version >= 30) or epoxy_has_gl_extension('GL_ARB_vertex_array_object')
585
e0166cda75d5 Use primitive-restart to lower the size of our ibo, if supported.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 583
diff changeset
62 use_primitive_restart = (is_desktop and version >= 31)
587
6c9d8a3d853f Use ARB_framebuffer_blit instead of a second rendering pass for scaled rendering, if supported, and remove framebuffer stuff from the Renderer.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 585
diff changeset
63 use_framebuffer_blit = (is_desktop and version >= 30)
592
19d930f9e3f0 Add the screenshot feature, using P or Home like the original game.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 590
diff changeset
64 use_pack_invert = epoxy_has_gl_extension('GL_MESA_pack_invert')
610
1b31169dc344 Move the passthrough shader to the Framebuffer class, since it isn’t used in the use_framebuffer_blit path.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 609
diff changeset
65 use_scaled_rendering = not is_legacy #TODO: try to use the EXT framebuffer extension.
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
66
611
a6a191e371c7 Add back a GL_QUADS path for legacy applications.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 610
diff changeset
67 primitive_mode = (GL_QUADS if is_legacy else
a6a191e371c7 Add back a GL_QUADS path for legacy applications.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 610
diff changeset
68 GL_TRIANGLE_STRIP if use_primitive_restart else
a6a191e371c7 Add back a GL_QUADS path for legacy applications.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 610
diff changeset
69 GL_TRIANGLES)
593
974decb8df4f Only selects between GL_TRIANGLE_STRIP and GL_TRIANGLES once, in the backend.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 592
diff changeset
70
595
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
71 if not is_legacy:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
72 if is_desktop:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
73 # gl_FragColor isn’t supported anymore starting with GLSL 4.2.
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
74 if version >= 42:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
75 version = 41
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
76 try:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
77 glsl_version = {20: 110, 21: 120, 30: 130, 31: 140, 32: 150}[version]
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
78 except KeyError:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
79 assert version >= 33
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
80 glsl_version = version * 10
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
81 shader_header = ('#version %d\n\n' % glsl_version).encode()
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
82 else:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
83 # The attribute keyword isn’t supported past GLSL ES 3.0.
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
84 if version >= 30:
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
85 version = 20
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
86 glsl_version = {20: '100', 30: '300 es'}[version]
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
87 shader_header = ('#version %s\n\nprecision highp float;\n\n' % glsl_version).encode()
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
88
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
89
589
0768122da817 Add a frameskip option, and use swap interval to implement it.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
90 def create_window(title, x, y, width, height, swap_interval):
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
91 '''Create a window (using SDL) and an OpenGL context.'''
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
92
635
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
93 cdef gui.Window window
636
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
94 if use_glfw:
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
95 window = create_glfw_window(title, width, height)
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
96 else:
4fa0a8e7d941 Add a GLFW implementation of gui.Window.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 635
diff changeset
97 window = create_sdl_window(title, x, y, width, height)
635
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
98 window.create_gl_context()
583
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
99 discover_features()
47cf4e3d159d Use libepoxy to discover the actual GL version we are using, and available extensions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 582
diff changeset
100
582
6e79756b7f42 Don’t call gl*DebugGroup if it isn’t exposed by the driver.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
101 if use_debug_group:
6e79756b7f42 Don’t call gl*DebugGroup if it isn’t exposed by the driver.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
102 glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, "OpenGL initialisation")
6e79756b7f42 Don’t call gl*DebugGroup if it isn’t exposed by the driver.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
103
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
104 # Initialize OpenGL
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
105 glEnable(GL_BLEND)
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
106 if is_legacy:
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
107 glEnable(GL_TEXTURE_2D)
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
108 glHint(GL_FOG_HINT, GL_NICEST)
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
109 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
110 glEnableClientState(GL_COLOR_ARRAY)
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
111 glEnableClientState(GL_VERTEX_ARRAY)
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
112 glEnableClientState(GL_TEXTURE_COORD_ARRAY)
582
6e79756b7f42 Don’t call gl*DebugGroup if it isn’t exposed by the driver.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
113
585
e0166cda75d5 Use primitive-restart to lower the size of our ibo, if supported.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 583
diff changeset
114 if use_primitive_restart:
e0166cda75d5 Use primitive-restart to lower the size of our ibo, if supported.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 583
diff changeset
115 glEnable(GL_PRIMITIVE_RESTART)
e0166cda75d5 Use primitive-restart to lower the size of our ibo, if supported.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 583
diff changeset
116 glPrimitiveRestartIndex(0xFFFF);
e0166cda75d5 Use primitive-restart to lower the size of our ibo, if supported.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 583
diff changeset
117
592
19d930f9e3f0 Add the screenshot feature, using P or Home like the original game.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 590
diff changeset
118 if use_pack_invert:
19d930f9e3f0 Add the screenshot feature, using P or Home like the original game.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 590
diff changeset
119 glPixelStorei(GL_PACK_INVERT_MESA, True)
19d930f9e3f0 Add the screenshot feature, using P or Home like the original game.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 590
diff changeset
120
582
6e79756b7f42 Don’t call gl*DebugGroup if it isn’t exposed by the driver.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
121 if use_debug_group:
6e79756b7f42 Don’t call gl*DebugGroup if it isn’t exposed by the driver.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 579
diff changeset
122 glPopDebugGroup()
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
123
589
0768122da817 Add a frameskip option, and use swap interval to implement it.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
124 if swap_interval is not None:
0768122da817 Add a frameskip option, and use swap interval to implement it.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
125 try:
635
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
126 window.set_swap_interval(swap_interval)
80687f258001 Make sdl.Window inherit from gui.Window, so we can swap implementations.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 617
diff changeset
127 except GUIError:
595
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
128 # The OpenGL context doesn’t support setting the swap interval,
b7b4a234bf70 Fix legacy OpenGL support, and detect the absence of non-legacy context with libepoxy.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 593
diff changeset
129 # we’ll probably fallback to SDL_Delay-based clocking.
589
0768122da817 Add a frameskip option, and use swap interval to implement it.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
130 pass
0768122da817 Add a frameskip option, and use swap interval to implement it.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 587
diff changeset
131
553
8f51e34d911c Refactor graphics backend selection, to make them fallbackable and optional.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
diff changeset
132 return window