Add mipmap support and refactor texture handling
Note: Currently version still have lots of fireflies after applying normal map. And those fireflies are mostly coming from the nee sky. Need to double check the sky cdf and ray intersection. Changed the `hit_result_t` structure to rename a parameter in `RayIntersection.h`. Removed the `normal` field from the `path_output` structure in `Common.h`. Added new fields `screen_size`, `camera_position`, and `camera_direction` in `Material.h`. Changed the `mipmap_t` structure in `Texture.h` to include a `max_mip` field and modify the `data` field. Changed the `texture_load` function in `Texture.c` to include a `mipmap` parameter and improve texture data handling. Changed the `path_trace` function in `PathTracing.c` to update the `shading_context_t` structure and ray creation. Changed the `evaluate_bsdf_directional` function in `LightEvaluation.c` to modify angular radius calculation. Changed the `sky_create_hdr_sky` and `evaluate_bsdf_hdr_sky` functions in `SkyLight.c` to enhance texture sampling. Changed the `get_surface_data` function in `SimpleLit.c` to incorporate camera distance and view direction in calculations. Changed the `texture_get_pixel` function in `Texture.c` to improve pixel data retrieval. Changed the `warp_uv` function to use a `vec2s` structure for UV coordinates. Changed the `texture_sample` function to include additional parameters for improved sampling accuracy. Changed the `scene_setup` function in `main.c` to adjust sun light intensity and HDRI texture loading.
This commit is contained in:
@@ -32,11 +32,22 @@ typedef struct
|
||||
{
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
char* data;
|
||||
} mipmap_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
vec2s texel_size;
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
|
||||
wrap_mode_t wrap_mode;
|
||||
filter_mode_t filter_mode;
|
||||
uint8_t channel_count;
|
||||
stride_t stride;
|
||||
char* data;
|
||||
|
||||
uint8_t channel_count;
|
||||
uint8_t max_mip;
|
||||
mipmap_t* data;
|
||||
} texture_t;
|
||||
|
||||
typedef struct
|
||||
@@ -61,9 +72,11 @@ 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_entity_t texture_load(const char* filename, bool srgb, stride_t stride, texture_collection_t* textures);
|
||||
vec4s texture_get_pixel(const texture_t* texture, uint32_t x, uint32_t y);
|
||||
vec4s texture_sample(const texture_t* texture, float u, float v);
|
||||
texture_entity_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);
|
||||
vec4s texture_sample_lod(const texture_t* texture, vec2s uv, float lod);
|
||||
void texture_free(texture_t* texture);
|
||||
|
||||
inline texture_entity_t invalid_texture_entity()
|
||||
|
||||
Reference in New Issue
Block a user