| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- #ifndef RI_STRUCTS_H
- #define RI_STRUCTS_H
- #include <SDL2/SDL.h>
- #include <CL/cl.h>
- #include "RI_math.h"
- enum {
- RI_ASPECT_MODE_STRETCH = 1 << 0,
- RI_ASPECT_MODE_LETTERBOX = 1 << 1,
- };
- enum {
- RI_DEBUG_NONE = 0,
- // PitMap
- RI_DEBUG_PITMAP = 1 << 29,
- // frame-level
- RI_DEBUG_FRAME_START_END_MARKERS = 1 << 0,
- RI_DEBUG_TICK_TIME = 1 << 1,
- RI_DEBUG_KERNEL_LOADER_ERROR = 1 << 2,
- // transformer
- RI_DEBUG_TRANSFORMER_CURRENT_ACTOR = 1 << 3,
- RI_DEBUG_TRANSFORMER_GLOBAL_SIZE = 1 << 5,
- RI_DEBUG_TRANSFORMER_LOCAL_SIZE = 1 << 6,
- RI_DEBUG_TRANSFORMER_EXTRA_WORK_ITEMS= 1 << 7,
- RI_DEBUG_TRANSFORMER_TIME = 1 << 8,
- RI_DEBUG_TRANSFORMER_MESSAGE = 1 << 9,
- RI_DEBUG_TRANSFORMER_ERROR = 1 << 11,
- RI_DEBUG_TRANSFORMER_TEXTURE = 1 << 29,
- RI_DEBUG_TRANSFORMER_ALL = (
- RI_DEBUG_TRANSFORMER_CURRENT_ACTOR |
- RI_DEBUG_TRANSFORMER_GLOBAL_SIZE |
- RI_DEBUG_TRANSFORMER_LOCAL_SIZE |
- RI_DEBUG_TRANSFORMER_EXTRA_WORK_ITEMS |
- RI_DEBUG_TRANSFORMER_TIME |
- RI_DEBUG_TRANSFORMER_MESSAGE |
- RI_DEBUG_TRANSFORMER_ERROR |
- RI_DEBUG_TRANSFORMER_TEXTURE ),
- // rasterizer
- RI_DEBUG_RASTERIZER_TIME = 1 << 12,
- RI_DEBUG_RASTERIZER_GLOBAL_SIZE = 1 << 13,
- RI_DEBUG_RASTERIZER_LOCAL_SIZE = 1 << 14,
- RI_DEBUG_RASTERIZER_MESSAGE = 1 << 15,
- RI_DEBUG_RASTERIZER_ = 1 << 16,
- RI_DEBUG_RASTERIZER_ALL = (
- RI_DEBUG_RASTERIZER_TIME |
- RI_DEBUG_RASTERIZER_GLOBAL_SIZE |
- RI_DEBUG_RASTERIZER_LOCAL_SIZE |
- RI_DEBUG_RASTERIZER_MESSAGE |
- RI_DEBUG_RASTERIZER_ ),
- // mesh loader
- RI_DEBUG_MESH_LOADER_ERROR = 1 << 17,
- RI_DEBUG_MESH_LOADER_LOADED_MESH = 1 << 18,
- RI_DEBUG_MESH_LOADER_REALLOCATION = 1 << 19,
- RI_DEBUG_MESH_LOADER_TIME = 1 << 20,
- RI_DEBUG_MESH_LOADER_FACE_VERT_NORM_UV_COUNT = 1 << 28,
- RI_DEBUG_MESH_LOADER_ALL = (
- RI_DEBUG_MESH_LOADER_ERROR |
- RI_DEBUG_MESH_LOADER_LOADED_MESH |
- RI_DEBUG_MESH_LOADER_REALLOCATION |
- RI_DEBUG_MESH_LOADER_TIME |
- RI_DEBUG_MESH_LOADER_FACE_VERT_NORM_UV_COUNT ),
- // render function
- RI_DEBUG_RENDER_REALLOCATION = 1 << 21,
- RI_DEBUG_RENDER_ERROR = 1 << 22,
- RI_DEBUG_RENDER_FRAME_BUFFER_READ_TIME = 1 << 23,
- RI_DEBUG_RENDER_TIME = 1 << 24,
- RI_DEBUG_RENDER_ALL = (
- RI_DEBUG_RENDER_REALLOCATION |
- RI_DEBUG_RENDER_ERROR |
- RI_DEBUG_RENDER_FRAME_BUFFER_READ_TIME |
- RI_DEBUG_RENDER_TIME ),
- // OpenCL
- RI_DEBUG_OPENCL_ERROR = 1 << 25,
- // init
- RI_DEBUG_INIT_PLATFORMS = 1 << 26,
- RI_DEBUG_INIT_ERROR = (1 << 27) | RI_DEBUG_OPENCL_ERROR,
- // multi-flags
- RI_DEBUG_ETC = (
- RI_DEBUG_FRAME_START_END_MARKERS |
- RI_DEBUG_TICK_TIME |
- RI_DEBUG_KERNEL_LOADER_ERROR ),
- RI_DEBUG_ERRORS = (
- RI_DEBUG_TRANSFORMER_ERROR |
- RI_DEBUG_MESH_LOADER_ERROR |
- RI_DEBUG_RENDER_ERROR |
- RI_DEBUG_INIT_ERROR ),
- RI_DEBUG_ALL = (
- RI_DEBUG_ETC |
- RI_DEBUG_TRANSFORMER_ALL |
- RI_DEBUG_MESH_LOADER_ALL |
- RI_DEBUG_RASTERIZER_ALL |
- RI_DEBUG_RENDER_ALL )
- };
- typedef enum {
- ri_true = 1,
- ri_false = 0,
- } ri_bool;
- typedef struct {
- uint16_t width;
- uint16_t height; // actual height of the image INCLUDING all frames
- uint32_t index;
- uint32_t frame_count;
- uint16_t current_frame;
- uint16_t frame_height; // height of each frame
- } RI_texture;
- typedef struct {
- RI_vector_3 position_0;
- RI_vector_3 position_1;
- RI_vector_3 position_2;
- RI_vector_3 normal_0;
- RI_vector_3 normal_1;
- RI_vector_3 normal_2;
- RI_vector_2 uv_0;
- RI_vector_2 uv_1;
- RI_vector_2 uv_2;
- unsigned char should_render;
- } RI_face;
- typedef struct {
- int position_0_index;
- int position_1_index;
- int position_2_index;
- int normal_0_index;
- int normal_1_index;
- int normal_2_index;
- int uv_0_index;
- int uv_1_index;
- int uv_2_index;
- } RI_temp_face;
- typedef struct {
- int face_count;
- int face_index;
- int has_normals;
- int has_uvs;
- } RI_mesh;
- typedef struct {
- double r, g, b;
- } RI_color;
- typedef struct {
- uint32_t albedo;
- } RI_material;
- typedef struct {
- RI_vector_3 position;
- RI_vector_4 rotation;
- RI_vector_3 scale;
- RI_mesh *mesh;
- RI_texture* texture;
- RI_texture* normal_texture;
- int active;
- int material_index;
- uint16_t texture_frame;
- } RI_actor;
- typedef struct {
- RI_vector_3 position_0, position_1, position_2;
- RI_vector_3 normal_0, normal_1, normal_2;
- RI_vector_2 uv_0, uv_1, uv_2;
- int16_t min_screen_x, max_screen_x, min_screen_y, max_screen_y;
- unsigned char should_render;
- unsigned char is_split;
- unsigned char is_transformed;
- unsigned char is_shrunk;
- RI_texture texture;
- RI_texture normal_texture;
- } RI_renderable_face;
- typedef struct {
- RI_vector_3 position;
- RI_vector_4 rotation;
- float FOV, min_clip, max_clip;
- } RI_camera;
- typedef struct {
- RI_actor **actors;
- RI_camera camera;
- int length_of_actors_array, face_count;
- } RI_scene;
- typedef struct {
- size_t size;
- void *pointer;
- int reallocated_free;
- int reallocated_alloc;
- int freed;
- int allocated;
- int line;
- } RI_memory_allocation;
- typedef struct {
- int width, height, half_width, half_height;
- char* title;
- unsigned char aspect_mode;
- } RI_window;
- typedef struct {
- SDL_Window *window;
- SDL_Renderer *renderer;
- SDL_Texture *frame_buffer_texture;
- uint32_t *frame_buffer;
- void (*event_handler)(SDL_Event);
- int pitch;
- } RI_SDL;
- typedef struct {
- cl_platform_id platform;
- cl_device_id device;
- cl_context context;
- cl_command_queue queue;
- cl_kernel rasterization_kernel;
- cl_kernel transformation_kernel;
- cl_kernel tile_clear_kernel;
- cl_mem textures_mem_buffer;
- cl_mem renderable_faces_mem_buffer;
- cl_mem faces_mem_buffer;
- cl_mem frame_buffer_mem_buffer;
- cl_mem vertecies_mem_buffer;
- cl_mem normals_mem_buffer;
- cl_mem uvs_mem_buffer;
- cl_mem tiles_mem_buffer;
- RI_renderable_face *faces_to_render;
- RI_face *faces;
- RI_temp_face *temp_faces;
- RI_vector_3 *temp_vertecies;
- RI_vector_3 *temp_normals;
- RI_vector_2 *temp_uvs;
- uint32_t* textures;
- int face_count;
- int vertex_count;
- int normal_count;
- int uv_count;
- int length_of_renderable_faces_array;
- int number_of_faces_just_rendered;
- int length_of_textures_array;
- int tile_width;
- int tile_height;
- int lagest_face_count;
- int num_h_tiles;
- int num_v_tiles;
- } RI_CL;
- typedef struct {
- int debug_memory;
- RI_memory_allocation *allocation_table;
- int current_allocation_index;
- int allocation_search_limit;
- int allocation_table_length;
- } RI_memory;
- typedef struct {
- RI_actor *default_actor;
- RI_texture* default_texture;
- } RI_defaults;
- typedef struct {
- RI_window window;
- RI_SDL sdl;
- RI_CL opencl;
- RI_memory memory;
- RI_defaults defaults;
- int is_running;
- char* debug_prefix;
- int current_renderable_face_index;
- int current_split_renderable_face_index;
- int current_frame;
- int debug_flags;
- } RI_context;
- #endif
|