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
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
1 | /* |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
3 | * Copyright 2025 Mike Becker. All rights reserved. |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
4 | * |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
5 | * Redistribution and use in source and binary forms, with or without |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
6 | * modification, are permitted provided that the following conditions are met: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
7 | * |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
8 | * 1. Redistributions of source code must retain the above copyright |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
9 | * notice, this list of conditions and the following disclaimer. |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
10 | * |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
11 | * 2. Redistributions in binary form must reproduce the above copyright |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
12 | * notice, this list of conditions and the following disclaimer in the |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
13 | * documentation and/or other materials provided with the distribution. |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
14 | * |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
15 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
16 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
17 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
18 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
19 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
20 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
21 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
22 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
23 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
895f92cff6b8
bring back error.h to reduce compile dependencies
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 |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
25 | * POSSIBILITY OF SUCH DAMAGE. |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
26 | */ |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
27 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
28 | #include "ascension/context.h" |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
29 | #include "ascension/error.h" |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
30 | |
107
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
31 | #include <stdio.h> |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
32 | #include <stdarg.h> |
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
33 | #include <cx/printf.h> |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
34 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
35 | #include <GL/glew.h> |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
36 | |
107
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
37 | void asc_printf(const char *level, const char *file, unsigned line, const char *fmt, ...) { |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
38 | printf("[%s %s %u] ", level, file, line); |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
39 | va_list ap; |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
40 | va_start(ap, fmt); |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
41 | vprintf(fmt, ap); |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
42 | va_end(ap); |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
43 | putchar('\n'); |
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
44 | } |
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
45 | |
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
111
diff
changeset
|
46 | void asc_error_(const char *file, unsigned line, const char *fmt, ...) { |
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
47 | asc_set_flag(asc_context.flags, ASC_FLAG_HAS_ERROR); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
48 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
49 | // write to error buffer |
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
111
diff
changeset
|
50 | CxBuffer *buf = &asc_context.error_buffer; |
107
a35b39abe2b2
remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents:
106
diff
changeset
|
51 | size_t bufpos = buf->pos; |
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
52 | va_list args; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
53 | va_start(args, fmt); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
54 | int written = cx_vfprintf(buf, cxBufferWriteFunc, fmt, args); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
55 | cxBufferPut(buf, '\n'); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
56 | va_end(args); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
57 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
58 | // also print to stderr |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
59 | // avoid double-formatting, get it directly from the buffer |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
60 | fprintf(stderr, "[ERROR %s %u] %.*s\n", |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
61 | file, line, written, buf->space+bufpos); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
62 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
63 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
64 | bool asc_has_error(void) { |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
65 | return asc_test_flag(asc_context.flags, ASC_FLAG_HAS_ERROR); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
66 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
67 | |
149
560772519ff9
resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents:
111
diff
changeset
|
68 | const char *asc_get_error(void) { |
106
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
69 | // we zero-terminate the current buffer contents before providing them |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
70 | cxBufferPut(&asc_context.error_buffer, 0); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
71 | --asc_context.error_buffer.pos; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
72 | --asc_context.error_buffer.size; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
73 | return asc_context.error_buffer.space; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
74 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
75 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
76 | void asc_clear_error(void) { |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
77 | cxBufferClear(&asc_context.error_buffer); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
78 | asc_clear_flag(asc_context.flags, ASC_FLAG_HAS_ERROR); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
79 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
80 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
81 | void asc_error_gl(unsigned code, const char *message) { |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
82 | const char *glerr; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
83 | switch(code) { |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
84 | case GL_NO_ERROR: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
85 | return; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
86 | case GL_INVALID_ENUM: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
87 | glerr = "invalid enum"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
88 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
89 | case GL_INVALID_VALUE: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
90 | glerr = "invalid value"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
91 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
92 | case GL_INVALID_OPERATION: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
93 | glerr = "invalid operation"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
94 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
95 | case GL_INVALID_FRAMEBUFFER_OPERATION: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
96 | glerr = "invalid framebuffer operation"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
97 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
98 | case GL_OUT_OF_MEMORY: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
99 | glerr = "out of memory"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
100 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
101 | case GL_STACK_UNDERFLOW: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
102 | glerr = "stack underflow"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
103 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
104 | case GL_STACK_OVERFLOW: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
105 | glerr = "stack overflow"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
106 | break; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
107 | default: |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
108 | glerr = "unknown GL error"; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
109 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
110 | asc_error("%s\nGL Error: %s", message, glerr); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
111 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
112 | |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
113 | int asc_error_catch_all_gl(void) { |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
114 | GLenum error; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
115 | int ret = 0; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
116 | while ((error = glGetError()) != GL_NO_ERROR) { |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
117 | asc_error_gl(error, "Uncaught"); |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
118 | ret = 1; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
119 | } |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
120 | return ret; |
895f92cff6b8
bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
121 | } |