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:
parent
bd7dac90ac
commit
9b927bd410
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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 );
|
||||||
|
|
Loading…
Reference in New Issue