#include "rse_graphics.h" #include "window.h" #include "vulkan_base.h" #include "mesh_controller.h" #include "vulkan_commons.h" #include "rse_math.h" extern struct rse_vulkan_state_t g_vulkan_state; void rse_graphics_init(void) { // g_vulkan_state = malloc(sizeof(struct rse_vulkan_state_t)); g_vulkan_state.graphics_queue = VK_NULL_HANDLE; g_vulkan_state.physical_device = VK_NULL_HANDLE; g_vulkan_state.current_frame = 0U; // vulkan_state->queueFamilyIndices = {0U}; /* TODO: Change when more families are needed */ // g_vulkan_state->uniformBuffers = {}; // g_vulkan_state->pCommandBuffers = {}; // g_vulkan_state->descriptorSets = {}; // g_vulkan_state->swapChainImageViews = {}; TODO: Allocate later // g_vulkan_state->swapchainExtent = {}; TODO: Allocate later g_vulkan_state.render_pass = VK_NULL_HANDLE; g_vulkan_state.descriptor_set_layout = VK_NULL_HANDLE; // g_vulkan_state->swapchainFramebuffers = {}; TODO: Allocate later g_vulkan_state.graphics_pipeline = VK_NULL_HANDLE; g_vulkan_state.pipeline_layout = VK_NULL_HANDLE; g_vulkan_state.swapchain = VK_NULL_HANDLE; } void rse_graphics_deinit() { // free(g_vulkan_state); } uint8_t rse_graphics_run(void) { window_init(); if (0 != init_vulkan()) return -1; // FIXME: Temporary array of vertices, for testing purposes struct rse_vertex_t vertices[] = {{{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 1.0f}}, {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 1.0f}}, {{0.5f, 0.5f, 0.0f}, {0.0f, 0.0f, 1.0f}}, {{-0.5f, 0.5f, 0.0f}, {1.0f, 0.0f, 1.0f}}}; struct rse_vertex_t vertices2[] = {{{-0.5f, -0.5f, 0.0f}, {1.0f, 0.0f, 1.0f}}, {{0.5f, -0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}}, {{0.5f, 0.5f, 0.0f}, {0.0f, 1.0f, 0.0f}}, {{-0.5f, 0.5f, 0.0f}, {1.0f, 1.0f, 0.0f}}}; // FIXME: Temporary array of vertices, for testing purposes uint16_t indices[] = {0, 1, 2, 2, 3, 0}; uint16_t mesh_id = create_mesh(vertices, indices, 24, 6); create_mesh_instance(mesh_id, (struct rse_instance_data_t){ {0.0f, 0.0f, 0.0f}, {0.0f, 0.0f, rse_math_deg_to_radians(45.0f)}, 1.0f }); create_mesh_instance(mesh_id, (struct rse_instance_data_t){ {-1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 0.0f}, 1.0f }); mesh_id = create_mesh(vertices, indices, 24, 6); create_mesh_instance(mesh_id, (struct rse_instance_data_t){ {0.0f, 1.0f, 0.0f}, {0.0f, 0.0f, rse_math_deg_to_radians(0.0f)}, 1.0f }); window_loop(); deinit_vulkan(); window_terminate(); return 0; }