summaryrefslogtreecommitdiff
path: root/src/daw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/daw.c')
-rw-r--r--src/daw.c124
1 files changed, 115 insertions, 9 deletions
diff --git a/src/daw.c b/src/daw.c
index 284bfc7..2d6a764 100644
--- a/src/daw.c
+++ b/src/daw.c
@@ -41,10 +41,8 @@
Instance* GLOBAL_PLATFORM = NULL;
-static Camera default_camera = {
- .pos = {3, 0, 0},
- .dir = {1, 1, 1},
-};
+#define DEFAULT_CAMERA { .pos = {3, 0, 0}, .dir = {1, 1, 1}, }
+static Camera default_camera = DEFAULT_CAMERA;
input_callback_t* callbacks[128];
usize callbacks_len;
@@ -159,8 +157,74 @@ Instance* engine_init(const char* windowtitle, i32 windowWidth, i32 windowHeight
return p;
}
+// TODO: MOVE TO RENDERING
+static f32 default_quad[8] = {
+ -1.0f, -1.0f,
+ 1.0f, -1.0f,
+ 1.0f, 1.0f,
+ -1.0f, 1.0f,
+};
+
+static f32 default_quad_uv[8] = {
+ 0.f, 0.f,
+ 1.f, 0.f,
+ 1.f, 1.f,
+ 0.f, 1.f,
+};
+
+static u8 default_quad_ibo[6] = {
+ 0, 1, 2,
+ 2, 3, 0,
+};
+
+// TODO: CREATE DEFAULT SHADERBUFF
+#define COUNT(a) sizeof(a) / sizeof(a[0])
+static ShaderBuffer shaderbuf[3] = {
+ SHADERBUFFER_NEW(f32, COUNT(default_quad), 2, default_quad, ShaderBuffer_AccessFrequency_static | ShaderBuffer_AccessType_draw | ShaderBuffer_Type_vertexPosition),
+ SHADERBUFFER_NEW(f32, COUNT(default_quad_uv), 2, default_quad_uv, ShaderBuffer_AccessFrequency_static | ShaderBuffer_AccessType_draw),
+ SHADERBUFFER_NEW(u8, COUNT(default_quad_ibo), 3, default_quad_ibo, ShaderBuffer_AccessFrequency_static | ShaderBuffer_AccessType_draw | ShaderBuffer_Type_vertexIndex),
+};
+#undef COUNT
+
+static const char* default_quad_shader_vertex_src =
+"#version 330 core"
+""
+"layout(location = 0) in vec3 vertexPosition_modelspace;"
+"layout(location = 1) in vec2 vertexUV;"
+""
+"out vec2 UV;"
+""
+"void main() {"
+" gl_Position = vec4(vertexPosition_modelspace, 0, 0);"
+""
+" UV = vertexUV;"
+"}";
+
+static const char* default_quad_shader_fragment_src =
+"#version 330 core"
+""
+"// Ouput data"
+"in vec2 UV;"
+"out vec3 color;"
+""
+"uniform sampler2D textureSampler;"
+""
+"void main() {"
+" color = texture(textureSampler, UV).rgb;"
+"}";
+
+
i32 engine_run(Instance* p, StateType initial_state, void* state_arg) {
+ // TODO: MOVE TO INIT
+ Shader default_quad_shaders[] = {
+ compile_shader(default_quad_shader_vertex_src, Shader_Vertex),
+ compile_shader(default_quad_shader_fragment_src, Shader_Fragment),
+ (Shader){0},
+ };
+ default_quad_shaders[2] = compose_shader(default_quad_shaders, 2);
+ RenderObject default_quad_renderobject;
+
if (p == NULL) {
ERROR("Platform is uninitialized.\n");
INFO("initialize with `engine_init`");
@@ -172,6 +236,7 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) {
StateType state = initial_state;
Window* w = p->window;
+ Camera default_renderbuffer_camera = default_camera;
{
u64 state_init_time = get_time();
@@ -187,8 +252,28 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) {
BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), BUFFERPARAMETER_TEXTURE_2D)
};
window_init_renderstack(w, 1, 1, p, t);
- w->render_targets->cam[0] = default_camera;
+ //w->render_targets->cam[0] = &default_renderbuffer_camera;
}
+
+ u32 first_texture = 0;
+
+ for (usize i = 0; i < w->render_targets->buffer_len; i++) {
+ if (BUFFERPARAMETER_GET_TYPE(w->render_targets->buffer_parameters[i]) == BufferType_texture) {
+ first_texture = w->render_targets->buffer[i];
+ break;
+ }
+ }
+
+ default_quad_renderobject = RenderObject_new(
+ // Shader
+ &default_quad_shaders[2],
+ // Texture
+ first_texture,
+ // Vertices
+ shaderbuf,
+ sizeof(shaderbuf) / sizeof(ShaderBuffer)
+ );
+
INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state],
(get_time() - state_init_time));
}
@@ -248,15 +333,36 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) {
// Create only 1 additional framebuffer, in addition to the default
// one. This is used to render a texture that is represented as a quad
// on the default framebuffer.
- FramebufferParameters p[] = {
+ FramebufferParameters fb_params[] = {
{.num_attached_buffers = 1, {200,200}},
};
u32 t[] = {
BUFFERPARAMETER_SET_PARAMETER(BUFFERPARAMETER_SET_TYPE(0, BufferType_texture), BUFFERPARAMETER_TEXTURE_2D)
};
- window_init_renderstack(w, 1, 1, p, t);
- w->render_targets->cam[0] = default_camera;
+ window_init_renderstack(w, 1, 1, fb_params, t);
+
+ //w->render_targets->cam[0] = &default_camera;
}
+
+ u32 first_texture = 0;
+
+ for (usize i = 0; i < w->render_targets->buffer_len; i++) {
+ if (BUFFERPARAMETER_GET_TYPE(w->render_targets->buffer_parameters[i]) == BufferType_texture) {
+ first_texture = w->render_targets->buffer[i];
+ break;
+ }
+ }
+
+ default_quad_renderobject = RenderObject_new(
+ // Shader
+ &default_quad_shaders[2],
+ // Texture
+ first_texture, /*TODO*/
+ // Vertices
+ shaderbuf,
+ sizeof(shaderbuf) / sizeof(ShaderBuffer)
+ );
+
INFO("Initializing state \"%s\" took %.1fns", StateTypeStr[state],
(get_time() - state_init_time));
}
@@ -265,7 +371,7 @@ i32 engine_run(Instance* p, StateType initial_state, void* state_arg) {
/* Render */
const u64 rendertime_begin = get_time();
render_begin(p->window);
- render_present(p->window);
+ render_present(p->window, &default_quad_renderobject);
const u64 rendertime_dt = get_time() - rendertime_begin;
/* Regulate FPS */