/* * Tuxánci 2 - A first person shooter * Copyright (C) 2025-2026 Connor Thomson * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #ifndef TA_MODEL_H #define TA_MODEL_H #include #include #include "ta_sdl.h" #define TA_MODEL_DIMENSION 3 typedef struct ta_model_vertex { float position[TA_MODEL_DIMENSION]; float normal[TA_MODEL_DIMENSION]; } ta_model_vertex; typedef struct ta_model_mesh { ta_model_vertex *vertices; size_t vertex_count; } ta_model_mesh; typedef struct ta_model { SDL_GPUGraphicsPipeline *pipeline; SDL_GPUGraphicsPipeline *wireframe_pipeline; SDL_GPUGraphicsPipeline *shadow_pipeline; SDL_GPUBuffer *vertex_buffer; ta_model_mesh mesh; Uint32 vertex_count; bool uploaded; float position[TA_MODEL_DIMENSION]; float rotation[TA_MODEL_DIMENSION]; } ta_model; bool ta_model_build(const float positions[][TA_MODEL_DIMENSION], size_t position_count, const unsigned int faces[][TA_MODEL_DIMENSION], size_t face_count, ta_model_mesh *mesh); void ta_model_free(ta_model_mesh *mesh); bool ta_model_init(ta_model *model, SDL_GPUDevice *device, const float positions[][3], size_t position_count, const unsigned int faces[][TA_MODEL_DIMENSION], size_t face_count, SDL_GPUTextureFormat color_format, SDL_GPUTextureFormat depth_format, SDL_GPUSampleCount sample_count); void ta_model_upload(ta_model *model, SDL_GPUCommandBuffer *command_buffer, SDL_GPUDevice *device); void ta_model_render(const ta_model *model, SDL_GPUCommandBuffer *command_buffer, SDL_GPURenderPass *render_pass, int window_width, int window_height); void ta_model_render_shadow(const ta_model *model, SDL_GPUCommandBuffer *command_buffer, SDL_GPURenderPass *render_pass); void ta_model_destroy(ta_model *model, SDL_GPUDevice *device); #endif // TA_MODEL_H