diff --git a/build.bat b/build.bat index 7178189..574b43f 100644 --- a/build.bat +++ b/build.bat @@ -1,5 +1,5 @@ @ECHO OFF -cl build.c src/str.c src/types.c /Iinclude /nologo && del *.obj && build.exe && del build.exe && build\gsa_simple.exe +cl build.c src/str.c src/types.c /Iinclude /nologo && del *.obj && build.exe && del build.exe && build\simple.exe EXIT /B %ERRORLEVEL% diff --git a/build.c b/build.c index e767c5e..09068e1 100644 --- a/build.c +++ b/build.c @@ -84,6 +84,7 @@ int main(int argc, char *argv[]) { "/I. "); sys("copy gsa_simple.exe test.exe"); sys("skip ca1 ../example_data gsa_simple.exe"); + sys("skip ca1 ../example_data simple.exe"); sys("del *.obj"); diff --git a/examples/simple.c b/examples/simple.c index 3b696e6..e8c5bdd 100644 --- a/examples/simple.c +++ b/examples/simple.c @@ -1,13 +1,18 @@ #include -void tick() { +void render() { } int main(int argc, char *argv[]) { struct sw_window *win; + struct sw_renderer2d *ren; + + sw_init(argc, argv); win = sw_window_create(sw_vec2i(1280, 720), "example", 0); - sw_window_run(win, tick); + ren = sw_renderer2d_create(); + sw_window_add_renderer(win, ren->renderer, render); + sw_window_run(win); return 0; } diff --git a/include/renderer2d.h b/include/renderer2d.h index c9058de..e97c5cd 100644 --- a/include/renderer2d.h +++ b/include/renderer2d.h @@ -3,8 +3,11 @@ #include "shader.h" +struct sw_renderer; + struct sw_renderer2d { struct sw_shaderprogram shader; + struct sw_renderer *renderer; }; struct sw_renderer2d *sw_renderer2d_create(); diff --git a/include/skunkworks.h b/include/skunkworks.h index f8108ce..427793b 100644 --- a/include/skunkworks.h +++ b/include/skunkworks.h @@ -7,6 +7,7 @@ #include "gamepad.h" #include "image32.h" #include "image8.h" +#include "renderer2d.h" #include "skip.h" #include "str.h" #include "types.h" diff --git a/src/renderer2d.c b/src/renderer2d.c index 8a0094c..57a49b1 100644 --- a/src/renderer2d.c +++ b/src/renderer2d.c @@ -1,3 +1,48 @@ #include "renderer2d.h" +#include "renderer.h" +#include "shader.h" +#include "skip.h" -struct sw_renderer2d *sw_renderer2d_create(){}; +#include + +#include "gl.h" + +struct vert { + f32 x, y, z; +}; + +static void r_enter(struct sw_window *win, void *data); +static void r_exit(struct sw_window *win, void *data); + +struct sw_renderer2d *sw_renderer2d_create() { + struct sw_renderer2d *ren; + u8 *frag, *vert; + + ren = malloc(sizeof(struct sw_renderer2d)); + ren->renderer = sw_renderer_create(ren, r_enter, r_exit); + + frag = sw_skip_get_string(sw_skip_self, "renderer2d_frag.glsl"); + vert = sw_skip_get_string(sw_skip_self, "renderer2d_vert.glsl"); + + ren->shader = sw_shaderprogram_create(vert, 0, frag, 0, 0); + + return ren; +}; + +static void r_enter(struct sw_window *win, void *data) { + struct sw_renderer2d *ren; + + ren = data; + sw_shaderprogram_use(ren->shader); + + glBegin(GL_TRIANGLES); + + glVertex2i(0, 0); + glVertex2i(1, 0); + glVertex2i(0, 1); + + glEnd(); +} + +static void r_exit(struct sw_window *win, void *data) { +} diff --git a/src/renderer2d_frag.glsl b/src/renderer2d_frag.glsl new file mode 100644 index 0000000..f63c9f0 --- /dev/null +++ b/src/renderer2d_frag.glsl @@ -0,0 +1,7 @@ +#version 460 + +layout(location = 0) out vec4 color; + +void main() { + color = vec4(0.1, 0.2, 0.3, 1.0); +} diff --git a/src/renderer2d_vert.glsl b/src/renderer2d_vert.glsl new file mode 100644 index 0000000..5890878 --- /dev/null +++ b/src/renderer2d_vert.glsl @@ -0,0 +1,7 @@ +#version 460 + +layout(location = 0) in vec3 pos; + +void main() { + gl_Position = vec4(pos, 1.0); +} diff --git a/src/shaders.c b/src/shaders.c index 1ec1825..2132d1f 100644 --- a/src/shaders.c +++ b/src/shaders.c @@ -7,7 +7,6 @@ struct sw_shaderprogram sw_shaders_scale; void sw_shaders_static_init() { u8 *vert_copy, *frag_copy, *frag_scale; - u32 size; sw_log("initialising shaders"); vert_copy = sw_skip_get_string(sw_skip_self, "shader_copy_vert.glsl");