[WIP] Add descriptors and pipeline builder
This commit is contained in:
1 parent
173a82b9d1
commit
f8eb98ddf4
36 files changed
+613
-458
No files matched your search
+24
-17
@@ -17,20 +17,23 @@ struct rse_graphics_context_t {
|
||||
struct graphics_context_t* context;
|
||||
};
|
||||
|
||||
rse_err_t rse_graphics_init(struct rse_graphics_context_t* context)
|
||||
rse_err_t rse_graphics_init(struct rse_graphics_context_t** context)
|
||||
{
|
||||
rse_err_t status = RSE_ERROR_NO_ERROR;
|
||||
if (context != NULL) {
|
||||
struct rse_graphics_context_t* ctx_ptr = NULL;
|
||||
|
||||
if (*context != NULL) {
|
||||
LOGF(_("Graphics already initialized!\n"));
|
||||
return RSE_ERROR_ALREADY_INITIALIZED;
|
||||
}
|
||||
|
||||
rse_malloc(context, sizeof(struct rse_graphics_context_t));
|
||||
rse_malloc(context->context, sizeof(struct graphics_context_t));
|
||||
rse_memset(context->context, 0, sizeof(struct graphics_context_t));
|
||||
rse_malloc(*context, sizeof(struct rse_graphics_context_t));
|
||||
ctx_ptr = *context;
|
||||
rse_malloc(ctx_ptr->context, sizeof(struct graphics_context_t));
|
||||
rse_memset(ctx_ptr->context, 0, sizeof(struct graphics_context_t));
|
||||
|
||||
STATUS_CHECK(window_init(context->context->window_handle, &context->context->is_framebuffer_resized));
|
||||
STATUS_CHECK(init_vulkan(context->context));
|
||||
STATUS_CHECK(window_init(&ctx_ptr->context->window_handle, &ctx_ptr->context->is_framebuffer_resized));
|
||||
STATUS_CHECK(init_vulkan(ctx_ptr->context));
|
||||
|
||||
return status;
|
||||
}
|
||||
@@ -94,19 +97,21 @@ void rse_graphics_test_function(struct rse_graphics_context_t* rse_context)
|
||||
// print_text("Hello World!", (struct vec3_t){-1.0f, 0.0f, 0.9f}, 0.3f);
|
||||
|
||||
/* Initialize pipeline */
|
||||
pipeline_builder_init(pipeline);
|
||||
pipeline_builder_init(&pipeline);
|
||||
|
||||
pipeline_add_shader_stage(context, pipeline, "../graphics/shaders/shader.vert.num", VK_SHADER_STAGE_VERTEX_BIT);
|
||||
pipeline_add_shader_stage(context, pipeline, "../graphics/shaders/solid_objects.frag.num", VK_SHADER_STAGE_FRAGMENT_BIT);
|
||||
|
||||
pipeline_add_vertex_input_binding(pipeline, 0, sizeof(struct vertex_t), VK_VERTEX_INPUT_RATE_VERTEX);
|
||||
pipeline_add_vertex_input_binding(pipeline, 1, sizeof(struct vertex_t), VK_VERTEX_INPUT_RATE_INSTANCE);
|
||||
|
||||
pipeline_add_vertex_input_attribute(pipeline, 0, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct vertex_t, pos));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 1, 0, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct vertex_t, color));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 2, 0, VK_FORMAT_R32G32_SFLOAT, offsetof(struct vertex_t, tex_coords));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 3, 1, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct instance_data_t, pos));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 4, 1, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct instance_data_t, rot));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 5, 1, VK_FORMAT_R32_SFLOAT, offsetof(struct instance_data_t, scale));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 6, 1, VK_FORMAT_R32_SFLOAT, offsetof(struct instance_data_t, texture_id));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 0, 1, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct vertex_t, color));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 0, 2, VK_FORMAT_R32G32_SFLOAT, offsetof(struct vertex_t, tex_coords));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 1, 3, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct instance_data_t, pos));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 1, 4, VK_FORMAT_R32G32B32_SFLOAT, offsetof(struct instance_data_t, rot));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 1, 5, VK_FORMAT_R32_SFLOAT, offsetof(struct instance_data_t, scale));
|
||||
pipeline_add_vertex_input_attribute(pipeline, 1, 6, VK_FORMAT_R32_UINT, offsetof(struct instance_data_t, texture_id));
|
||||
|
||||
pipeline_add_dynamic_state(pipeline, VK_DYNAMIC_STATE_VIEWPORT);
|
||||
pipeline_add_dynamic_state(pipeline, VK_DYNAMIC_STATE_SCISSOR);
|
||||
@@ -119,10 +124,13 @@ void rse_graphics_test_function(struct rse_graphics_context_t* rse_context)
|
||||
binding_infos[1].descriptor_type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||
binding_infos[1].stage_flags = VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||
|
||||
pipeline_add_descriptor_pool(context, pipeline, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);
|
||||
pipeline_add_descriptor_pool(context, pipeline, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER);
|
||||
|
||||
pipeline_add_descriptor_layout(context, &binding_infos[0], 1, &ubo_index);
|
||||
pipeline_add_descriptor_layout(context, &binding_infos[1], 1, &sampler_index);
|
||||
|
||||
add_pipeline(context, pipeline, pipeline_infos);
|
||||
add_pipeline(context, pipeline, &pipeline_infos);
|
||||
|
||||
build_pipelines(context, pipeline_infos);
|
||||
|
||||
@@ -135,8 +143,7 @@ rse_err_t rse_graphics_run(struct rse_graphics_context_t* rse_context)
|
||||
rse_err_t status = RSE_ERROR_NO_ERROR;
|
||||
struct graphics_context_t* context = rse_context->context;
|
||||
|
||||
STATUS_CHECK(init_vulkan(context));
|
||||
|
||||
STATUS_CHECK(run_vulkan(context));
|
||||
STATUS_CHECK(window_loop(context));
|
||||
|
||||
deinit_vulkan(context);
|
||||
|
||||
Reference in new issue
Block a user