UNIFORMS({ "uPvm", "uColour" })
)
+mat4 m_projection;
+mat4 m_view;
+mat4 m_pv;
+
int main( int argc, char *argv[] )
{
vg_init( argc, argv, "FishLadder" );
}
-void vg_start(void)
-{
- SHADER_INIT( colour_shader );
-}
-
void vg_update(void)
{
+ // Update camera
+ float ratio = (float)vg_window_y / (float)vg_window_x;
+ float const size = 7.5f;
+ glm_ortho( -size, size, -size*ratio, size*ratio, 0.1f, 100.f, m_projection );
+ glm_mat4_identity( m_view );
+ glm_translate_z( m_view, -10.f );
+ glm_rotate_x( m_view, -1.0f, m_view );
+
+ glm_mat4_mul( m_projection, m_view, m_pv );
}
+GLuint tile_vao;
+GLuint tile_vbo;
+
void vg_render(void)
{
+ glEnable( GL_DEPTH_TEST );
+ glClearColor( 0.94f, 0.94f, 0.94f, 1.0f );
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+
+ SHADER_USE( colour_shader );
+ glUniformMatrix4fv( SHADER_UNIFORM( colour_shader, "uPvm" ), 1, GL_FALSE, (float *)m_pv );
+ glUniform4f( SHADER_UNIFORM( colour_shader, "uColour" ), 0.5f, 0.5f, 0.5f, 1.0f );
+ glBindVertexArray( tile_vao );
+ glDrawArrays( GL_TRIANGLES, 0, 6 );
}
-void vg_ui(void)
+void vg_start(void)
{
+ SHADER_INIT( colour_shader );
+
+ glGenVertexArrays( 1, &tile_vao );
+ glGenBuffers( 1, &tile_vbo );
+
+ float quad_mesh[] =
+ {
+ -0.5f, 0.f, -0.5f,
+ -0.5f, 0.f, 0.5f,
+ 0.5f, 0.f, 0.5f,
+ -0.5f, 0.f, -0.5f,
+ 0.5f, 0.f, 0.5f,
+ 0.5f, 0.f, -0.5f
+ };
+
+ glBindVertexArray( tile_vao );
+ glBindBuffer( GL_ARRAY_BUFFER, tile_vbo );
+ glBufferData
+ (
+ GL_ARRAY_BUFFER,
+ sizeof( quad_mesh ),
+ quad_mesh,
+ GL_STATIC_DRAW
+ );
+
+ glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0 );
+ glEnableVertexAttribArray( 0 );
+ VG_CHECK_GL();
}
void vg_free(void)
{
}
+
+void vg_ui(void)
+{
+
+}
#define STB_DS_IMPLEMENTATION
#include "stb/stb_ds.h"
+#include "cglm/include/cglm/cglm.h"
+
void vg_register_exit( void( *funcptr )(void), const char *name );
void vg_exiterr( const char *strErr );
// Engine main
// ===========================================================================================================
+#ifndef VG_RELEASE
+void vg_checkgl( const char *src_info )
+{
+ GLenum err;
+ while( (err = glGetError()) != GL_NO_ERROR )
+ {
+ vg_error( "(%s) OpenGL Error: #%d\n", src_info, err );
+ }
+}
+
+ #define VG_STRINGIT( X ) #X
+ #define VG_CHECK_GL() vg_checkgl( __FILE__ ":L" VG_STRINGIT(__LINE__) )
+#else
+ #define VG_CHECK_GL()
+#endif
+
+
#define VG_GAMELOOP
void( *vg_on_exit[16] )(void);
vg_ui();
glfwSwapBuffers( vg_window );
+
+ VG_CHECK_GL();
}
}
}
#pragma GCC diagnostic pop
-#define SHADER_UNIFORM( NAME, U ) NAME##_auto_uniforms[ STR_STATIC_INDEX( NAME##_auto_names, U ) ]
-#define SHADER_UNIFORM_NAME( NAME, UID ) NAME##_auto_names[ UID ]
+#define SHADER_USE( NAME ) glUseProgram( NAME##_static_shader.program )
+
+#define SHADER_UNIFORM( NAME, U ) NAME##_shader_uniforms[ STR_STATIC_INDEX( NAME##_shader_names, U ) ]
+#define SHADER_UNIFORM_NAME( NAME, UID ) NAME##_shader_names[ UID ]
#define STR_STATIC_INDEX( LIST, STR ) static_str_index( LIST, vg_list_size(LIST), STR )
#define UNIFORMS(...) __VA_ARGS__