Added mip selection using ray differentials

This commit is contained in:
2025-12-29 23:36:21 +09:00
parent adee5acd10
commit 400137ee99
12 changed files with 125 additions and 28 deletions

View File

@@ -68,14 +68,27 @@ typedef struct
uint16_t id;
} texture_handle_t;
typedef struct
{
vec3s view_direction;
vec3s normal;
vec3s edge1;
vec3s edge2;
vec2s uv1;
vec2s uv2;
float ray_width;
float distance;
} texture_sample_context_t;
bool texture_collection_init(uint16_t size, texture_collection_t* textures);
void texture_collection_resize(texture_collection_t* textures, uint16_t size);
void texture_collection_free(texture_collection_t* textures);
texture_handle_t texture_load(const char* filename, bool srgb, bool mipmap, stride_t stride, texture_collection_t* textures);
vec4s texture_get_pixel(const texture_t* texture, vec2s uv, uint8_t lod);
float texture_get_sample_lod(vec3s view_direction, vec3s normal, float distance);
vec4s texture_sample(const texture_t* texture, vec2s uv, vec3s view_direction, vec3s normal, float distance);
float texture_get_sample_lod(const texture_t* texture, const texture_sample_context_t* sample_context);
vec4s texture_sample(const texture_t* texture, const texture_sample_context_t* sample_context, vec2s uv);
vec4s texture_sample_lod(const texture_t* texture, vec2s uv, float lod);
void texture_free(texture_t* texture);