--- a/src/ascension/glcontext.h Mon Apr 21 17:27:33 2025 +0200 +++ b/src/ascension/glcontext.h Mon Apr 21 17:52:01 2025 +0200 @@ -41,26 +41,37 @@ int depth_size; } AscGLContextSettings; +enum AscDefaultPrimitives { + ASC_PRIMITIVE_PLANE_IDX = 0, + ASC_PRIMITIVE_COUNT +}; + +enum AscDefaultTextures2d { + ASC_TEXTURE_2D_EMPTY_1X1_IDX = 0, + ASC_TEXTURE_2D_COUNT +}; + +enum AscDefaultTexturesRect { + ASC_TEXTURE_RECT_EMPTY_1X1_IDX = 0, + ASC_TEXTURE_RECT_COUNT +}; + typedef struct AscGLContext { SDL_Window *window; SDL_GLContext glctx; - struct { - AscMesh plane; - } primitives; + AscMesh primitives[ASC_PRIMITIVE_COUNT]; + AscTexture textures_2d[ASC_TEXTURE_2D_COUNT]; + AscTexture textures_rect[ASC_TEXTURE_RECT_COUNT]; struct { AscShaderSprite sprite; } shader; - struct { - AscTexture empty_1x1_2d; - AscTexture empty_1x1_rect; - } textures; } AscGLContext; -#define ASC_PRIMITIVES asc_active_window->glctx.primitives - -#define ASC_DEFAULT_SHADER asc_active_window->glctx.shader - -#define ASC_DEFAULT_TEXTURES asc_active_window->glctx.textures +#define asc_active_glctx (&asc_active_window->glctx) +#define ASC_PRIMITIVE_PLANE (&asc_active_glctx->primitives[ASC_PRIMITIVE_PLANE_IDX]) +#define ASC_TEXTURE_2D_EMPTY_1X1 (&asc_active_glctx->textures_2d[ASC_TEXTURE_2D_EMPTY_1X1_IDX]) +#define ASC_TEXTURE_RECT_EMPTY_1X1 (&asc_active_glctx->textures_rect[ASC_TEXTURE_RECT_EMPTY_1X1_IDX]) +#define ASC_SHADER_SPRITE (&asc_active_glctx->shader.sprite) __attribute__((__nonnull__, __warn_unused_result__)) bool asc_gl_context_initialize(