text_editor/transform: use correct vertex type

This commit is contained in:
Zack Buhman 2025-03-03 02:18:16 -06:00
parent 21701d90aa
commit 487289f3c9
5 changed files with 42 additions and 36 deletions

View File

@ -1,6 +1,6 @@
#pragma once #pragma once
#include <cstdint> #include <stdint.h>
constexpr inline int32_t min(int32_t a, int32_t b) constexpr inline int32_t min(int32_t a, int32_t b)
{ {

View File

@ -36,7 +36,7 @@ cursor_advance render_primary_buffer(ta_parameter_writer& writer,
const gap_buffer& gb, const gap_buffer& gb,
const viewport_window& window) 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 }; cursor_advance cursor = { 0 };
int32_t h_advance = 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_width = 1.0f / font->texture_width;
const float r_texture_height = 1.0f / font->texture_height; 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; int32_t init_i = first_line >= 0 ? gb.line.offsets[first_line] + 1 : 0;
for (int32_t i = init_i; i <= gb.size; i++) { for (int32_t i = init_i; i <= gb.size; i++) {
if (i == gb.gap_start) { if (i == gb.gap_start) {
@ -83,6 +85,7 @@ cursor_advance render_primary_buffer(ta_parameter_writer& writer,
if (c == '\n') { if (c == '\n') {
h_advance = 0; h_advance = 0;
v_advance += font->face_metrics.height; v_advance += font->face_metrics.height;
row += 1;
if (int_26_6(v_advance + font->face_metrics.height) > window.box.y1) { if (int_26_6(v_advance + font->face_metrics.height) > window.box.y1) {
break; break;
} }

View File

@ -119,7 +119,8 @@ void glyph_begin(ta_parameter_writer& writer,
| 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::fog_control::no_fog
| tsp_instruction_word::texture_u_size::from_int(texture_width) | 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_address = texture_memory_alloc.texture.start;
const uint32_t texture_control_word = texture_control_word::pixel_format::_8bpp_palette 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, 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) 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>() = writer.append<ta_vertex_parameter::polygon_type_3>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false), ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false),
va.x, va.y, z, va.x, va.y, z,
va.u, va.v, va.u, va.v,
0, // base_color base_color,
0); // offset_color 0); // offset_color
writer.append<ta_vertex_parameter::polygon_type_1>() = writer.append<ta_vertex_parameter::polygon_type_3>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false), ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false),
vb.x, vb.y, z, vb.x, vb.y, z,
vb.u, vb.v, vb.u, vb.v,
0, // base_color base_color,
0); // offset_color 0); // offset_color
writer.append<ta_vertex_parameter::polygon_type_1>() = writer.append<ta_vertex_parameter::polygon_type_3>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false), ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(false),
vd.x, vd.y, z, vd.x, vd.y, z,
vd.u, vd.v, vd.u, vd.v,
0, // base_color base_color,
0); // offset_color 0); // offset_color
writer.append<ta_vertex_parameter::polygon_type_1>() = writer.append<ta_vertex_parameter::polygon_type_3>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(true), ta_vertex_parameter::polygon_type_3(polygon_vertex_parameter_control_word(true),
vc.x, vc.y, z, vc.x, vc.y, z,
vc.u, vc.v, vc.u, vc.v,
0, // base_color base_color,
0); // offset_color 0); // offset_color
} }
@ -202,5 +204,6 @@ void transform_glyph(ta_parameter_writer& writer,
} }
const float z = 0.1f; 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);
} }

View File

@ -14,7 +14,7 @@ struct viewport_window {
inline void viewport_init_fullscreen(viewport_window& window) inline void viewport_init_fullscreen(viewport_window& window)
{ {
window.first_line = -1; window.first_line = 0;
window.box.x0 = 10; window.box.x0 = 10;
window.box.y0 = 20; window.box.y0 = 20;
window.box.x1 = 640 - 10; window.box.x1 = 640 - 10;