src/error.c

Sat, 03 May 2025 19:48:57 +0200

author
Mike Becker <universe@uap-core.de>
date
Sat, 03 May 2025 19:48:57 +0200
changeset 108
d619bf7dd87b
parent 107
a35b39abe2b2
permissions
-rw-r--r--

add AscBehavior - prepares resolution of issue #646

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
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 void asc_error_impl(const char* file, unsigned line, char const* fmt, ...) {
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
107
a35b39abe2b2 remove stdio include from error.h
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
50 CxBuffer* buf = &asc_context.error_buffer;
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
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 char const* asc_get_error(void) {
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 }

mercurial