Wed, 02 Jul 2025 23:21:17 +0200
resolve TODOs regarding input.h
a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array
0 | 1 | /* |
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | |
3 | * Copyright 2023 Mike Becker. All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms, with or without | |
6 | * modification, are permitted provided that the following conditions are met: | |
7 | * | |
8 | * 1. Redistributions of source code must retain the above copyright | |
9 | * notice, this list of conditions and the following disclaimer. | |
10 | * | |
11 | * 2. Redistributions in binary form must reproduce the above copyright | |
12 | * notice, this list of conditions and the following disclaimer in the | |
13 | * documentation and/or other materials provided with the distribution. | |
14 | * | |
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | |
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 | * POSSIBILITY OF SUCH DAMAGE. | |
26 | */ | |
27 | ||
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
28 | #include <ascension/core.h> |
48 | 29 | #include <ascension/ui.h> |
143
4db4f00493ad
prepare implementation of primitives
Mike Becker <universe@uap-core.de>
parents:
141
diff
changeset
|
30 | #include <ascension/sprite.h> |
151
42960d0c879b
adds first basic rectangle shader
Mike Becker <universe@uap-core.de>
parents:
149
diff
changeset
|
31 | #include <ascension/2d.h> |
48 | 32 | |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
15
diff
changeset
|
33 | #include <cx/printf.h> |
0 | 34 | |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
35 | enum Textures2d { |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
36 | TEX_SHIP = 0, |
101 | 37 | TEX_BACKDROP, |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
38 | TEX2D_COUNT |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
39 | }; |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
40 | static AscTexture tex2d[TEX2D_COUNT]; |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
41 | #define TEXTURE_SHIP &tex2d[TEX_SHIP] |
101 | 42 | #define TEXTURE_BACKDROP &tex2d[TEX_BACKDROP] |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
43 | |
101 | 44 | #define BACKDROP_SCENE asc_window_scene(0) |
45 | #define MAIN_SCENE asc_window_scene(1) | |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
46 | |
110
29f8d0d586f8
replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
47 | static void destroy_textures(void) { |
93
52611a99e574
add memory pool to gl context
Mike Becker <universe@uap-core.de>
parents:
89
diff
changeset
|
48 | asc_texture_destroy(tex2d, TEX2D_COUNT); |
52611a99e574
add memory pool to gl context
Mike Becker <universe@uap-core.de>
parents:
89
diff
changeset
|
49 | } |
52611a99e574
add memory pool to gl context
Mike Becker <universe@uap-core.de>
parents:
89
diff
changeset
|
50 | |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
51 | static void init_textures(void) { |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
52 | asc_texture_init_2d(tex2d, TEX2D_COUNT); |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
53 | asc_texture_from_file(TEXTURE_SHIP, "ship.png"); |
101 | 54 | asc_texture_from_file(TEXTURE_BACKDROP, "backdrop.png"); |
110
29f8d0d586f8
replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents:
108
diff
changeset
|
55 | asc_gl_context_add_cleanup_func(asc_active_glctx, destroy_textures); |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
56 | } |
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
57 | |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
58 | static void update_fps_counter(AscBehavior *behavior) { |
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
59 | AscSceneNode *node = behavior->node; |
165
590a9e822b6b
add frame_rate and frame_factor to context
Mike Becker <universe@uap-core.de>
parents:
160
diff
changeset
|
60 | static float last_fps = 0.f; |
590a9e822b6b
add frame_rate and frame_factor to context
Mike Becker <universe@uap-core.de>
parents:
160
diff
changeset
|
61 | if (fabsf(asc_context.frame_rate - last_fps) > 1) { |
590a9e822b6b
add frame_rate and frame_factor to context
Mike Becker <universe@uap-core.de>
parents:
160
diff
changeset
|
62 | last_fps = asc_context.frame_rate; |
590a9e822b6b
add frame_rate and frame_factor to context
Mike Becker <universe@uap-core.de>
parents:
160
diff
changeset
|
63 | asc_text_printf(node, "%.2f FPS", asc_context.frame_rate); |
0 | 64 | } |
148
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
65 | } |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
66 | |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
67 | static void tie_fps_counter_to_corner(AscBehavior *behavior) { |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
68 | // TODO: this should be replaced with some sort of UI layout manager |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
69 | AscSceneNode *node = behavior->node; |
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
70 | if (asc_test_flag(node->flags, ASC_SCENE_NODE_GRAPHICS_UPDATED) || asc_active_window->resized) { |
105 | 71 | asc_vec2u bottom_right = asc_active_window->dimensions; |
116
bfb2a7d62047
replace scaling with correct mesh sizes
Mike Becker <universe@uap-core.de>
parents:
114
diff
changeset
|
72 | asc_vec2u text_size = ((AscText*)node)->dimension; |
45
18de2af03531
simplify how transforms work
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
73 | asc_set_position2d( |
18de2af03531
simplify how transforms work
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
74 | node, |
105 | 75 | (int)bottom_right.x - (int)text_size.width - 10, |
76 | (int)bottom_right.y - (int)text_size.height - 10 | |
45
18de2af03531
simplify how transforms work
Mike Becker <universe@uap-core.de>
parents:
44
diff
changeset
|
77 | ); |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
78 | } |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
79 | } |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
80 | |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
81 | static void scale_backdrop(AscBehavior *behavior) { |
101 | 82 | // scale the backdrop to the size of the window |
83 | if (asc_active_window->resized) { | |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
84 | AscSceneNode *node = behavior->node; |
105 | 85 | asc_vec2u window_size = asc_active_window->dimensions; |
118 | 86 | asc_sprite_set_size(node, window_size.width, window_size.height); |
101 | 87 | } |
88 | } | |
89 | ||
90 | static void create_backdrop(void) { | |
117
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
91 | AscSceneNode *node = asc_sprite( |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
92 | .texture = TEXTURE_BACKDROP, |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
93 | .texture_scale_mode = ASC_TEXTURE_SCALE_REPEAT |
d1267f656a97
implement texture scaling
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
94 | ); |
108
d619bf7dd87b
add AscBehavior - prepares resolution of issue #646
Mike Becker <universe@uap-core.de>
parents:
105
diff
changeset
|
95 | asc_behavior_add(node, .func = scale_backdrop); |
101 | 96 | asc_scene_add_node(BACKDROP_SCENE, node); |
97 | } | |
98 | ||
70 | 99 | static void create_fps_counter(void) { |
100 | asc_font(ASC_FONT_REGULAR, 12); | |
123
737a676a46a6
make FPS counter readable
Mike Becker <universe@uap-core.de>
parents:
121
diff
changeset
|
101 | asc_ink_rgb(255, 255, 255); |
114 | 102 | AscSceneNode *node = asc_text(.name = "FPS Counter"); |
148
9f030f402699
implement interval for behaviors - fixes #383
Mike Becker <universe@uap-core.de>
parents:
144
diff
changeset
|
103 | asc_behavior_add(node, .func = update_fps_counter, .interval = asc_seconds(1)); |
156
bd15eeaa88c0
change order of members in asc_behavior_create_args so that you can just specify the func without designators
Mike Becker <universe@uap-core.de>
parents:
155
diff
changeset
|
104 | asc_behavior_add(node, tie_fps_counter_to_corner); |
155
b598b4eb4b44
add new ui.c where several UI functions are now moved to
Mike Becker <universe@uap-core.de>
parents:
154
diff
changeset
|
105 | asc_ui_add_node(node); |
70 | 106 | } |
107 | ||
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
108 | static void create_score_counter(void) { |
70 | 109 | asc_font(ASC_FONT_BOLD, 16); |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
110 | asc_ink_rgb(0, 255, 0); |
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
148
diff
changeset
|
111 | AscSceneNode *node = asc_text( |
114 | 112 | .name = "Score Counter", |
113 | .x = 10, .y = 10, | |
114 | .text = "Score: 0" | |
70 | 115 | ); |
155
b598b4eb4b44
add new ui.c where several UI functions are now moved to
Mike Becker <universe@uap-core.de>
parents:
154
diff
changeset
|
116 | asc_ui_add_node(node); |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
117 | } |
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
118 | |
88
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
119 | static void create_spaceship(void) { |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
120 | AscSceneNode *sprite = asc_sprite( |
114 | 121 | .name = "Player", |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
122 | .texture = TEXTURE_SHIP, |
88
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
123 | .x = 250, |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
124 | .y = 300, |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
125 | .width = 64, |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
126 | .height = 64 |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
127 | ); |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
128 | asc_scene_add_node(MAIN_SCENE, sprite); |
88
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
129 | |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
130 | // TODO: return something |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
131 | } |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
132 | |
105 | 133 | static asc_recti update_viewport_for_window_resize(asc_vec2u window_size) { |
99
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
134 | // Compute scaling and offsets |
105 | 135 | unsigned viewport_size, offset_x = 0, offset_y = 0; |
99
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
136 | if (window_size.width > window_size.height) { |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
137 | // Wider window: letterbox (black bars on top/bottom) |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
138 | offset_x = (window_size.width - window_size.height) / 2; |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
139 | viewport_size = window_size.height; |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
140 | } else { |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
141 | // Taller window: pillarbox (black bars on sides) |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
142 | offset_y = (window_size.height - window_size.width) / 2; |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
143 | viewport_size = window_size.width; |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
144 | } |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
145 | |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
146 | // Set the viewport to the scaled and centered region |
105 | 147 | return asc_recti_new(offset_x, offset_y, viewport_size, viewport_size); |
99
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
148 | } |
ac143db979dc
add aspect-ration independent rendering
Mike Becker <universe@uap-core.de>
parents:
98
diff
changeset
|
149 | |
105 | 150 | int main(void) { |
0 | 151 | asc_context_initialize(); |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
152 | if (asc_has_error()) { |
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
153 | SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
154 | "Fatal Error",asc_get_error(), NULL); |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
155 | return 1; |
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
156 | } |
86
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
84
diff
changeset
|
157 | #ifdef TEST_BUILD |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
84
diff
changeset
|
158 | asc_set_font_path("../../fonts"); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
84
diff
changeset
|
159 | asc_set_shader_path("../../shader"); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
84
diff
changeset
|
160 | asc_set_texture_path("../../test/snake/textures"); |
943bf9d7c6d6
make asset paths configurable
Mike Becker <universe@uap-core.de>
parents:
84
diff
changeset
|
161 | #endif |
0 | 162 | |
44
b3da4096c607
create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
37
diff
changeset
|
163 | // create window |
0 | 164 | AscWindowSettings settings; |
165 | asc_window_settings_init_defaults(&settings); | |
36
e26b4ac1661c
invert the logic of converting between specialized nodes and the generic interface
Mike Becker <universe@uap-core.de>
parents:
33
diff
changeset
|
166 | settings.title = "Snake"; |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
63
diff
changeset
|
167 | asc_window_initialize(0, &settings); |
154
4dff9cc488fe
add auto-scaling of UI depending on screen resolution - resolves #682
Mike Becker <universe@uap-core.de>
parents:
151
diff
changeset
|
168 | asc_ui_scale_auto(); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
15
diff
changeset
|
169 | |
101 | 170 | // load textures |
171 | init_textures(); | |
172 | ||
173 | // initialize the scenes | |
174 | const int game_field_size = 500; | |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
118
diff
changeset
|
175 | asc_scene_init(BACKDROP_SCENE, |
101 | 176 | .type = ASC_CAMERA_ORTHO, |
177 | .projection_update_func = asc_camera_ortho_update_size | |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
118
diff
changeset
|
178 | ); |
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
118
diff
changeset
|
179 | asc_ink_rgb(0, 128, 90); |
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
118
diff
changeset
|
180 | asc_scene_init(MAIN_SCENE, |
100
5231da78831e
change asc_scene_init() to also request parameters for camera initialization
Mike Becker <universe@uap-core.de>
parents:
99
diff
changeset
|
181 | .type = ASC_CAMERA_ORTHO, |
105 | 182 | .ortho.rect = asc_recti_new(0, 0, game_field_size, game_field_size), |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
118
diff
changeset
|
183 | .viewport_clear = true, |
100
5231da78831e
change asc_scene_init() to also request parameters for camera initialization
Mike Becker <universe@uap-core.de>
parents:
99
diff
changeset
|
184 | .viewport_update_func = update_viewport_for_window_resize |
121
ede9a9e92ff9
add viewport_clear flag to camera settings
Mike Becker <universe@uap-core.de>
parents:
118
diff
changeset
|
185 | ); |
96
9e25f080a33e
add scenes, but they don't draw yet
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
186 | |
101 | 187 | // backdrop for letterbox/pillarbox |
188 | create_backdrop(); | |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
189 | |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
190 | // create UI elements |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
191 | create_fps_counter(); |
37
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
192 | create_score_counter(); |
8a8cc6725b48
add camera and render groups
Mike Becker <universe@uap-core.de>
parents:
36
diff
changeset
|
193 | |
88
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
194 | // create spaceship |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
195 | create_spaceship(); |
6234b7ea48f3
add support for 2d textures in sprite shader - fixes #386
Mike Becker <universe@uap-core.de>
parents:
86
diff
changeset
|
196 | |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
197 | // Main Loop |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
25
diff
changeset
|
198 | do { |
0 | 199 | // quit application on any error |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
200 | if (asc_has_error()) { |
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
201 | SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, |
65
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
63
diff
changeset
|
202 | "Fatal Error", asc_get_error(), |
9c44c55d327a
consistently refer to windows by ID - fixes #381
Mike Becker <universe@uap-core.de>
parents:
63
diff
changeset
|
203 | asc_active_window->window); |
33
e7ddb52facd3
add behavior nodes + restructure test program
Mike Becker <universe@uap-core.de>
parents:
32
diff
changeset
|
204 | asc_clear_error(); |
63
e3cacdd636e4
implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
62
diff
changeset
|
205 | asc_context_quit(); |
e3cacdd636e4
implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
62
diff
changeset
|
206 | } |
e3cacdd636e4
implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
62
diff
changeset
|
207 | |
140
d190fe5315bd
add dynamic reload of all shaders
Mike Becker <universe@uap-core.de>
parents:
123
diff
changeset
|
208 | // debug-key for clearing the shader registry |
141
cd82643bb6d9
implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents:
140
diff
changeset
|
209 | if (asc_key_pressed(ASC_KEY(S))) { |
140
d190fe5315bd
add dynamic reload of all shaders
Mike Becker <universe@uap-core.de>
parents:
123
diff
changeset
|
210 | asc_shader_clear_registry(); |
d190fe5315bd
add dynamic reload of all shaders
Mike Becker <universe@uap-core.de>
parents:
123
diff
changeset
|
211 | asc_dprintf("Shader cache cleared."); |
d190fe5315bd
add dynamic reload of all shaders
Mike Becker <universe@uap-core.de>
parents:
123
diff
changeset
|
212 | } |
d190fe5315bd
add dynamic reload of all shaders
Mike Becker <universe@uap-core.de>
parents:
123
diff
changeset
|
213 | |
63
e3cacdd636e4
implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
62
diff
changeset
|
214 | // quit application on ESC key press |
141
cd82643bb6d9
implement edge-triggered key press/release
Mike Becker <universe@uap-core.de>
parents:
140
diff
changeset
|
215 | if (asc_key_pressed(ASC_KEY(ESCAPE))) { |
63
e3cacdd636e4
implement mouse motion and key press events
Mike Becker <universe@uap-core.de>
parents:
62
diff
changeset
|
216 | asc_context_quit(); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
15
diff
changeset
|
217 | } |
29
1d001eb694dc
bring first scene graph to live
Mike Becker <universe@uap-core.de>
parents:
25
diff
changeset
|
218 | } while (asc_loop_next()); |
16
c5dde81b6fb2
add text rendering and demo FPS counter
Mike Becker <universe@uap-core.de>
parents:
15
diff
changeset
|
219 | |
89
e1f682a8a145
use refcounted objects for textures instead of pass-by-value int structs
Mike Becker <universe@uap-core.de>
parents:
88
diff
changeset
|
220 | // cleanup |
0 | 221 | asc_context_destroy(); |
222 | return 0; | |
223 | } | |
224 |