square rendering
[fishladder.git] / fishladder.c
1 // Copyright (C) 2021 Harry Godden (hgn) - All Rights Reserved
2
3 //#define VG_STEAM
4 #include "vg/vg.h"
5
6 SHADER_DEFINE( shader_tile_colour,
7
8 // VERTEX
9 "layout (location=0) in vec2 a_co;"
10 "uniform mat3 uPv;"
11 "uniform vec2 uOffset;"
12 ""
13 "void main()"
14 "{"
15 "gl_Position = vec4( uPv * vec3( a_co + uOffset, 1.0 ), 1.0 );"
16 "}",
17
18 // FRAGMENT
19 "out vec4 FragColor;"
20 "uniform vec4 uColour;"
21 ""
22 "void main()"
23 "{"
24 "FragColor = uColour;"
25 "}"
26 ,
27 UNIFORMS({ "uPv", "uOffset", "uColour" })
28 )
29
30 m3x3f m_projection;
31 m3x3f m_view;
32 m3x3f m_mdl;
33
34 struct world
35 {
36 struct cell
37 {
38 u32 state;
39 }
40 *data;
41
42 u32 w, h;
43
44 GLuint tile_vao;
45 GLuint tile_vbo;
46 } world = { .w = 1, .h = 1 };
47
48 int main( int argc, char *argv[] )
49 {
50 vg_init( argc, argv, "FishLadder" );
51 }
52
53 void vg_register(void)
54 {
55 SHADER_INIT( shader_tile_colour );
56 }
57
58 void vg_start(void)
59 {
60 glGenVertexArrays( 1, &world.tile_vao );
61 glGenBuffers( 1, &world.tile_vbo );
62
63 float quad_mesh[] =
64 {
65 0.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f,
66 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f
67 };
68
69 glBindVertexArray( world.tile_vao );
70 glBindBuffer( GL_ARRAY_BUFFER, world.tile_vbo );
71 glBufferData
72 (
73 GL_ARRAY_BUFFER,
74 sizeof( quad_mesh ),
75 quad_mesh,
76 GL_STATIC_DRAW
77 );
78
79 glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), (void*)0 );
80 glEnableVertexAttribArray( 0 );
81
82 VG_CHECK_GL();
83 }
84
85 void vg_free(void)
86 {
87 glDeleteVertexArrays( 1, &world.tile_vao );
88 glDeleteBuffers( 1, &world.tile_vbo );
89 }
90
91 void vg_update(void)
92 {
93 float ratio = (float)vg_window_y / (float)vg_window_x;
94 float const size = 7.5f;
95
96 m3x3_projection( m_projection, -size, size, size*ratio, -size*ratio );
97 m3x3_identity( m_view );
98 m3x3_mul( m_projection, m_view, vg_pv );
99 vg_projection_update();
100 }
101
102 void vg_render(void)
103 {
104 glViewport( 0,0, vg_window_x, vg_window_y );
105
106 glDisable( GL_DEPTH_TEST );
107 glClearColor( 0.01f, 0.01f, 0.01f, 1.0f );
108 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
109
110 glBindVertexArray( world.tile_vao );
111 SHADER_USE( shader_tile_colour );
112 glUniformMatrix3fv( SHADER_UNIFORM( shader_tile_colour, "uPv" ), 1, GL_FALSE, (float *)vg_pv );
113
114 for( int y = 0; y < world.h; y ++ )
115 {
116 for( int x = 0; x < world.w; x ++ )
117 {
118 glUniform2f( SHADER_UNIFORM( shader_tile_colour, "uOffset" ), (float)x, (float)y );
119 glUniform4f( SHADER_UNIFORM( shader_tile_colour, "uColour" ), 1.0f, 1.0f, 1.0f, 1.0f );
120 glDrawArrays( GL_TRIANGLES, 0, 6 );
121 }
122 }
123 }
124
125 void vg_ui(void){}