transparent-cube

Minimal cross-platform native/wasm graphics example.
git clone git://git.amin.space/transparent-cube.git
Log | Files | Refs | README | LICENSE

commit 0638febb6ce2ac15f7d8acece64f19739270bec9
parent 038e30e7e25f9d000f95ff3de3e7d2db8134c2eb
Author: amin <dev@aminmesbah.com>
Date:   Sun, 23 Jun 2019 07:51:30 +0000

Render a simple triangle to debug webgl problems

FossilOrigin-Name: a1cc49a21984d9c2ada637711ebe8e433073da9da77cefc8686b0489c9430ad5
Diffstat:
Mshader/cube_f.glsl | 23+++++++++++++++++------
Mshader/cube_v.glsl | 30+++++++++++++++++++++---------
Msrc/game.c | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++--
3 files changed, 92 insertions(+), 17 deletions(-)

diff --git a/shader/cube_f.glsl b/shader/cube_f.glsl @@ -1,14 +1,25 @@ #version 300 es - precision highp float; -uniform float alpha; - -in vec3 color; +in vec4 vertex_color; -out vec4 frag_color; +out vec4 color; void main() { - frag_color = vec4(color, alpha); + color = vertex_color; } +//#version 300 es +// +//precision highp float; +// +//uniform float alpha; +// +//in vec3 color; +// +//out vec4 frag_color; +// +//void main() +//{ +// frag_color = vec4(color, alpha); +//} diff --git a/shader/cube_v.glsl b/shader/cube_v.glsl @@ -1,16 +1,28 @@ #version 300 es -layout (location = 0) in vec3 a_position; -layout (location = 1) in vec3 a_color; +layout (location = 0) in vec2 position; +layout (location = 1) in vec3 color; -uniform mat4 model; -uniform mat4 view; -uniform mat4 projection; - -out vec3 color; +out vec4 vertex_color; void main() { - gl_Position = projection * view * model * vec4(a_position, 1.0f); - color = a_color; + gl_Position = vec4(position, 0.0f, 1.0f); + vertex_color = vec4(color, 1.0f); } +//#version 300 es +// +//layout (location = 0) in vec3 a_position; +//layout (location = 1) in vec3 a_color; +// +//uniform mat4 model; +//uniform mat4 view; +//uniform mat4 projection; +// +//out vec3 color; +// +//void main() +//{ +// gl_Position = projection * view * model * vec4(a_position, 1.0f); +// color = a_color; +//} diff --git a/src/game.c b/src/game.c @@ -8,6 +8,45 @@ void game_init(struct GameState *game_state, u32 screen_width, u32 screen_height) { +#if 1 + { + GLfloat triangle_vertices[] = { + // positions // colors + -0.5f, -0.5f, 1.0f, 0.0f, 0.0f, + 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.5f, 0.0f, 0.0f, 1.0f, + }; + u32 elements[] = { + 0, 1, 2, + }; + + GLuint VBO; + GLuint VAO; + glGenVertexArrays(1, &VAO); + glGenBuffers(1, &VBO); + + glBindVertexArray(VAO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, sizeof(triangle_vertices), triangle_vertices, GL_STATIC_DRAW); + + // positions + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0); + glEnableVertexAttribArray(0); + + // colors + glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(2 * sizeof(GLfloat))); + glEnableVertexAttribArray(1); + + u32 cube_ebo; + glGenBuffers(1, &cube_ebo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cube_ebo); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW); + + game_state->cube_vao = VAO; + game_state->cube_vbo = VBO; + game_state->cube_ebo = cube_ebo; + } +#else // load cube vertex data { f32 cube_vertices[] = { @@ -57,6 +96,7 @@ void game_init(struct GameState *game_state, u32 screen_width, u32 screen_height game_state->cube_vbo = cube_vbo; game_state->cube_ebo = cube_ebo; } +#endif // game_shader_load { @@ -72,15 +112,26 @@ void game_init(struct GameState *game_state, u32 screen_width, u32 screen_height game_state->cube_shader = main_shader; } - glEnable(GL_DEPTH_TEST); + //glEnable(GL_DEPTH_TEST); #ifndef GAME_WEBGL - glEnable(GL_MULTISAMPLE); + //glEnable(GL_MULTISAMPLE); #endif } void game_update_and_render(struct GameState *game_state, float dt, u32 screen_width, u32 screen_height) { +#if 1 + { + glClearColor(0.1f, 0.1f, 0.1f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + + shader_use(&game_state->cube_shader); + + //glDrawArrays(GL_TRIANGLES, 0, 3); + glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0); + } +#else glDepthMask(GL_TRUE); glClearColor(0.2f, 0.2f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -124,6 +175,7 @@ void game_update_and_render(struct GameState *game_state, float dt, u32 screen_w glEnable(GL_DEPTH_TEST); glDisable(GL_BLEND); } +#endif } void game_cleanup(struct GameState *game_state)