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
#include <cstdint>
#include <stdint.h>
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 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;
}

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::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>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false),
writer.append<ta_vertex_parameter::polygon_type_3>() =
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>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false),
writer.append<ta_vertex_parameter::polygon_type_3>() =
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>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(false),
writer.append<ta_vertex_parameter::polygon_type_3>() =
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>() =
ta_vertex_parameter::polygon_type_1(polygon_vertex_parameter_control_word(true),
writer.append<ta_vertex_parameter::polygon_type_3>() =
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);
}

View File

@ -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;