summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--graph.c50
-rw-r--r--include/graph.h7
-rw-r--r--mino.c1
4 files changed, 55 insertions, 9 deletions
diff --git a/Makefile b/Makefile
index 134a932..d9cd93f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,8 +1,8 @@
.POSIX:
-CC := clang
-CFLAGS := -std=c11 -Wall -Wextra -Wshadow -Iinclude $(shell sdl2-config --cflags)
+CC := clang
+CFLAGS := -std=c11 -Wall -Wextra -Wshadow -Iinclude $(shell sdl2-config --cflags)
LDFLAGS :=
-LDLIBS := -ldl $(shell sdl2-config --libs)
+LDLIBS := -ldl $(shell sdl2-config --libs)
all: mino
mino: glad.o graph.o mino.o
mino.o: mino.c include/mino.h
diff --git a/graph.c b/graph.c
index 1063a50..fba4106 100644
--- a/graph.c
+++ b/graph.c
@@ -6,20 +6,22 @@
#include"graph.h"
_ SDL_Window*win;
-_ SDL_GLContext ctx;
_ U32 win_w=1280;
_ U32 win_h=720;
+_ SDL_GLContext ctx;
+
_ V on_err(IM C*d){die("Could not %s: %s\n",d,SDL_GetError());}
V graph_init(V){SDL_version sdl_vh,sdl_vl;
Q(SDL_Init(SDL_INIT_VIDEO),on_err("init sdl2"))
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3),
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,3),
- SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_CORE);
- N(win=SDL_CreateWindow("mino",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,win_w,win_h,SDL_WINDOW_RESIZABLE|SDL_WINDOW_OPENGL),on_err("create window"))
+ SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK,SDL_GL_CONTEXT_PROFILE_CORE),
+ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
+ N(win=SDL_CreateWindow("mino",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,win_w,win_h,SDL_WINDOW_OPENGL),on_err("create window"))
N(ctx=SDL_GL_CreateContext(win),on_err("create OpenGL context"))
- N(gladLoadGLLoader((GLADloadproc)SDL_GL_GetProcAddress),on_err("load GL"))
- SDL_GL_SetSwapInterval(-1);
+ N(gladLoadGLLoader(SDL_GL_GetProcAddress),on_err("load GL"))
+ SDL_GL_SetSwapInterval(1);
SDL_VERSION(&sdl_vh)SDL_GetVersion(&sdl_vl);
fprintf(stderr,
@@ -34,3 +36,41 @@ V graph_init(V){SDL_version sdl_vh,sdl_vl;
glGetString(GL_VERSION),glGetString(GL_VENDOR),glGetString(GL_RENDERER));}
V graph_deinit(V){SDL_GL_DeleteContext(ctx),SDL_DestroyWindow(win),SDL_Quit();}
+V graph_events(V){SDL_Event ev;WH(SDL_PollEvent(&ev),Q(SDL_QUIT==ev.type,exit(0)))}
+V graph_before(V){glClearColor(1.0,0.75,0.8,1.0),glClear(GL_COLOR_BUFFER_BIT);}
+V graph_after(V){SDL_GL_SwapWindow(win);}
+
+V graph_triangle(V){
+ IM C*vert_shader_src="#version 330 core\n"
+ "layout(location=0)in vec3 pos;void main(){gl_Position=vec4(pos.x,pos.y,pos.z,1.0);}";
+ U32 vert_shader=glCreateShader(GL_VERTEX_SHADER);
+ glShaderSource(vert_shader,1,&vert_shader_src,NULL),glCompileShader(vert_shader);
+ I success;
+ C info_log[512];
+ glGetShaderiv(vert_shader,GL_COMPILE_STATUS,&success);
+ N(success,die("error compiling vert shader"))
+
+ IM C*frag_shader_src = "#version 330 core\n"
+ "out vec4 Colour;void main(){Colour=vec4(1.0, 0.5, 0.2, 1.0);}";
+ U32 frag_shader=glCreateShader(GL_FRAGMENT_SHADER);
+ glShaderSource(frag_shader,1,&frag_shader_src,NULL),glCompileShader(frag_shader);
+ glGetShaderiv(vert_shader,GL_COMPILE_STATUS,&success);
+ N(success,die("error compiling frag shader"))
+
+ U32 shader_program=glCreateProgram();
+ glAttachShader(shader_program,vert_shader),glAttachShader(shader_program,frag_shader),
+ glLinkProgram(shader_program);//glDeleteShader(vert_shader),glDeleteShader(frag_shader);
+ glGetProgramiv(shader_program,GL_LINK_STATUS,&success);
+ N(success,glGetProgramInfoLog(shader_program,512,0,info_log),die("error linking: %s"))
+
+ IM F32 verts[]={
+ -0.5,-0.5,0.0,
+ 0.5,-0.5,0.0,
+ 0.0, 0.5,0.0};
+ U32 vbo,vao;
+ glGenBuffers(1,&vbo), glBindBuffer(GL_ARRAY_BUFFER,vbo),
+ glGenVertexArrays(1,&vao), glBindVertexArray(vao);
+ glBufferData(GL_ARRAY_BUFFER,SZ verts,verts,GL_STATIC_DRAW),
+ glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*SZ verts[0],0),
+ glEnableVertexAttribArray(0),glUseProgram(shader_program),
+ glBindVertexArray(vao),glDrawArrays(GL_TRIANGLES,0,3);}
diff --git a/include/graph.h b/include/graph.h
index 59c0655..b2a9ffa 100644
--- a/include/graph.h
+++ b/include/graph.h
@@ -1,6 +1,11 @@
#ifndef MINO_GRAPH_H
#define MINO_GRAPH_H
X V graph_init(V);
-X V graph_loop(V);
X V graph_deinit(V);
+X V graph_events(V);
+/*actual rendering*/
+X V graph_before(V);
+X V graph_after(V);
+/*shapes*/
+X V graph_triangle(V);
#endif
diff --git a/mino.c b/mino.c
index 0f3b55d..1839c36 100644
--- a/mino.c
+++ b/mino.c
@@ -11,4 +11,5 @@ V del(V*p){free(p);}
I main(I ac,C**av){(V)ac,(V)av;
graph_init();
atexit(graph_deinit);
+ WH(1,graph_events(),graph_before(),graph_triangle(),graph_after());
R 0;}