This commit is contained in:
sam 2024-09-02 12:40:20 +12:00
parent e7c88c1c89
commit 5968ca324e
4 changed files with 90 additions and 2 deletions

View file

@ -11,7 +11,7 @@ typedef struct g_renderer {
} g_renderer;
typedef struct g_renderer_object {
sg_bindings bind;
sg_bindings* bind;
sg_pipeline pipeline;
} g_renderer_object;

23
shaders/simple.glsl Normal file
View file

@ -0,0 +1,23 @@
@vs vs
in vec4 pos;
in vec4 color0;
out vec4 color;
void main() {
gl_Position = pos;
color = color0;
}
@end
@fs fs
in vec4 color;
out vec4 frag_color;
void main() {
frag_color = color;
}
@end
@program simple vs fs

View file

@ -9,9 +9,9 @@ void g_renderer_begin(g_renderer* renderer) {
void g_renderer_draw(g_renderer* renderer, g_renderer_object object, u32 elements) {
if(renderer->bound_pipeline_id != object.pipeline.id) {
g_pipeline_bind(renderer, object.pipeline);
sg_apply_bindings(&object.bind);
}
sg_apply_bindings(object.bind);
sg_draw(0, elements, 1);
};

View file

@ -1,19 +1,34 @@
#include "HandmadeMath/HandmadeMath.h"
#include "gear/base.h"
#include "gear/graphics/pipeline.h"
#include "gear/images.h"
#include "slibs/slibs.h"
#include <gear/graphics/renderer.h>
#include <gear/camera.h>
#include <gear/ui/gui.h>
#include <gear/ui/console.h>
#include <gear/resources.h>
#include <gear/graphics/models.h>
#include <shaders/transform.glsl.h>
#include <sokol/sokol_app.h>
#include <sokol/sokol_gfx.h>
#include <sokol/sokol_log.h>
#include <sokol/sokol_glue.h>
#include <stb/stb_image.h>
#include <log.c/log.h>
#include <gear/graphics/textures.h>
g_renderer* renderer;
g_camera* camera;
g_gui* gui;
g_model* model;
sg_pipeline pipeline;
sg_bindings* bind;
sg_attachments attachments;
void init() {
sg_setup(&(sg_desc){
@ -29,12 +44,62 @@ void init() {
for(sl_vec_it(layer, gui->layers)) {
log_info(" %s", (*layer)->name);
}
g_vertex vertices[] = {
{ 1.0f, 1.0f, 0.0f, G_WHITE, 1.0f * 32767, 1.0f * 32767 }, // top right
{ 1.0f, -1.0f, 0.0f, G_WHITE, 1.0f * 32767, 0.0f * 32767 }, // bottom right
{ -1.0f, -1.0f, 0.0f, G_WHITE, 0.0f * 32767, 0.0f * 32767 }, // bottom left
{ -1.0f, 1.0f, 0.0f, G_WHITE, 0.0f * 32767, 1.0f * 32767 } // top left
};
uint32_t indices[] = {
0, 1, 3,
1, 2, 3
};
g_vertex_vec vertices_vec = { 0 };
g_index_vec indices_vec = { 0 };
sl_vec_from_arr(vertices_vec, vertices);
sl_vec_from_arr(indices_vec, indices);
model = g_model_create(&vertices_vec, &indices_vec);
bind = calloc(1, sizeof(sg_bindings));
bind->vertex_buffers[0] = model->vertex_buffer;
bind->index_buffer = model->index_buffer;
g_texture* texture = g_texture_create_filtered(g_image_default(), SG_FILTER_NEAREST, SG_FILTER_NEAREST);
bind->fs.images[SLOT_tex] = texture->image;
bind->fs.samplers[SLOT_smp] = texture->sampler;
sg_shader shd = sg_make_shader(transform_shader_desc(sg_query_backend()));
pipeline = g_pipeline_create(shd, (sg_vertex_layout_state){
.attrs = {
[ATTR_vs_pos].format = SG_VERTEXFORMAT_FLOAT3,
[ATTR_vs_color0].format = SG_VERTEXFORMAT_UBYTE4N,
[ATTR_vs_texcoord0].format = SG_VERTEXFORMAT_SHORT2N,
}
});
}
void frame() {
g_gui_update(gui);
g_renderer_begin(renderer);
g_pipeline_bind(renderer, pipeline);
vs_params_t vs_params = {
.mvp = HMM_Mul(g_camera_matrix(camera), HMM_Rotate_LH(HMM_AngleDeg(45.0f), HMM_V3(1.0f, 0.0f, 0.0f))),
.texture_scale = HMM_V2(1.0f, 1.0f)
};
sg_apply_uniforms(SG_SHADERSTAGE_VS, SLOT_vs_params, SG_RANGE_REF(vs_params));
g_renderer_draw(renderer, (g_renderer_object){
.pipeline = pipeline,
.bind = bind
}, model->indices.size);
g_gui_render(sapp_width(), sapp_height());
g_renderer_end(renderer);
}