From 487289f3c9f54225db0b6470d328702fd6ff0390 Mon Sep 17 00:00:00 2001 From: Zack Buhman Date: Mon, 3 Mar 2025 02:18:16 -0600 Subject: [PATCH] text_editor/transform: use correct vertex type --- text_editor/minmax.hpp | 2 +- text_editor/render.cpp | 21 +++++++++++-------- text_editor/render.hpp | 16 +++++++------- text_editor/transform.cpp | 37 ++++++++++++++++++--------------- text_editor/viewport_window.hpp | 2 +- 5 files changed, 42 insertions(+), 36 deletions(-) diff --git a/text_editor/minmax.hpp b/text_editor/minmax.hpp index 32de9c6..92bec81 100644 --- a/text_editor/minmax.hpp +++ b/text_editor/minmax.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include constexpr inline int32_t min(int32_t a, int32_t b) { diff --git a/text_editor/render.cpp b/text_editor/render.cpp index 148fb5f..314f411 100644 --- a/text_editor/render.cpp +++ b/text_editor/render.cpp @@ -31,12 +31,12 @@ constexpr inline int32_t int_26_6(int32_t n) } cursor_advance render_primary_buffer(ta_parameter_writer& writer, - const font * font, - const glyph * glyphs, - const gap_buffer& gb, - const viewport_window& window) + const font * font, + const glyph * glyphs, + const gap_buffer& gb, + const viewport_window& window) { - int32_t first_line = min(-1, max(window.first_line, gb.line.length - 1)); + int32_t first_line = min(window.first_line, gb.line.length - 1); cursor_advance cursor = { 0 }; int32_t h_advance = 0; @@ -45,6 +45,8 @@ cursor_advance render_primary_buffer(ta_parameter_writer& writer, const float r_texture_width = 1.0f / font->texture_width; const float r_texture_height = 1.0f / font->texture_height; + int row = first_line; + int32_t init_i = first_line >= 0 ? gb.line.offsets[first_line] + 1 : 0; for (int32_t i = init_i; i <= gb.size; i++) { if (i == gb.gap_start) { @@ -83,6 +85,7 @@ cursor_advance render_primary_buffer(ta_parameter_writer& writer, if (c == '\n') { h_advance = 0; v_advance += font->face_metrics.height; + row += 1; if (int_26_6(v_advance + font->face_metrics.height) > window.box.y1) { break; } @@ -112,10 +115,10 @@ void render_cursor(ta_parameter_writer& parameter, } void render(ta_parameter_writer& writer, - const font * font, - const glyph * glyphs, - const gap_buffer& gb, - const viewport_window& window) + const font * font, + const glyph * glyphs, + const gap_buffer& gb, + const viewport_window& window) { glyph_begin(writer, font->texture_width, diff --git a/text_editor/render.hpp b/text_editor/render.hpp index a5e23bd..bafde0e 100644 --- a/text_editor/render.hpp +++ b/text_editor/render.hpp @@ -16,13 +16,13 @@ struct cursor_advance { }; cursor_advance render_primary_buffer(ta_parameter_writer& parameter, - const font * font, - const glyph * glyphs, - const gap_buffer& gb, - const viewport_window& window); + const font * font, + const glyph * glyphs, + const gap_buffer& gb, + const viewport_window& window); void render(ta_parameter_writer& parameter, - const font * font, - const glyph * glyphs, - const gap_buffer& gb, - const viewport_window& window); + const font * font, + const glyph * glyphs, + const gap_buffer& gb, + const viewport_window& window); diff --git a/text_editor/transform.cpp b/text_editor/transform.cpp index 935f244..eb59572 100644 --- a/text_editor/transform.cpp +++ b/text_editor/transform.cpp @@ -116,10 +116,11 @@ void glyph_begin(ta_parameter_writer& writer, const uint32_t tsp_instruction_word = tsp_instruction_word::src_alpha_instr::src_alpha - | tsp_instruction_word::dst_alpha_instr::inverse_src_alpha + | tsp_instruction_word::dst_alpha_instr::inverse_src_alpha | tsp_instruction_word::fog_control::no_fog | tsp_instruction_word::texture_u_size::from_int(texture_width) - | tsp_instruction_word::texture_v_size::from_int(texture_height); + | tsp_instruction_word::texture_v_size::from_int(texture_height) + | tsp_instruction_word::texture_shading_instruction::modulate; const uint32_t texture_address = texture_memory_alloc.texture.start; const uint32_t texture_control_word = texture_control_word::pixel_format::_8bpp_palette @@ -137,35 +138,36 @@ void glyph_begin(ta_parameter_writer& writer, ); } -static inline void transfer_quad_type_1(ta_parameter_writer& writer, - struct vertex va, struct vertex vb, struct vertex vc, struct vertex vd, float z) +static inline void transfer_quad_type_3(ta_parameter_writer& writer, + struct vertex va, struct vertex vb, struct vertex vc, struct vertex vd, float z, + uint32_t base_color) { - writer.append() = - ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false), + writer.append() = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), va.x, va.y, z, va.u, va.v, - 0, // base_color + base_color, 0); // offset_color - writer.append() = - ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false), + writer.append() = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), vb.x, vb.y, z, vb.u, vb.v, - 0, // base_color + base_color, 0); // offset_color - writer.append() = - ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false), + writer.append() = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false), vd.x, vd.y, z, vd.u, vd.v, - 0, // base_color + base_color, 0); // offset_color - writer.append() = - ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(true), + writer.append() = + ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(true), vc.x, vc.y, z, vc.u, vc.v, - 0, // base_color + base_color, 0); // offset_color } @@ -202,5 +204,6 @@ void transform_glyph(ta_parameter_writer& writer, } const float z = 0.1f; - transfer_quad_type_1(writer, out[0], out[1], out[2], out[3], z); + uint32_t base_color = 0xff0080ff; + transfer_quad_type_3(writer, out[0], out[1], out[2], out[3], z, base_color); } diff --git a/text_editor/viewport_window.hpp b/text_editor/viewport_window.hpp index ae2b777..76970d8 100644 --- a/text_editor/viewport_window.hpp +++ b/text_editor/viewport_window.hpp @@ -14,7 +14,7 @@ struct viewport_window { inline void viewport_init_fullscreen(viewport_window& window) { - window.first_line = -1; + window.first_line = 0; window.box.x0 = 10; window.box.y0 = 20; window.box.x1 = 640 - 10;