@@ -141,6 +141,10 @@ bool Scene::load(const char* file)
141141 }
142142 }
143143
144+ center = minBounds + (maxBounds - minBounds) / 2 .0f ;
145+ glm::vec3 extent = glm::abs (maxBounds - minBounds);
146+ diagonal = glm::sqrt (glm::dot (extent, extent));
147+
144148 char dir[bx::kMaxFilePath ] = " " ;
145149 bx::strCopy (dir, BX_COUNTOF (dir), bx::FilePath (file).getPath ());
146150 for (unsigned int i = 0 ; i < scene->mNumMaterials ; i++)
@@ -214,9 +218,6 @@ Mesh Scene::loadMesh(const aiMesh* mesh)
214218
215219 minBounds = glm::min (minBounds, { pos.x , pos.y , pos.z });
216220 maxBounds = glm::max (maxBounds, { pos.x , pos.y , pos.z });
217- center = minBounds + (maxBounds - minBounds) / 2 .0f ;
218- glm::vec3 extent = glm::abs (maxBounds - minBounds);
219- diagonal = glm::sqrt (glm::dot (extent, extent));
220221
221222 aiVector3D nrm = mesh->mNormals [i];
222223 vertex.nx = nrm.x ;
@@ -286,7 +287,7 @@ Material Scene::loadMaterial(const aiMaterial* material, const char* dir)
286287 aiString pathBaseColor;
287288 pathBaseColor.Set (dir);
288289 pathBaseColor.Append (fileBaseColor.C_Str ());
289- out.baseColorTexture = loadTexture (pathBaseColor.C_Str ());
290+ out.baseColorTexture = loadTexture (pathBaseColor.C_Str (), true /* sRGB */ );
290291 }
291292
292293 aiColor4D baseColorFactor;
@@ -352,7 +353,7 @@ Material Scene::loadMaterial(const aiMaterial* material, const char* dir)
352353 aiString pathEmissive;
353354 pathEmissive.Set (dir);
354355 pathEmissive.Append (fileEmissive.C_Str ());
355- out.emissiveTexture = loadTexture (pathEmissive.C_Str ());
356+ out.emissiveTexture = loadTexture (pathEmissive.C_Str (), true /* sRGB */ );
356357 }
357358
358359// assimp doesn't define this
@@ -385,7 +386,7 @@ Camera Scene::loadCamera(const aiCamera* camera)
385386 return cam;
386387}
387388
388- bgfx::TextureHandle Scene::loadTexture (const char * file)
389+ bgfx::TextureHandle Scene::loadTexture (const char * file, bool sRGB )
389390{
390391 void * data = nullptr ;
391392 uint32_t size = 0 ;
@@ -417,16 +418,19 @@ bgfx::TextureHandle Scene::loadTexture(const char* file)
417418 image);
418419 BX_FREE (&allocator, data);
419420
420- if (bgfx::isTextureValid (
421- 0 , false , image->m_numLayers , (bgfx::TextureFormat::Enum)image->m_format , BGFX_TEXTURE_NONE))
421+ uint64_t textureFlags = BGFX_TEXTURE_NONE | BGFX_SAMPLER_MIN_ANISOTROPIC | BGFX_SAMPLER_MAG_ANISOTROPIC;
422+ if (sRGB )
423+ textureFlags |= BGFX_TEXTURE_SRGB;
424+
425+ if (bgfx::isTextureValid (0 , false , image->m_numLayers , (bgfx::TextureFormat::Enum)image->m_format , textureFlags))
422426 {
423427 bgfx::TextureHandle tex =
424428 bgfx::createTexture2D ((uint16_t )image->m_width ,
425429 (uint16_t )image->m_height ,
426430 image->m_numMips > 1 ,
427431 image->m_numLayers ,
428432 (bgfx::TextureFormat::Enum)image->m_format ,
429- BGFX_TEXTURE_NONE | BGFX_SAMPLER_MIN_ANISOTROPIC | BGFX_SAMPLER_MAG_ANISOTROPIC ,
433+ textureFlags ,
430434 mem);
431435 // bgfx::setName(tex, file); // causes debug errors with DirectX SetPrivateProperty duplicate
432436 return tex;
0 commit comments