Setup spall profiling, did first optimizations!

This commit is contained in:
2024-03-11 02:05:18 -04:00
parent 304e710c16
commit 1656dffb67
23 changed files with 357 additions and 120 deletions

View File

@ -8,7 +8,9 @@ import "core:os"
import rl "vendor:raylib"
Font_Largest_Px_Size :: 96
Font_Largest_Px_Size :: 32
Font_Size_Interval :: 2
// Font_Default :: ""
Font_Default :: FontID { 0, "" }
@ -52,7 +54,7 @@ FontDef :: struct {
// data : []u8,
default_size : i32,
size_table : [Font_Largest_Px_Size / 2] FontGlyphsRender,
size_table : [Font_Largest_Px_Size / Font_Size_Interval] FontGlyphsRender,
}
FontProviderData :: struct {
@ -61,6 +63,7 @@ FontProviderData :: struct {
font_provider_startup :: proc()
{
profile(#procedure)
state := get_state()
font_provider_data := & get_state().font_provider_data; using font_provider_data
@ -94,6 +97,7 @@ font_load :: proc( path_file : string,
desired_id : string = Font_Load_Gen_ID
) -> FontID
{
profile(#procedure)
font_provider_data := & get_state().font_provider_data; using font_provider_data
font_data, read_succeded : = os.read_entire_file( path_file, context.temp_allocator )
@ -114,7 +118,7 @@ font_load :: proc( path_file : string,
default_size = Font_Default_Point_Size
}
key := cast(u64) xxh32( transmute([]byte) desired_id )
key := cast(u64) crc32( transmute([]byte) desired_id )
def, set_error := zpl_hmap_set( & font_cache, key,FontDef {} )
verify( set_error == AllocatorError.None, "Failed to add new font entry to cache" )
@ -127,9 +131,10 @@ font_load :: proc( path_file : string,
// Render all sizes at once
// Note(Ed) : We only generate textures for even multiples of the font.
for font_size : i32 = 2; font_size <= Font_Largest_Px_Size; font_size += 2
for font_size : i32 = Font_Size_Interval; font_size <= Font_Largest_Px_Size; font_size += Font_Size_Interval
{
id := (font_size / 2) + (font_size % 2)
profile("font size render")
id := (font_size / Font_Size_Interval) + (font_size % Font_Size_Interval)
px_render := & def.size_table[id - 1]
using px_render
@ -170,16 +175,27 @@ to_rl_Font :: proc( id : FontID, size := Font_Use_Default_Size ) -> rl.Font
{
font_provider_data := & get_state().font_provider_data; using font_provider_data
even_size := math.round(size * 0.5) * 2.0
size := clamp( i32( even_size), 8, Font_Largest_Px_Size )
even_size := math.round(size * (1.0/f32(Font_Size_Interval))) * f32(Font_Size_Interval)
size := clamp( i32( even_size), 4, Font_Largest_Px_Size )
def := zpl_hmap_get( & font_cache, id.key )
size = size if size != i32(Font_Use_Default_Size) else def.default_size
id := (size / 2) + (size % 2)
id := (size / Font_Size_Interval) + (size % Font_Size_Interval)
px_render := & def.size_table[ id - 1 ]
// This is free for now perf wise... may have to move this out to on a setting change later.
rl.SetTextureFilter( px_render.texture, rl.TextureFilter.TRILINEAR )
if id <= 8 {
rl.SetTextureFilter( px_render.texture, rl.TextureFilter.POINT )
}
else if id <= 14 {
rl.SetTextureFilter( px_render.texture, rl.TextureFilter.POINT )
}
else if id <= 48 {
rl.SetTextureFilter( px_render.texture, rl.TextureFilter.POINT )
}
else if id > 48 {
rl.SetTextureFilter( px_render.texture, rl.TextureFilter.POINT )
}
rl_font : rl.Font
rl_font.baseSize = px_render.size