Tue, 28 Oct 2025 22:03:06 +0100
fix that dependencies for tools are always checked
| 37 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 1 | /* | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 3 | * Copyright 2023 Mike Becker. All rights reserved. | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 4 | * | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 5 | * Redistribution and use in source and binary forms, with or without | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 6 | * modification, are permitted provided that the following conditions are met: | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 7 | * | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 8 | * 1. Redistributions of source code must retain the above copyright | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 9 | * notice, this list of conditions and the following disclaimer. | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 10 | * | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 11 | * 2. Redistributions in binary form must reproduce the above copyright | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 12 | * notice, this list of conditions and the following disclaimer in the | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 13 | * documentation and/or other materials provided with the distribution. | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 14 | * | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 24 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 25 | * POSSIBILITY OF SUCH DAMAGE. | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 26 | */ | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 27 | |
| 106 
895f92cff6b8
bring back error.h to reduce compile dependencies
 Mike Becker <universe@uap-core.de> parents: 
105diff
changeset | 28 | #include "ascension/error.h" | 
| 121 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 29 | #include "ascension/context.h" | 
| 37 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 30 | #include "ascension/camera.h" | 
| 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 31 | |
| 121 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 32 | void asc_camera_init_(AscCamera *camera, struct asc_camera_init_args args) { | 
| 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 33 | if (args.type == ASC_CAMERA_ORTHO) { | 
| 186 
e9bb4d4f88a8
rename asc_recti to just asc_rect (there won't be an asc_rectu)
 Mike Becker <universe@uap-core.de> parents: 
121diff
changeset | 34 | asc_rect rect = args.ortho.rect; | 
| 101 | 35 | if (rect.size.width <= 0 || rect.size.height <= 0) { | 
| 36 | rect.size.width = 1; | |
| 37 | rect.size.height = 1; | |
| 38 | } | |
| 39 | asc_camera_ortho(camera, rect); | |
| 121 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 40 | } else if (args.type == ASC_CAMERA_PERSPECTIVE) { | 
| 101 | 41 | // TODO: implement | 
| 42 | asc_wprintf("Camera type PERSPECTIVE is not yet implemented."); | |
| 43 | } else { | |
| 44 | // at least zero all the bytes (law of the least surprise) | |
| 45 | memset(camera, 0, sizeof(AscCamera)); | |
| 46 | } | |
| 121 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 47 | camera->viewport_update_func = args.viewport_update_func; | 
| 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 48 | camera->projection_update_func = args.projection_update_func; | 
| 
ede9a9e92ff9
add viewport_clear flag to camera settings
 Mike Becker <universe@uap-core.de> parents: 
106diff
changeset | 49 | camera->viewport_clear = args.viewport_clear; | 
| 256 
60014484121c
remove the asc_col4i datatype in favor of a unified asc_color type
 Mike Becker <universe@uap-core.de> parents: 
214diff
changeset | 50 | camera->clear_color = args.clear_color; | 
| 101 | 51 | } | 
| 52 | ||
| 186 
e9bb4d4f88a8
rename asc_recti to just asc_rect (there won't be an asc_rectu)
 Mike Becker <universe@uap-core.de> parents: 
121diff
changeset | 53 | void asc_camera_ortho(AscCamera *camera, asc_rect rect) { | 
| 47 
44457f6cb0a2
remove unnecessary scene container
 Mike Becker <universe@uap-core.de> parents: 
41diff
changeset | 54 | asc_mat4f_unit(camera->view); | 
| 
44457f6cb0a2
remove unnecessary scene container
 Mike Becker <universe@uap-core.de> parents: 
41diff
changeset | 55 | float left = (float) rect.pos.x; | 
| 
44457f6cb0a2
remove unnecessary scene container
 Mike Becker <universe@uap-core.de> parents: 
41diff
changeset | 56 | float right = left + (float) rect.size.width; | 
| 
44457f6cb0a2
remove unnecessary scene container
 Mike Becker <universe@uap-core.de> parents: 
41diff
changeset | 57 | float top = (float) rect.pos.y; | 
| 
44457f6cb0a2
remove unnecessary scene container
 Mike Becker <universe@uap-core.de> parents: 
41diff
changeset | 58 | float bottom = top + (float) rect.size.height; | 
| 41 
df81d493716e
add correct interleaving of opaque and transparent sprites
 Mike Becker <universe@uap-core.de> parents: 
37diff
changeset | 59 | asc_mat4f_ortho(camera->projection, left, right, bottom, top, -1, 1); | 
| 37 
8a8cc6725b48
add camera and render groups
 Mike Becker <universe@uap-core.de> parents: diff
changeset | 60 | } | 
| 99 
ac143db979dc
add aspect-ration independent rendering
 Mike Becker <universe@uap-core.de> parents: 
47diff
changeset | 61 | |
| 105 | 62 | void asc_camera_ortho_update_size(AscCamera *camera, asc_vec2u size) { | 
| 99 
ac143db979dc
add aspect-ration independent rendering
 Mike Becker <universe@uap-core.de> parents: 
47diff
changeset | 63 | asc_mat4f_ortho_update_size(camera->projection, (float)size.width, (float)size.height); | 
| 
ac143db979dc
add aspect-ration independent rendering
 Mike Becker <universe@uap-core.de> parents: 
47diff
changeset | 64 | } | 
| 262 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 65 | |
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 66 | void asc_camera_update_viewport(AscCamera *camera, asc_vec2u window_size) { | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 67 | if (camera->viewport_update_func == NULL) { | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 68 | // this assumes the viewport was initialized with zeros! | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 69 | camera->viewport.size = window_size; | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 70 | } else { | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 71 | camera->viewport = camera->viewport_update_func(window_size); | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 72 | } | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 73 | if (camera->projection_update_func != NULL) { | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 74 | camera->projection_update_func(camera, window_size); | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 75 | } | 
| 
b47de42f4598
update viewports of cameras before executing behaviors, so that the new viewport information is available in the behavior functions
 Mike Becker <universe@uap-core.de> parents: 
256diff
changeset | 76 | } |