Fixed slice index not being passed correctly. It was normalized instead of pass as an integer value.

This commit is setup for testing the texture array slices, it shouldn't be shipped to users.
This commit is contained in:
Simon Anciaux 2025-03-15 15:12:07 +01:00 committed by Peter Slattery
parent bd7dac90ac
commit 9b927bd410
2 changed files with 110 additions and 122 deletions

View File

@ -162,10 +162,7 @@ ft__bad_rect_pack_next(Bad_Rect_Pack *pack, Vec2_i32 dim){
} }
// NOTE(simon, 28/02/24): We are now sure that the character will fit. // NOTE(simon, 28/02/24): We are now sure that the character will fit.
pack->current_line_h = Max(pack->current_line_h, dim.y);
if ( pack->current_line_h < dim.y ) {
pack->current_line_h = dim.y;
}
result = pack->p; result = pack->p;
pack->p.x += dim.x; pack->p.x += dim.x;
@ -322,7 +319,8 @@ ft__font_make_face(Arena *arena, Face_Description *description, f32 scale_factor
white.data = white_data; white.data = white_data;
Bad_Rect_Pack pack = {}; Bad_Rect_Pack pack = {};
ft__bad_rect_pack_init(&pack, V2i32(1024, 1024)); // ft__bad_rect_pack_init(&pack, V2i32(1024, 1024));
ft__bad_rect_pack_init(&pack, V2i32(128, 128));
ft__glyph_bounds_store_uv_raw(ft__bad_rect_pack_next(&pack, white.dim), white.dim, &face->white); ft__glyph_bounds_store_uv_raw(ft__bad_rect_pack_next(&pack, white.dim), white.dim, &face->white);
for (u16 i = 0; i < index_count; i += 1){ for (u16 i = 0; i < index_count; i += 1){
Vec2_i32 dim = glyph_bitmaps[i].dim; Vec2_i32 dim = glyph_bitmaps[i].dim;
@ -333,68 +331,58 @@ ft__font_make_face(Arena *arena, Face_Description *description, f32 scale_factor
Texture_Kind texture_kind = TextureKind_Mono; Texture_Kind texture_kind = TextureKind_Mono;
u32 texture = graphics_get_texture(pack.dim, texture_kind); u32 texture = graphics_get_texture(pack.dim, texture_kind);
/* NOTE simon (06/01/25): This assumes that every platforms don't use 0 as a valid texture id. Vec3_f32 texture_dim = V3f32(pack.dim);
This is valid for OpenGL and the DX11 implementaion. Someone needs to check the MAC versions. */ face->texture_dim = texture_dim;
if (texture != 0 ){
face->texture_kind = texture_kind; {
face->texture = texture; Vec3_i32 p = V3i32((i32)face->white.uv.x0, (i32)face->white.uv.y0, (i32)face->white.w);
Vec3_i32 dim = V3i32(white.dim.x, white.dim.y, 1);
graphics_fill_texture(texture_kind, texture, p, dim, white.data);
face->white.uv.x1 = (face->white.uv.x0 + face->white.uv.x1)/texture_dim.x;
face->white.uv.y1 = (face->white.uv.y0 + face->white.uv.y1)/texture_dim.y;
face->white.uv.x0 = face->white.uv.x0/texture_dim.x;
face->white.uv.y0 = face->white.uv.y0/texture_dim.y;
face->white.w /= texture_dim.z;
}
Vec3_f32 texture_dim = V3f32(pack.dim); for (u16 i = 0; i < index_count; i += 1){
face->texture_dim = texture_dim; Vec3_i32 p = V3i32((i32)face->bounds[i].uv.x0, (i32)face->bounds[i].uv.y0, (i32)face->bounds[i].w);
Vec3_i32 dim = V3i32(glyph_bitmaps[i].dim.x, glyph_bitmaps[i].dim.y, 1);
graphics_fill_texture(texture_kind, texture, p, dim, glyph_bitmaps[i].data);
face->bounds[i].uv.x1 = (face->bounds[i].uv.x0 + face->bounds[i].uv.x1)/texture_dim.x;
face->bounds[i].uv.y1 = (face->bounds[i].uv.y0 + face->bounds[i].uv.y1)/texture_dim.y;
face->bounds[i].uv.x0 = face->bounds[i].uv.x0/texture_dim.x;
face->bounds[i].uv.y0 = face->bounds[i].uv.y0/texture_dim.y;
#if 0
face->bounds[i].w /= texture_dim.z;
#endif
}
{ {
Vec3_i32 p = V3i32((i32)face->white.uv.x0, (i32)face->white.uv.y0, (i32)face->white.w); Face_Advance_Map *advance_map = &face->advance_map;
Vec3_i32 dim = V3i32(white.dim.x, white.dim.y, 1);
graphics_fill_texture(texture_kind, texture, p, dim, white.data);
face->white.uv.x1 = (face->white.uv.x0 + face->white.uv.x1)/texture_dim.x;
face->white.uv.y1 = (face->white.uv.y0 + face->white.uv.y1)/texture_dim.y;
face->white.uv.x0 = face->white.uv.x0/texture_dim.x;
face->white.uv.y0 = face->white.uv.y0/texture_dim.y;
face->white.w /= texture_dim.z;
}
for (u16 i = 0; i < index_count; i += 1){ met->space_advance = font_get_glyph_advance(advance_map, met, ' ', 0);
Vec3_i32 p = V3i32((i32)face->bounds[i].uv.x0, (i32)face->bounds[i].uv.y0, (i32)face->bounds[i].w); met->decimal_digit_advance =
Vec3_i32 dim = V3i32(glyph_bitmaps[i].dim.x, glyph_bitmaps[i].dim.y, 1); font_get_max_glyph_advance_range(advance_map, met, '0', '9', 0);
graphics_fill_texture(texture_kind, texture, p, dim, glyph_bitmaps[i].data); met->hex_digit_advance =
face->bounds[i].uv.x1 = (face->bounds[i].uv.x0 + face->bounds[i].uv.x1)/texture_dim.x; font_get_max_glyph_advance_range(advance_map, met, 'A', 'F', 0);
face->bounds[i].uv.y1 = (face->bounds[i].uv.y0 + face->bounds[i].uv.y1)/texture_dim.y; met->hex_digit_advance =
face->bounds[i].uv.x0 = face->bounds[i].uv.x0/texture_dim.x; Max(met->hex_digit_advance, met->decimal_digit_advance);
face->bounds[i].uv.y0 = face->bounds[i].uv.y0/texture_dim.y; met->byte_sub_advances[0] =
face->bounds[i].w /= texture_dim.z; font_get_glyph_advance(advance_map, met, '\\', 0);
} met->byte_sub_advances[1] = met->hex_digit_advance;
met->byte_sub_advances[2] = met->hex_digit_advance;
{ met->byte_advance =
Face_Advance_Map *advance_map = &face->advance_map; met->byte_sub_advances[0] +
met->byte_sub_advances[1] +
met->space_advance = font_get_glyph_advance(advance_map, met, ' ', 0); met->byte_sub_advances[2];
met->decimal_digit_advance = met->normal_lowercase_advance =
font_get_max_glyph_advance_range(advance_map, met, '0', '9', 0); font_get_average_glyph_advance_range(advance_map, met, 'a', 'z', 0);
met->hex_digit_advance = met->normal_uppercase_advance =
font_get_max_glyph_advance_range(advance_map, met, 'A', 'F', 0); font_get_average_glyph_advance_range(advance_map, met, 'A', 'Z', 0);
met->hex_digit_advance = met->normal_advance = (26*met->normal_lowercase_advance +
Max(met->hex_digit_advance, met->decimal_digit_advance); 26*met->normal_uppercase_advance +
met->byte_sub_advances[0] = 10*met->decimal_digit_advance)/62.f;
font_get_glyph_advance(advance_map, met, '\\', 0);
met->byte_sub_advances[1] = met->hex_digit_advance;
met->byte_sub_advances[2] = met->hex_digit_advance;
met->byte_advance =
met->byte_sub_advances[0] +
met->byte_sub_advances[1] +
met->byte_sub_advances[2];
met->normal_lowercase_advance =
font_get_average_glyph_advance_range(advance_map, met, 'a', 'z', 0);
met->normal_uppercase_advance =
font_get_average_glyph_advance_range(advance_map, met, 'A', 'Z', 0);
met->normal_advance = (26*met->normal_lowercase_advance +
26*met->normal_uppercase_advance +
10*met->decimal_digit_advance)/62.f;
}
} else {
pop_array(arena, Face, 1);
face = 0;
} }
} }

View File

@ -227,8 +227,8 @@ output_t main(input_t input) {
// NOTE(simon, 28/02/24): The input colors are BGRA, we need them as RGBA. // NOTE(simon, 28/02/24): The input colors are BGRA, we need them as RGBA.
output.color = input.vertex_c.zyxw; output.color = input.vertex_c.zyxw;
output.uvw = input.vertex_t; output.uvw = input.vertex_t;
output.xy = input.vertex_p; output.xy = input.vertex_p;
output.half_thickness = input.vertex_ht; output.half_thickness = input.vertex_ht;
float2 center = input.vertex_t.xy; float2 center = input.vertex_t.xy;
float2 half_dim = abs( input.vertex_p - center ); float2 half_dim = abs( input.vertex_p - center );