Clean up
This commit is contained in:
parent
824bdec70b
commit
08f66e867c
106
src/models.c
106
src/models.c
|
|
@ -3446,11 +3446,7 @@ static Model LoadGLTF(const char *fileName)
|
||||||
|
|
||||||
*************************************************************************************/
|
*************************************************************************************/
|
||||||
|
|
||||||
<<<<<<< HEAD
|
|
||||||
#define LOAD_ACCESSOR(type, nbcomp, acc, dst) \
|
|
||||||
=======
|
|
||||||
#define LOAD_ACCESSOR(type, nbcomp, acc, dst) \
|
#define LOAD_ACCESSOR(type, nbcomp, acc, dst) \
|
||||||
>>>>>>> 55129d509fe0095344d635ac9d996abf4ca3b67d
|
|
||||||
{ \
|
{ \
|
||||||
int n = 0; \
|
int n = 0; \
|
||||||
type* buf = (type*)acc->buffer_view->buffer->data+acc->buffer_view->offset/sizeof(type)+acc->offset/sizeof(type); \
|
type* buf = (type*)acc->buffer_view->buffer->data+acc->buffer_view->offset/sizeof(type)+acc->offset/sizeof(type); \
|
||||||
|
|
@ -3513,125 +3509,29 @@ static Model LoadGLTF(const char *fileName)
|
||||||
model.materials[i] = LoadMaterialDefault();
|
model.materials[i] = LoadMaterialDefault();
|
||||||
Color tint = (Color){ 1.0f, 1.0f, 1.0f, 1.0f };
|
Color tint = (Color){ 1.0f, 1.0f, 1.0f, 1.0f };
|
||||||
const char *texPath = GetDirectoryPath(fileName);
|
const char *texPath = GetDirectoryPath(fileName);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
//Ensure material follows raylibe support for PBR (metallic/roughness flow)
|
//Ensure material follows raylib support for PBR (metallic/roughness flow)
|
||||||
if (data->materials[i].has_pbr_metallic_roughness) {
|
if (data->materials[i].has_pbr_metallic_roughness) {
|
||||||
float roughness = data->materials[i].pbr_metallic_roughness.roughness_factor;
|
float roughness = data->materials[i].pbr_metallic_roughness.roughness_factor;
|
||||||
float metallic = data->materials[i].pbr_metallic_roughness.metallic_factor;
|
float metallic = data->materials[i].pbr_metallic_roughness.metallic_factor;
|
||||||
|
|
||||||
strcpy(model.materials[i].name, data->materials[i].name);
|
strcpy(model.materials[i].name, data->materials[i].name);
|
||||||
|
|
||||||
=======
|
|
||||||
|
|
||||||
if (data->materials[i].has_pbr_metallic_roughness)
|
|
||||||
{
|
|
||||||
>>>>>>> 55129d509fe0095344d635ac9d996abf4ca3b67d
|
|
||||||
tint.r = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[0]*255.99f);
|
tint.r = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[0]*255.99f);
|
||||||
tint.g = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[1]*255.99f);
|
tint.g = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[1]*255.99f);
|
||||||
tint.b = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[2]*255.99f);
|
tint.b = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[2]*255.99f);
|
||||||
tint.a = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[3]*255.99f);
|
tint.a = (unsigned char)(data->materials[i].pbr_metallic_roughness.base_color_factor[3]*255.99f);
|
||||||
<<<<<<< HEAD
|
|
||||||
|
|
||||||
model.materials[i].maps[MAP_ALBEDO].texture = LoadTextureFromCGLTFTextureView(data->materials[i].pbr_metallic_roughness.base_color_texture.texture->image, tint, texPath);
|
model.materials[i].maps[MAP_ALBEDO].texture = LoadTextureFromCGLTFTextureView(data->materials[i].pbr_metallic_roughness.base_color_texture.texture->image, tint, texPath);
|
||||||
|
|
||||||
tint = (Color){ 1.0f, 1.0f, 1.0f, 1.0f };
|
//tint isn't need for other textures.. pass null or clear?
|
||||||
|
tint = (Color){ 0.0f, 0.0f, 0.0f, 0.0f };
|
||||||
model.materials[i].maps[MAP_ROUGHNESS].texture = LoadTextureFromCGLTFTextureView(data->materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture->image, tint, texPath);
|
model.materials[i].maps[MAP_ROUGHNESS].texture = LoadTextureFromCGLTFTextureView(data->materials[i].pbr_metallic_roughness.metallic_roughness_texture.texture->image, tint, texPath);
|
||||||
model.materials[i].maps[MAP_ROUGHNESS].value = roughness;
|
model.materials[i].maps[MAP_ROUGHNESS].value = roughness;
|
||||||
model.materials[i].maps[MAP_METALNESS].value = metallic;
|
model.materials[i].maps[MAP_METALNESS].value = metallic;
|
||||||
|
|
||||||
model.materials[i].maps[MAP_NORMAL].texture = LoadTextureFromCGLTFTextureView(data->materials[i].normal_texture.texture->image, tint, texPath);
|
model.materials[i].maps[MAP_NORMAL].texture = LoadTextureFromCGLTFTextureView(data->materials[i].normal_texture.texture->image, tint, texPath);
|
||||||
model.materials[i].maps[MAP_OCCLUSION].texture = LoadTextureFromCGLTFTextureView(data->materials[i].occlusion_texture.texture->image, tint, texPath);
|
model.materials[i].maps[MAP_OCCLUSION].texture = LoadTextureFromCGLTFTextureView(data->materials[i].occlusion_texture.texture->image, tint, texPath);
|
||||||
=======
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
tint.r = 1.0f;
|
|
||||||
tint.g = 1.0f;
|
|
||||||
tint.b = 1.0f;
|
|
||||||
tint.a = 1.0f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (data->materials[i].has_pbr_metallic_roughness)
|
|
||||||
{
|
|
||||||
cgltf_image *img = data->materials[i].pbr_metallic_roughness.base_color_texture.texture->image;
|
|
||||||
|
|
||||||
if (img->uri)
|
|
||||||
{
|
|
||||||
if ((strlen(img->uri) > 5) &&
|
|
||||||
(img->uri[0] == 'd') &&
|
|
||||||
(img->uri[1] == 'a') &&
|
|
||||||
(img->uri[2] == 't') &&
|
|
||||||
(img->uri[3] == 'a') &&
|
|
||||||
(img->uri[4] == ':'))
|
|
||||||
{
|
|
||||||
// Data URI
|
|
||||||
// Format: data:<mediatype>;base64,<data>
|
|
||||||
|
|
||||||
// Find the comma
|
|
||||||
int i = 0;
|
|
||||||
while ((img->uri[i] != ',') && (img->uri[i] != 0)) i++;
|
|
||||||
|
|
||||||
if (img->uri[i] == 0) TraceLog(LOG_WARNING, "[%s] Invalid data URI", fileName);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
int size;
|
|
||||||
unsigned char *data = DecodeBase64(img->uri + i + 1, &size);
|
|
||||||
|
|
||||||
int w, h;
|
|
||||||
unsigned char *raw = stbi_load_from_memory(data, size, &w, &h, NULL, 4);
|
|
||||||
|
|
||||||
Image image = LoadImagePro(raw, w, h, UNCOMPRESSED_R8G8B8A8);
|
|
||||||
ImageColorTint(&image, tint);
|
|
||||||
texture = LoadTextureFromImage(image);
|
|
||||||
UnloadImage(image);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char *textureName = img->uri;
|
|
||||||
char *texturePath = RL_MALLOC(strlen(texPath) + strlen(textureName) + 2);
|
|
||||||
strcpy(texturePath, texPath);
|
|
||||||
strcat(texturePath, "/");
|
|
||||||
strcat(texturePath, textureName);
|
|
||||||
|
|
||||||
Image image = LoadImage(texturePath);
|
|
||||||
ImageColorTint(&image, tint);
|
|
||||||
texture = LoadTextureFromImage(image);
|
|
||||||
UnloadImage(image);
|
|
||||||
RL_FREE(texturePath);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (img->buffer_view)
|
|
||||||
{
|
|
||||||
unsigned char *data = RL_MALLOC(img->buffer_view->size);
|
|
||||||
int n = img->buffer_view->offset;
|
|
||||||
int stride = img->buffer_view->stride ? img->buffer_view->stride : 1;
|
|
||||||
|
|
||||||
for (int i = 0; i < img->buffer_view->size; i++)
|
|
||||||
{
|
|
||||||
data[i] = ((unsigned char *)img->buffer_view->buffer->data)[n];
|
|
||||||
n += stride;
|
|
||||||
}
|
|
||||||
|
|
||||||
int w, h;
|
|
||||||
unsigned char *raw = stbi_load_from_memory(data, img->buffer_view->size, &w, &h, NULL, 4);
|
|
||||||
|
|
||||||
Image image = LoadImagePro(raw, w, h, UNCOMPRESSED_R8G8B8A8);
|
|
||||||
ImageColorTint(&image, tint);
|
|
||||||
texture = LoadTextureFromImage(image);
|
|
||||||
UnloadImage(image);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Image image = LoadImageEx(&tint, 1, 1);
|
|
||||||
texture = LoadTextureFromImage(image);
|
|
||||||
UnloadImage(image);
|
|
||||||
}
|
|
||||||
|
|
||||||
model.materials[i] = LoadMaterialDefault();
|
|
||||||
model.materials[i].maps[MAP_DIFFUSE].texture = texture;
|
|
||||||
>>>>>>> 55129d509fe0095344d635ac9d996abf4ca3b67d
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user