Hash :
da2265ce
Author :
Thomas de Grivel
Date :
2025-10-12T15:01:09
unify all OpenGL demos under window/demo/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
/* kc3
* Copyright from 2022 to 2025 kmx.io <contact@kmx.io>
*
* Permission is hereby granted to use this software granted the above
* copyright notice and this permission paragraph are included in all
* copies and substantial portions of this software.
*
* THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
* PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
* AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
* THIS SOFTWARE.
*/
/** @file types.h
* @brief Module KC3.Window.SDL2
*
* Struct for all GUI window SDL2 graphics operations.
*/
#ifndef LIBKC3_WINDOW_SDL2_TYPES_H
#define LIBKC3_WINDOW_SDL2_TYPES_H
#if defined(WIN32) || defined(WIN64)
# include <windef.h>
#endif
#include <SDL.h>
#include <png.h>
#include "../../gl/types.h"
#include <SDL_opengl.h>
#include "../types.h"
typedef struct window_sdl2 s_window_sdl2;
/* return false to break event loop */
typedef bool (*f_window_sdl2_button) (s_window_sdl2 *window,
u8 button, s64 x, s64 y);
/* return false to break event loop */
typedef bool (*f_window_sdl2_key) (s_window_sdl2 *window,
SDL_Keysym *keysym);
/* return false to break event loop */
typedef bool (*f_window_sdl2_load) (s_window_sdl2 *window);
/* return false to break event loop */
typedef bool (*f_window_sdl2_motion) (s_window_sdl2 *window, s64 x,
s64 y);
/* return false to break event loop */
typedef bool (*f_window_sdl2_render) (s_window_sdl2 *window);
/* return false to break event loop */
typedef bool (*f_window_sdl2_resize) (s_window_sdl2 *window,
u64 w, u64 h);
typedef bool (*f_window_sdl2_sequence_load) (s_sequence *seq,
s_window_sdl2 *window);
typedef bool (*f_window_sdl2_sequence_render) (s_sequence *seq,
s_window_sdl2 *window,
void *context);
typedef void (*f_window_sdl2_unload) (s_window_sdl2 *window);
/* Subtype of s_window, see window/types.h . */
struct window_sdl2 {
s64 x;
s64 y;
u64 w;
u64 h;
u64 pixel_w;
u64 pixel_h;
bool fullscreen;
f_window_sdl2_button button;
f_window_sdl2_key key;
f_window_sdl2_load load;
f_window_sdl2_motion motion;
f_window_sdl2_render render;
SDL_Window *sdl_window;
f_window_sdl2_resize resize;
s_sequence *seq;
s_sequence *sequence;
u32 sequence_count;
u32 sequence_pos;
s_tag tag; // TODO: move sequence to tag
const char *title;
f_window_sdl2_unload unload;
float dpi;
float dpi_w;
float dpi_h;
SDL_GLContext *context;
};
/* 2 */
struct sdl2_sprite {
s_gl_object object;
s_str path;
s_str real_path;
u64 total_w;
u64 total_h;
u64 dim_x;
u64 dim_y;
u64 frame_count;
u64 w;
u64 h;
u64 tex_w;
u64 tex_h;
GLuint *texture;
};
#endif /* LIBKC3_WINDOW_SDL2_TYPES_H */