From f1d602f5dcf862907affd1479eb3b2d132d7d639 Mon Sep 17 00:00:00 2001 From: kitty piapiac Date: Tue, 18 Apr 2023 12:29:55 -0700 Subject: scenes a bit crude and untested --- Makefile | 6 ++++-- include/scene.h | 6 ++++++ mino.c | 42 +++++------------------------------------- scene-title.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ scene.c | 4 ++++ 5 files changed, 68 insertions(+), 39 deletions(-) create mode 100644 include/scene.h create mode 100644 scene-title.c create mode 100644 scene.c diff --git a/Makefile b/Makefile index e8dfb62..b43e2c6 100644 --- a/Makefile +++ b/Makefile @@ -4,10 +4,12 @@ CFLAGS := -std=c11 -g -O0 -Wall -Wextra -Wshadow -Iinclude $(shell sdl2-config LDFLAGS := LDLIBS := -ldl -lm $(shell sdl2-config --libs) $(shell pkg-config --libs cglm) all: mino -mino: glad.o tex.o graph.o mino.o +mino: glad.o tex.o graph.o scene.o scene-title.o mino.o mino.o: mino.c include/mino.h +scene.o: scene.c include/scene.h +scene-title.o: scene-title.c graph.o: graph.c include/graph.h tex.o: tex.c include/tex.h glad.o: glad.c include/glad/glad.h clean: - rm -rf mino mino.o graph.o tex.o glad.o + rm -rf mino mino.o scene-title.o scene.o graph.o tex.o glad.o diff --git a/include/scene.h b/include/scene.h new file mode 100644 index 0000000..fb4f7c1 --- /dev/null +++ b/include/scene.h @@ -0,0 +1,6 @@ +#ifndef MINO_SCENE_H +#define MINO_SCENE_H +typedef struct scene Scene; +struct scene{IM C*n;Scene*(*f)(V);}; +X V scene_run(Scene*); +#endif diff --git a/mino.c b/mino.c index be07e7f..8d02bc6 100644 --- a/mino.c +++ b/mino.c @@ -4,47 +4,15 @@ #include #include"mino.h" #include"graph.h" +#include"scene.h" NR V die(IM C*f,...)VA(f,vfprintf(stderr,f,ap),fputc('\n',stderr),exit(1)) V*make(Uz z){V*p;N(p=malloc(z), die("oom"))R p;} V*remk(V*p,Uz z){N(p=realloc(p,z),die("oom"))R p;} V del(V*p){free(p);} -_ IM C shader_tex_vert[]=GRAPH_GLSL( - layout (location=0) in vec3 pos; - layout (location=1) in vec3 col; - layout (location=2) in vec2 tex; - out vec3 Col; - out vec2 Tex; - uniform mat4 proj; - uniform mat4 model; - void main(){gl_Position=proj*model*vec4(pos,1.0);Col=col;Tex=tex;}); - -_ IM C shader_tex_frag[]=GRAPH_GLSL( - out vec4 Frag; - in vec3 Col; - in vec2 Tex; - uniform sampler2D buf0; - void main(){Frag=texture(buf0,Tex);}); - -_ U32 shader_tex; - -_ mat4 win_proj; -_ V shader_tex_init(V){ - shader_tex=graph_shader_create(shader_tex_vert,shader_tex_frag), - graph_shader_use(shader_tex); - graph_shader_setM4("proj",win_proj), - graph_shader_setI("buf0",0);} - -I main(I ac,C**av){(V)ac,(V)av;U32 cat; - graph_init(); - atexit(graph_deinit); - shader_tex_init(); - cat=graph_tex_create("res/tex/cat.jpg"); - WH(1,graph_before(),graph_events(); - glm_ortho(0,graph_win_w,0,graph_win_h,0,4,win_proj), - graph_shader_setM4("proj",win_proj), - graph_tex_use(cat,0), - graph_quad_xywh(200,200,200,200), - graph_after()); +X Scene scene_title; +I main(I ac,C**av){(V)ac,(V)av; + graph_init(),atexit(graph_deinit); + scene_run(&scene_title); R 0;} diff --git a/scene-title.c b/scene-title.c new file mode 100644 index 0000000..64429c5 --- /dev/null +++ b/scene-title.c @@ -0,0 +1,49 @@ +/*2d title screen*/ + +#include +#include +#include"mino.h" +#include"graph.h" +#include"scene.h" + +_ mat4 win_proj; + +_ U32 shader_tex; +_ IM C shader_tex_vert[]=GRAPH_GLSL( + layout (location=0) in vec3 pos; + layout (location=1) in vec3 col; + layout (location=2) in vec2 tex; + out vec3 Col; + out vec2 Tex; + uniform mat4 proj; + uniform mat4 model; + void main(){gl_Position=proj*model*vec4(pos,1.0);Col=col;Tex=tex;}); +_ IM C shader_tex_frag[]=GRAPH_GLSL( + out vec4 Frag; + in vec3 Col; + in vec2 Tex; + uniform sampler2D buf; + void main(){Frag=texture(buf,Tex);}); +_ V shader_tex_init(V){ + shader_tex=graph_shader_create(shader_tex_vert,shader_tex_frag), + graph_shader_use(shader_tex), + graph_shader_setM4("proj",win_proj), + graph_shader_setI("buf",0);} + +_ U32 tex_cat; +_ V title_init(V){ + glm_ortho(0,graph_win_w,0,graph_win_h,0,4,win_proj), + shader_tex_init(); + tex_cat=graph_tex_create("res/tex/cat.jpg");} + +_ V title_loop(V){/*prelude*/graph_before(),graph_events(); + glm_ortho(0,graph_win_w,0,graph_win_h,0,4,win_proj), + /*interlude*/ + graph_shader_use(shader_tex),graph_shader_setM4("proj",win_proj), + graph_tex_use(tex_cat,0), + graph_quad_xywh(graph_win_w/2.0,graph_win_h/2.0,256,256), + /*postlude*/ + graph_after();} + +_ Scene*title_run(V){title_init();WH(1,title_loop());R 0;} +Scene scene_title={"title",title_run}; diff --git a/scene.c b/scene.c new file mode 100644 index 0000000..5894b0f --- /dev/null +++ b/scene.c @@ -0,0 +1,4 @@ +#include +#include"mino.h" +#include"scene.h" +V scene_run(Scene*x){WH(x,printf("Scene %s\n",x->n),x=x->f();)} -- cgit v1.2.3