From 5c535bc176d23b5e6878e9f5e0b5be6edb7914fb Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Fri, 5 Dec 2025 10:09:21 -0600 Subject: [PATCH] add font rendering --- Makefile | 8 +- blend/block.blend | Bin 452766 -> 467478 bytes blend/plane.blend | Bin 0 -> 464638 bytes include/font/ter_u32n.data.h | 19 ++++ include/math/transform.hpp | 2 +- include/math/vec.hpp | 2 +- include/model/plane.h | 18 ++++ include/model/plane.obj | 16 ++++ include/render.hpp | 7 ++ include/shader/font.fp.glsl.h | 19 ++++ include/shader/font.vp.glsl.h | 19 ++++ include/update.hpp | 13 +++ rebuild_models.sh | 1 + src/collision.cpp | 168 ++++++++++++++++++++++++++++------ src/font/ter_u32n.data | Bin 0 -> 65536 bytes src/main.c | 62 +++++++++++-- src/opengl.c | 21 +++++ src/opengl.h | 6 ++ src/render.cpp | 59 +++++++++--- src/shader/font.fp.glsl | 15 +++ src/shader/font.vp.glsl | 26 ++++++ src/update.cpp | 16 ++++ 22 files changed, 445 insertions(+), 52 deletions(-) create mode 100644 blend/plane.blend create mode 100644 include/font/ter_u32n.data.h create mode 100644 include/model/plane.h create mode 100644 include/model/plane.obj create mode 100644 include/shader/font.fp.glsl.h create mode 100644 include/shader/font.vp.glsl.h create mode 100644 include/update.hpp create mode 100644 src/font/ter_u32n.data create mode 100644 src/shader/font.fp.glsl create mode 100644 src/shader/font.vp.glsl create mode 100644 src/update.cpp diff --git a/Makefile b/Makefile index 44de762..b94ddea 100644 --- a/Makefile +++ b/Makefile @@ -73,19 +73,19 @@ endef %.glsl.o: %.glsl $(BUILD_BINARY_O) -include/shader/%.glsl.h: src/shader/%.glsl +include/%.glsl.h: src/%.glsl $(BUILD_BINARY_H) %.data.o: %.data $(BUILD_BINARY_O) -include/level/%.data.h: src/level/%.data +include/%.data.h: src/%.data $(BUILD_BINARY_H) %.data.pal.o: %.data.pal $(BUILD_BINARY_O) -include/level/%.data.pal.h: src/level/%.data.pal +include/%.data.pal.h: src/%.data.pal $(BUILD_BINARY_H) clean: @@ -104,8 +104,10 @@ MAIN_OBJS = \ src/opengl.o \ src/render.o \ src/collision.o \ + src/update.o \ $(patsubst %.glsl,%.glsl.o,$(wildcard src/shader/*.glsl)) \ $(patsubst %.data,%.data.o,$(wildcard src/level/*.data)) \ + $(patsubst %.data,%.data.o,$(wildcard src/font/*.data)) \ $(patsubst %.data.pal,%.data.pal.o,$(wildcard src/level/*.data.pal)) \ $(GLFW) diff --git a/blend/block.blend b/blend/block.blend index 9931975136282df204eb39e4f22eed8bf13bb5a5..241d9048e08d5990fb5ce4c954771e829484647c 100644 GIT binary patch delta 29853 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 E-`pAl$N&HU delta 35056 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

TsSe1m&*}^$ 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π}(kZ|@XfVuV+dZS1hvZgC=p$Q+pAx*l6doD zN>4>twc+1Hcw20@Qytog4?DIrs)v4|da_-6k12Ebl=VtX%Pd!Mw`!Q+V;Q4Pl~z-( zm%Y#?lIX7~kI!ShXn+Iw!3|{-h!Sq$a~@%f_+K_E4!^Tcf0me;b|xt!=7so?a~3A$ zMg~z&`KUhD+j-_DrA;G??L8|I>}@Nf!{JmrM3myCjfDAg#%xxuC{i@x*ke3!xFVHJ zOlMbkb{V_)iHS6Mtjkt{v|kE8D+!>^qX>nM`kghxD^j_gCa|g3x-^4u8T^SJz)P{d+!KG!KX>Sl-`G>*eqS6K`}^Wg+a<)r9?vR?KbIX(mB!Bq z;c>0oh1eUd?09Z{y3eW1|4Jynbmhg^Ha~n2w?2LS=?-hcFZX_6d*VMEe|u@}zmokf z7K{l`IvKP5Qs_H>OZ)NO874WIaZ|-*myp`TF0iBRhHPYgK2bmbO34@y=+2g{!m4 sO4~Ks@bY2B*zn@v%UL_;gtfN9j)*Ivxbf>o?z0hjIY;jEel7F=07YTvDgXcg diff --git a/blend/plane.blend b/blend/plane.blend new file mode 100644 index 0000000000000000000000000000000000000000..40bacd104a7f154ccc7f45173210f7111200fbff GIT binary patch literal 464638 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 AGynhq literal 0 HcmV?d00001 diff --git a/include/font/ter_u32n.data.h b/include/font/ter_u32n.data.h new file mode 100644 index 0000000..0709d3f --- /dev/null +++ b/include/font/ter_u32n.data.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_src_font_ter_u32n_data_start __asm("_binary_src_font_ter_u32n_data_start"); +extern uint32_t _binary_src_font_ter_u32n_data_end __asm("_binary_src_font_ter_u32n_data_end"); +extern uint32_t _binary_src_font_ter_u32n_data_size __asm("_binary_src_font_ter_u32n_data_size"); + +#define src_font_ter_u32n_data_start ((const char *)&_binary_src_font_ter_u32n_data_start) +#define src_font_ter_u32n_data_end ((const char *)&_binary_src_font_ter_u32n_data_end) +#define src_font_ter_u32n_data_size (src_font_ter_u32n_data_end - src_font_ter_u32n_data_start) + +#ifdef __cplusplus +} +#endif diff --git a/include/math/transform.hpp b/include/math/transform.hpp index f36cba0..34c7ed4 100644 --- a/include/math/transform.hpp +++ b/include/math/transform.hpp @@ -149,7 +149,7 @@ template inline constexpr T inverse_length(vec<3, T> v) { float f = dot(v, v); - return 1.0f / sqrt(f); + return 1.0f / sqrt(f); } template diff --git a/include/math/vec.hpp b/include/math/vec.hpp index 83699a6..3e4e704 100644 --- a/include/math/vec.hpp +++ b/include/math/vec.hpp @@ -23,7 +23,7 @@ inline constexpr vec normalize(vec const& v) } template -inline constexpr vec<3, T> reflect(vec const& i, vec const& n) +inline constexpr vec reflect(vec const& i, vec const& n) { return i - dot(n, i) * n * static_cast(2.0); } diff --git a/include/model/plane.h b/include/model/plane.h new file mode 100644 index 0000000..eb22c53 --- /dev/null +++ b/include/model/plane.h @@ -0,0 +1,18 @@ +#pragma once + +const int plane_Plane_triangles[] = { + 0, 1, 2, + 0, 3, 1, +}; + +const int plane_Plane_triangles_length = (sizeof (plane_Plane_triangles)) / (sizeof (plane_Plane_triangles[0])); + +const float plane_vertices[] = { + 1.000000f, 0.000000f, 1.000000f, 1.000000f, 0.000000f, -0.0000f, 1.0000f, -0.0000f, + -1.000000f, 0.000000f, -1.000000f, 0.000000f, 1.000000f, -0.0000f, 1.0000f, -0.0000f, + -1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, -0.0000f, 1.0000f, -0.0000f, + 1.000000f, 0.000000f, -1.000000f, 1.000000f, 1.000000f, -0.0000f, 1.0000f, -0.0000f, +}; + +const int plane_vertices_length = (sizeof (plane_vertices)) / (sizeof (plane_vertices[0])); + diff --git a/include/model/plane.obj b/include/model/plane.obj new file mode 100644 index 0000000..09b6d6a --- /dev/null +++ b/include/model/plane.obj @@ -0,0 +1,16 @@ +# Blender 4.4.3 +# www.blender.org +mtllib plane.mtl +o Plane +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -1.000000 +v 1.000000 0.000000 -1.000000 +vn -0.0000 1.0000 -0.0000 +vt 1.000000 0.000000 +vt 0.000000 1.000000 +vt 0.000000 0.000000 +vt 1.000000 1.000000 +s 0 +f 2/1/1 3/2/1 1/3/1 +f 2/1/1 4/4/1 3/2/1 diff --git a/include/render.hpp b/include/render.hpp index 8d8986e..0d82edc 100644 --- a/include/render.hpp +++ b/include/render.hpp @@ -26,6 +26,13 @@ extern "C" { uint uniform_light_pos, struct game_state * state); + void render_font(struct mesh plane_mesh, + uint attrib_position, + uint attrib_texture, + uint attrib_normal, + uint uniform_trans, + uint uniform_texture0); + #ifdef __cplusplus } #endif diff --git a/include/shader/font.fp.glsl.h b/include/shader/font.fp.glsl.h new file mode 100644 index 0000000..cc18a75 --- /dev/null +++ b/include/shader/font.fp.glsl.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_src_shader_font_fp_glsl_start __asm("_binary_src_shader_font_fp_glsl_start"); +extern uint32_t _binary_src_shader_font_fp_glsl_end __asm("_binary_src_shader_font_fp_glsl_end"); +extern uint32_t _binary_src_shader_font_fp_glsl_size __asm("_binary_src_shader_font_fp_glsl_size"); + +#define src_shader_font_fp_glsl_start ((const char *)&_binary_src_shader_font_fp_glsl_start) +#define src_shader_font_fp_glsl_end ((const char *)&_binary_src_shader_font_fp_glsl_end) +#define src_shader_font_fp_glsl_size (src_shader_font_fp_glsl_end - src_shader_font_fp_glsl_start) + +#ifdef __cplusplus +} +#endif diff --git a/include/shader/font.vp.glsl.h b/include/shader/font.vp.glsl.h new file mode 100644 index 0000000..ff038fd --- /dev/null +++ b/include/shader/font.vp.glsl.h @@ -0,0 +1,19 @@ +#pragma once + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +extern uint32_t _binary_src_shader_font_vp_glsl_start __asm("_binary_src_shader_font_vp_glsl_start"); +extern uint32_t _binary_src_shader_font_vp_glsl_end __asm("_binary_src_shader_font_vp_glsl_end"); +extern uint32_t _binary_src_shader_font_vp_glsl_size __asm("_binary_src_shader_font_vp_glsl_size"); + +#define src_shader_font_vp_glsl_start ((const char *)&_binary_src_shader_font_vp_glsl_start) +#define src_shader_font_vp_glsl_end ((const char *)&_binary_src_shader_font_vp_glsl_end) +#define src_shader_font_vp_glsl_size (src_shader_font_vp_glsl_end - src_shader_font_vp_glsl_start) + +#ifdef __cplusplus +} +#endif diff --git a/include/update.hpp b/include/update.hpp new file mode 100644 index 0000000..3f2b825 --- /dev/null +++ b/include/update.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include "state.h" + +#ifdef __cplusplus +extern "C" { +#endif + + void update(struct game_state * state); + +#ifdef __cplusplus +} +#endif diff --git a/rebuild_models.sh b/rebuild_models.sh index c0279e8..d3c7a75 100644 --- a/rebuild_models.sh +++ b/rebuild_models.sh @@ -6,5 +6,6 @@ python ~/model_generator2/generate_indexed_cpp2.py paddle.obj paddle > paddle.h python ~/model_generator2/generate_indexed_cpp2.py block.obj block > block.h python ~/model_generator2/generate_indexed_cpp2.py ball.obj ball > ball.h python ~/model_generator2/generate_indexed_cpp2.py cube.obj cube > cube.h +python ~/model_generator2/generate_indexed_cpp2.py plane.obj plane > plane.h rm -f *.mtl diff --git a/src/collision.cpp b/src/collision.cpp index 25eb461..632be77 100644 --- a/src/collision.cpp +++ b/src/collision.cpp @@ -1,4 +1,5 @@ #include +#include #include "collision.hpp" @@ -51,8 +52,8 @@ vec2 _t0_t1(float signed_distance, t0 = t1; t1 = tmp; } - t0 = clamp(t0, 0.0, 1.0); - t1 = clamp(t0, 0.0, 1.0); + t0 = clamp(t0, -1.0, 1.0); + t1 = clamp(t0, -1.0, 1.0); return vec2(t0, t1); } } @@ -76,14 +77,96 @@ bool point_in_triangle(vec3 point, float y = (e * a) - (d * b); float z = x + y - ((a * c) - (b * b)); - return (z < 0) and not ((x < 0) or (y < 0)); + return (z < 0) && !((x < 0) || (y < 0)); } -vec2 collision_inner(vec3 plane_normal, - vec3 a, vec3 b, vec3 c, - vec3 point, - vec3 velocity) +struct ct { + bool collision; + float t; +}; + +#define NONE -99999999.0f + +ct lowest_root(float a, + float b, + float c, + float max_r) { + float determinant = b * b - 4.0f * a * c; + if (determinant < 0.0f) + return ct(false, max_r); + + float sqrt_det = sqrtf(determinant); + float r_2a = 1.0f / (2.0f * a); + float r1 = (-b - sqrt_det) * r_2a; + float r2 = (-b + sqrt_det) * r_2a; + if (r1 > r2) { + float tmp = r1; + r1 = r2; + r2 = tmp; + } + if (r1 > 0 && (max_r == NONE || r1 < max_r)) + return ct(true, r1); + if (r2 > 0 && (max_r == NONE || r2 < max_r)) + return ct(true, r2); + return ct(false, max_r); +} + +ct triangle_point_collide(vec3 tri_point, + vec3 point, + vec3 velocity, + float t) +{ + float a = dot(velocity, velocity); + float b = 2.0f * dot(velocity, point - tri_point); + vec3 c0 = (tri_point - point); + float c = dot(c0, c0) - 1.0f; + return lowest_root(a, b, c, t); +} + +struct ctf0 { + bool collision; + float t; + float f0; +}; + +ctf0 triangle_edge_collide(vec3 tri_point1, + vec3 tri_point2, + vec3 point, + vec3 velocity, + float t) +{ + vec3 edge = tri_point2 - tri_point1; + vec3 base = tri_point1 - point; + + float edge_dot_edge = dot(edge, edge); + float edge_dot_velocity = dot(edge, velocity); + float edge_dot_base = dot(edge, base); + float velocity_dot_velocity = dot(velocity, velocity); + + float a = edge_dot_edge * -velocity_dot_velocity + (edge_dot_velocity * edge_dot_velocity); + float b = edge_dot_edge * 2.0f * (dot(velocity, base)) - 2.0f * edge_dot_velocity * edge_dot_base; + float c = edge_dot_edge * (1.0f - dot(base, base)) + (edge_dot_base * edge_dot_base); + + ct res = lowest_root(a, b, c, t); + float f0 = NONE; + if (res.collision) { + f0 = (edge_dot_velocity * res.t - edge_dot_base) * (1.0f / edge_dot_edge); + } + return ctf0(res.collision, t, f0); +} + +struct t0t1pip { + float t0; + float t1; + vec3 pip; +}; + +t0t1pip collision_inner(vec3 a, vec3 b, vec3 c, + vec3 point, + vec3 velocity) +{ + vec3 plane_normal = _plane_normal(a, b, c); vec3 plane_origin = a; float plane_d = _plane_d(plane_normal, plane_origin); float signed_distance = _signed_distance(plane_normal, plane_d, point); @@ -91,29 +174,60 @@ vec2 collision_inner(vec3 plane_normal, float n_dot_v = dot(plane_normal, velocity); float r_n_dot_v = 1.0f / n_dot_v; - //bool embedded = n_dot_v == 0.0f; + bool embedded = n_dot_v == 0.0f; if (n_dot_v == 0.0f) { - if (fabsf(signed_distance) >= 1.0f) - return false; + if (fabsf(signed_distance) >= 1.0) + return t0t1pip(NONE, NONE, vec3(0, 0, 0)); } - - vec2 t0_t1 = _t0_t1(signed_distance, r_n_dot_v); - float t0 = t0_t1.x; - //float t1 = t0_t1.y; + vec2 t0t1 = _t0_t1(signed_distance, r_n_dot_v); + float t0 = t0t1.x; + float t1 = t0t1.y; vec3 plane_intersection_point = point - plane_normal + t0 * velocity; - bool inside = point_in_triangle(plane_intersection_point, a, b, c); - float inside_f = inside ? 1.0f : 0.0f; - return vec2(inside_f, t0); + bool inside = point_in_triangle(plane_intersection_point, a, b, c); + + bool collision = false; + vec3 collision_point; + float t = NONE; + vec3 abc[] = {a, b, c}; + for (int i = 0; i < 3; i++) { + vec3 tri_point = abc[i]; + ct res = triangle_point_collide(tri_point, point, velocity, t); + t = res.t; + if (res.collision) { + collision_point = tri_point; + collision = true; + } + } + + for (int i = 0; i < 3; i++) { + vec3 p1 = abc[i]; + vec3 p2 = abc[(i + 1) % 3]; + ctf0 res = triangle_edge_collide(p1, p2, point, velocity, t); + if (res.collision && res.f0 >= 0.0 && res.f0 <= 1.0) { + t = res.t; + collision_point = p1 + res.f0 * (p2 - p1); + collision = true; + } + } + + if (inside && collision) { + printf("r_n_dot_v %f %f %f %f\n", n_dot_v, r_n_dot_v, t0, t1); + + return t0t1pip(t0, t1, plane_intersection_point); + } + else + return t0t1pip(NONE, NONE, vec3(0, 0, 0)); } vec4 collision(mat4x4 trans, vec3 point, vec3 velocity) { bool collision = false; - float smallest = 0.0f; + float smallest = -9999.0f; vec3 smallest_normal = vec3(0, 0, 0); + //printf("velocity %f %f %f\n", velocity.x, velocity.y, velocity.z); for (int i = 0; i < cube_Cube_triangles_length / 3; i++) { const float * a = &cube_vertices[cube_Cube_triangles[i * 3 + 0] * 8]; @@ -124,27 +238,27 @@ vec4 collision(mat4x4 trans, vec3 bp = trans * vec3(b[0], b[1], b[2]); vec3 cp = trans * vec3(c[0], c[1], c[2]); - vec3 plane_normal = _plane_normal(ap, bp, cp); - - vec2 res = collision_inner(plane_normal, ap, bp, cp, point, velocity); - bool inside = res.x == 1.0f; - float t0 = res.y; + t0t1pip res = collision_inner(ap, bp, cp, point, velocity); + bool inside = res.t0 != NONE; if (!inside) continue; - if (collision == false || t0 < smallest) { - smallest = t0; + if (collision == false || res.t0 < smallest) { + printf("new smallest %f %f\n", smallest, res.t0); + smallest = res.t0; + + vec3 plane_normal = _plane_normal(ap, bp, cp); smallest_normal = plane_normal; } collision = true; } - float collision_f = collision ? 1.0 : 0.0; + //float collision_f = collision ? 1.0 : 0.0; return vec4(smallest_normal.x, smallest_normal.y, smallest_normal.z, - collision_f); + collision ? smallest : -9999.0f); } /* diff --git a/src/font/ter_u32n.data b/src/font/ter_u32n.data new file mode 100644 index 0000000000000000000000000000000000000000..2cd561d8d2b41dd780d2833f4bd5c1d94c4fa950 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/src/main.c b/src/main.c index e407bdb..e95bd38 100644 --- a/src/main.c +++ b/src/main.c @@ -9,13 +9,20 @@ #include "shader/vertex_color.fp.glsl.h" #include "shader/vertex_color.vp.glsl.h" +#include "shader/font.fp.glsl.h" +#include "shader/font.vp.glsl.h" + +#include "font/ter_u32n.data.h" + #include "opengl.h" #include "render.hpp" +#include "update.hpp" #include "model/block.h" #include "model/paddle.h" #include "model/ball.h" //#include "model/cube.h" +#include "model/plane.h" int vp_width = 1600; int vp_height = 1200; @@ -116,6 +123,34 @@ int main() uint uniform_base_color = glGetUniformLocation(program, "base_color"); uint uniform_light_pos = glGetUniformLocation(program, "light_pos"); + // + struct mesh plane_mesh; + + plane_mesh.vtx = make_buffer(GL_ARRAY_BUFFER, plane_vertices, (sizeof (plane_vertices))); + plane_mesh.idx = make_buffer(GL_ELEMENT_ARRAY_BUFFER, plane_Plane_triangles, (sizeof (plane_Plane_triangles))); + plane_mesh.length = plane_Plane_triangles_length; + + uint font_program = compile_shader(src_shader_font_vp_glsl_start, + src_shader_font_vp_glsl_size, + src_shader_font_fp_glsl_start, + src_shader_font_fp_glsl_size); + glUseProgram(font_program); + uint font__attrib_position = glGetAttribLocation(font_program, "position"); + uint font__attrib_texture = glGetAttribLocation(font_program, "_texture"); + uint font__attrib_normal = glGetAttribLocation(font_program, "normal"); + uint font__uniform_trans = glGetUniformLocation(font_program, "trans"); + uint font__uniform_texture0 = glGetUniformLocation(font_program, "texture0"); + + ////////////////////////////////////////////////////////////////////// + // textures + ////////////////////////////////////////////////////////////////////// + + uint terminus_font = make_texture(src_font_ter_u32n_data_start, + GL_RED, + 256, + 256, + GL_RED); + ////////////////////////////////////////////////////////////////////// // main loop ////////////////////////////////////////////////////////////////////// @@ -142,7 +177,6 @@ int main() glEnable(GL_DEPTH_TEST); glClearDepth(-1000.0f); - glDepthFunc(GL_GREATER); glClearColor(0.1, 0.2, 0.3, 1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -164,7 +198,8 @@ int main() float left = axes[2] * 0.5 + 0.5; float right = axes[5] * 0.5 + 0.5; - paddle_dx = right - left; + float sensitivity = 0.4f; + paddle_dx = (right - left) * sensitivity; //state.ball_dx = deadzone(axes[0]); //state.ball_dy = deadzone(axes[1]); @@ -173,12 +208,13 @@ int main() } float extent = 0.25; - state.paddle_x += paddle_dx * 0.4; + state.paddle_x += paddle_dx; if (state.paddle_x < extent) state.paddle_x = extent; if (state.paddle_x > 12 - extent) state.paddle_x = 12 - extent; - //state.paddle_y += paddle_dy * 0.4; + + update(&state); if ((state.ball_x + state.ball_dx * 0.4) > 12.25f) { state.ball_x = 12.25f; @@ -186,8 +222,6 @@ int main() } else if ((state.ball_x + state.ball_dx * 0.4) < -0.25f) { state.ball_x = -0.25f; state.ball_dx = -state.ball_dx; - } else { - state.ball_x += state.ball_dx * 0.4; } if ((state.ball_y + state.ball_dy * 0.4) > 27.0f) { @@ -196,10 +230,11 @@ int main() } else if ((state.ball_y + state.ball_dy * 0.4) < 0.0f) { state.ball_y = 0.0f; state.ball_dy = -state.ball_dy; - } else { - state.ball_y += state.ball_dy * 0.4; } + glDepthFunc(GL_GREATER); + glUseProgram(program); + render(paddle_mesh, block_mesh, ball_mesh, @@ -212,6 +247,17 @@ int main() uniform_light_pos, &state); + glDepthFunc(GL_ALWAYS); + glUseProgram(font_program); + + render_font(plane_mesh, + font__attrib_position, + font__attrib_texture, + font__attrib_normal, + font__uniform_trans, + font__uniform_texture0 + ); + glfwSwapBuffers(window); glfwPollEvents(); diff --git a/src/opengl.c b/src/opengl.c index b41cd3d..46a8535 100644 --- a/src/opengl.c +++ b/src/opengl.c @@ -69,3 +69,24 @@ int make_buffer(unsigned int target, glBufferData(target, size, data, GL_STATIC_DRAW); return buffer; } + +int make_texture(const void * data, + int internalformat, + int width, + int height, + int format) +{ + unsigned int texture; + glGenTextures(1, &texture); + glActiveTexture(GL_TEXTURE0); + + glBindTexture(GL_TEXTURE_2D, texture); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + glTexImage2D(GL_TEXTURE_2D, 0, internalformat, width, height, 0, format, GL_UNSIGNED_BYTE, data); + + return texture; +} diff --git a/src/opengl.h b/src/opengl.h index 3bbaed1..9281097 100644 --- a/src/opengl.h +++ b/src/opengl.h @@ -6,3 +6,9 @@ unsigned int compile_shader(const void * vp, int make_buffer(unsigned int target, const void * data, size_t size); + +int make_texture(const void * data, + int internalformat, + int width, + int height, + int format); diff --git a/src/render.cpp b/src/render.cpp index 5e7e8d5..5d216f3 100644 --- a/src/render.cpp +++ b/src/render.cpp @@ -139,8 +139,8 @@ void render(mesh paddle_mesh, for (int y = 0; y < 28; y++) { for (int x = 0; x < 13; x++) { char tile = level[y * 13 + x]; - //if (tile == 0) - //continue; + if (tile == 0) + continue; const float cs = 1.0f / 255.0f; vec3 base_color = vec3(((float)pal[tile * 3 + 0]) * cs, @@ -152,15 +152,6 @@ void render(mesh paddle_mesh, mat4x4 trans = a * t * rx; - vec4 res = collision(t * rx, - vec3(state->ball_x * 4.0f, -state->ball_y * 2.0f, 0), - vec3(0, 0, 0)); - bool collision = res.w == 1.0f; - if (collision) { - //vec3 normal = vec3(res.x, res.y, res.z); - base_color = vec3(1, 0, 0); - } - //mat3x3 normal_trans = transpose(inverse(submatrix(trans, 0, 0))); mat3x3 normal_trans = submatrix(rx, 3, 3); @@ -173,7 +164,6 @@ void render(mesh paddle_mesh, } } - ////////////////////////////////////////////////////////////////////// // render paddle ////////////////////////////////////////////////////////////////////// @@ -275,3 +265,48 @@ void render(mesh paddle_mesh, glDrawElements(GL_TRIANGLES, paddle_mesh.length, GL_UNSIGNED_INT, 0); } } + +void render_font(struct mesh plane_mesh, + uint attrib_position, + uint attrib_texture, + uint attrib_normal, + uint uniform_trans, + uint uniform_texture0) +{ + glBindBuffer(GL_ARRAY_BUFFER, plane_mesh.vtx); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, plane_mesh.idx); + + glVertexAttribPointer(attrib_position, + 3, + GL_FLOAT, + GL_FALSE, + (sizeof (float)) * 8, + (void*)(0 * 4) + ); + glVertexAttribPointer(attrib_texture, + 2, + GL_FLOAT, + GL_FALSE, + (sizeof (float)) * 8, + (void*)(3 * 4) + ); + glVertexAttribPointer(attrib_normal, + 3, + GL_FLOAT, + GL_FALSE, + (sizeof (float)) * 8, + (void*)(5 * 4) + ); + glEnableVertexAttribArray(attrib_position); + glEnableVertexAttribArray(attrib_texture); + glEnableVertexAttribArray(attrib_normal); + + mat4x4 r = rotate_y(PI / 1.0f) * rotate_z(PI / 1.0f) * rotate_x(PI / 2.0f); + + mat4x4 trans = scale(0.5f) * r; + + glUniform4fv(uniform_trans, 4, &trans[0][0]); + glUniform1i(uniform_texture0, 0); + + glDrawElements(GL_TRIANGLES, plane_mesh.length, GL_UNSIGNED_INT, 0); +} diff --git a/src/shader/font.fp.glsl b/src/shader/font.fp.glsl new file mode 100644 index 0000000..b82c282 --- /dev/null +++ b/src/shader/font.fp.glsl @@ -0,0 +1,15 @@ +#version 120 + +uniform sampler2D texture0; + +varying vec2 fp_texture; + +void main() +{ + vec4 c = texture2D(texture0, fp_texture); + + float i = c.x == 0 ? 0.0 : 1.0; + + gl_FragColor = vec4(i, i, i, 1.0); + //gl_FragColor = vec4(fp_texture.xy, 1, 1.0); +} diff --git a/src/shader/font.vp.glsl b/src/shader/font.vp.glsl new file mode 100644 index 0000000..cd81711 --- /dev/null +++ b/src/shader/font.vp.glsl @@ -0,0 +1,26 @@ +#version 120 + +attribute vec3 position; +attribute vec2 _texture; +attribute vec3 normal; + +varying vec2 fp_texture; + +uniform vec4 trans[4]; + +vec4 transform4(vec4 v) +{ + return vec4(dot(trans[0], v), + dot(trans[1], v), + dot(trans[2], v), + dot(trans[3], v)); +} + +void main() +{ + vec4 pos = transform4(vec4(position, 1)); + + fp_texture = _texture; + + gl_Position = pos; +} diff --git a/src/update.cpp b/src/update.cpp new file mode 100644 index 0000000..4a35809 --- /dev/null +++ b/src/update.cpp @@ -0,0 +1,16 @@ +#include +#include + +#include "update.hpp" +#include "collision.hpp" +#include "state.h" + +#include "level/level1.data.h" +#include "level/level1.data.pal.h" + +#include "math/float_types.hpp" +#include "math/transform.hpp" + +void update(struct game_state * state) +{ +}