reset texture path cache on reload
This commit is contained in:
		@@ -502,6 +502,7 @@ static void load_game(void) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
static void reset_state(void) {
 | 
					static void reset_state(void) {
 | 
				
			||||||
    input_reset_state(&ctx.input);
 | 
					    input_reset_state(&ctx.input);
 | 
				
			||||||
 | 
					    textures_reset_state();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,4 +87,6 @@ enum texture_mode textures_get_mode(const struct texture_cache *cache, t_texture
 | 
				
			|||||||
/* returns the number of atlases in the cache */
 | 
					/* returns the number of atlases in the cache */
 | 
				
			||||||
size_t textures_get_num_atlases(const struct texture_cache *cache);
 | 
					size_t textures_get_num_atlases(const struct texture_cache *cache);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void textures_reset_state(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -385,20 +385,20 @@ void textures_update_atlas(struct texture_cache *cache) {
 | 
				
			|||||||
/* EXPERIMANTAL: LIKELY TO BE REMOVED! */
 | 
					/* EXPERIMANTAL: LIKELY TO BE REMOVED! */
 | 
				
			||||||
#ifdef __linux__ /* use rodata elf section for fast lookups of repeating textures */
 | 
					#ifdef __linux__ /* use rodata elf section for fast lookups of repeating textures */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "../system/linux/elf.h"
 | 
					#include "townengine/system/linux/elf.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static const char *rodata_start;
 | 
					static const char *rodata_start;
 | 
				
			||||||
static const char *rodata_stop;
 | 
					static const char *rodata_stop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char *last_path = NULL;
 | 
				
			||||||
 | 
					static t_texture_key last_texture;
 | 
				
			||||||
 | 
					static struct ptr_to_texture {
 | 
				
			||||||
 | 
					    const void *key;
 | 
				
			||||||
 | 
					    t_texture_key value;
 | 
				
			||||||
 | 
					} *ptr_to_texture;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* TODO: separate and reuse */
 | 
					/* TODO: separate and reuse */
 | 
				
			||||||
t_texture_key textures_get_key(struct texture_cache *cache, const char *path) {
 | 
					t_texture_key textures_get_key(struct texture_cache *cache, const char *path) {
 | 
				
			||||||
    static const char *last_path = NULL;
 | 
					 | 
				
			||||||
    static t_texture_key last_texture;
 | 
					 | 
				
			||||||
    static struct ptr_to_texture {
 | 
					 | 
				
			||||||
        const void *key;
 | 
					 | 
				
			||||||
        t_texture_key value;
 | 
					 | 
				
			||||||
    } *ptr_to_texture;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (rodata_stop == NULL)
 | 
					    if (rodata_stop == NULL)
 | 
				
			||||||
        if (!infer_elf_section_bounds(".rodata", &rodata_start, &rodata_stop))
 | 
					        if (!infer_elf_section_bounds(".rodata", &rodata_start, &rodata_stop))
 | 
				
			||||||
            CRY("Section inference", ".rodata section lookup failed");
 | 
					            CRY("Section inference", ".rodata section lookup failed");
 | 
				
			||||||
@@ -548,3 +548,12 @@ enum texture_mode textures_get_mode(const struct texture_cache *cache, t_texture
 | 
				
			|||||||
size_t textures_get_num_atlases(const struct texture_cache *cache) {
 | 
					size_t textures_get_num_atlases(const struct texture_cache *cache) {
 | 
				
			||||||
    return cache->atlas_index + 1;    
 | 
					    return cache->atlas_index + 1;    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void textures_reset_state(void) {
 | 
				
			||||||
 | 
					#ifdef __linux__
 | 
				
			||||||
 | 
					    last_path = NULL;
 | 
				
			||||||
 | 
					    last_texture = (t_texture_key){0};
 | 
				
			||||||
 | 
					    shfree(ptr_to_texture);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user