idk
This commit is contained in:
parent
e7c88c1c89
commit
5968ca324e
4 changed files with 90 additions and 2 deletions
|
@ -11,7 +11,7 @@ typedef struct g_renderer {
|
||||||
} g_renderer;
|
} g_renderer;
|
||||||
|
|
||||||
typedef struct g_renderer_object {
|
typedef struct g_renderer_object {
|
||||||
sg_bindings bind;
|
sg_bindings* bind;
|
||||||
sg_pipeline pipeline;
|
sg_pipeline pipeline;
|
||||||
} g_renderer_object;
|
} g_renderer_object;
|
||||||
|
|
||||||
|
|
23
shaders/simple.glsl
Normal file
23
shaders/simple.glsl
Normal 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
|
||||||
|
|
|
@ -9,9 +9,9 @@ void g_renderer_begin(g_renderer* renderer) {
|
||||||
void g_renderer_draw(g_renderer* renderer, g_renderer_object object, u32 elements) {
|
void g_renderer_draw(g_renderer* renderer, g_renderer_object object, u32 elements) {
|
||||||
if(renderer->bound_pipeline_id != object.pipeline.id) {
|
if(renderer->bound_pipeline_id != object.pipeline.id) {
|
||||||
g_pipeline_bind(renderer, object.pipeline);
|
g_pipeline_bind(renderer, object.pipeline);
|
||||||
sg_apply_bindings(&object.bind);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sg_apply_bindings(object.bind);
|
||||||
sg_draw(0, elements, 1);
|
sg_draw(0, elements, 1);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
65
src/main.c
65
src/main.c
|
@ -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/graphics/renderer.h>
|
||||||
#include <gear/camera.h>
|
#include <gear/camera.h>
|
||||||
#include <gear/ui/gui.h>
|
#include <gear/ui/gui.h>
|
||||||
#include <gear/ui/console.h>
|
#include <gear/ui/console.h>
|
||||||
#include <gear/resources.h>
|
#include <gear/resources.h>
|
||||||
|
#include <gear/graphics/models.h>
|
||||||
|
#include <shaders/transform.glsl.h>
|
||||||
|
|
||||||
#include <sokol/sokol_app.h>
|
#include <sokol/sokol_app.h>
|
||||||
#include <sokol/sokol_gfx.h>
|
#include <sokol/sokol_gfx.h>
|
||||||
#include <sokol/sokol_log.h>
|
#include <sokol/sokol_log.h>
|
||||||
#include <sokol/sokol_glue.h>
|
#include <sokol/sokol_glue.h>
|
||||||
|
|
||||||
|
#include <stb/stb_image.h>
|
||||||
|
|
||||||
#include <log.c/log.h>
|
#include <log.c/log.h>
|
||||||
|
|
||||||
|
#include <gear/graphics/textures.h>
|
||||||
|
|
||||||
g_renderer* renderer;
|
g_renderer* renderer;
|
||||||
g_camera* camera;
|
g_camera* camera;
|
||||||
g_gui* gui;
|
g_gui* gui;
|
||||||
|
g_model* model;
|
||||||
|
sg_pipeline pipeline;
|
||||||
|
sg_bindings* bind;
|
||||||
|
sg_attachments attachments;
|
||||||
|
|
||||||
void init() {
|
void init() {
|
||||||
sg_setup(&(sg_desc){
|
sg_setup(&(sg_desc){
|
||||||
|
@ -29,12 +44,62 @@ void init() {
|
||||||
for(sl_vec_it(layer, gui->layers)) {
|
for(sl_vec_it(layer, gui->layers)) {
|
||||||
log_info(" %s", (*layer)->name);
|
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() {
|
void frame() {
|
||||||
g_gui_update(gui);
|
g_gui_update(gui);
|
||||||
|
|
||||||
g_renderer_begin(renderer);
|
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_gui_render(sapp_width(), sapp_height());
|
||||||
g_renderer_end(renderer);
|
g_renderer_end(renderer);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue