Checks if multiplying texture width and height would overflow before
performing the operation. This avoids incorrect memory allocations and
potential crashes with very large textures.
Fixes#6358
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
* Add BOM skip and fix mtl parsing
* Remove old code
* Fix#5635
* Add all attributes to ObjFileData
---------
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
The process incorrectly deleted original meshes from the scene when cleaning up after an error if those meshes had been added to its output list (outMeshes). The fix ensures proper ownership transfer by nullifying the original mesh pointer in the scene (pScene->mMeshes[i] = nullptr;) when the mesh is moved to outMeshes. This prevents the scene destructor from attempting to delete the mesh again later, while allowing the error cleanup path in SortByPTypeProcess to correctly delete all meshes it owns (both newly created and transferred originals).
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
The loader attempted to read the MDL header without verifying if the input buffer was large enough.
Added a check in MDLImporter::InternReadFile_HL1 to ensure the buffer size is sufficient before proceeding with loading.
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
* Refix export fbx PolygonVertexIndex
* Fix the function ColladaParser::ReadEffectColor when the flag ASSIMP_DOUBLE_PRESICION is enabled
* Fix the static function ReadLight in ColladaParser when the flag ASSIMP_DOUBLE_PRESICION is enabled
* Refactor of the call of the function fast_atoreal_move to the member of aiColor3D
* Fix the call of the function fast_atoreal_move when the flag ASSIMP_DOUBLE_PRESICION is enabled and and refactor
* Fix the call of the function fast_atoreal_move when the flag ASSIMP_DOUBLE_PRESICION is enabled
---------
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
* AC: Support Double-Sided Faces
The AC format marks double-sided SURF elements with the 0x20 flag, which Assimp ignored. This commit adds support for double-sided faces.
On encountering a double-sided face via the flag mentioned above, the front face is generated as usual but is then duplicated. The winding order of the duplicate is flipped to form a back face. Vertices are duplicated too so that back faces work correctly with normal vector generation and face smoothing.
* Add test file
* Simplify test case
---------
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>
description:
- The current implementation has faulty reallocation logic when parsing a CSM file
- Issue 1
- 4ad1d2aa30/code/AssetLib/CSM/CSMLoader.cpp (L205)
- By assigning s->mNumPositionKeys = alloc*2 right before resizing the buffer, making s->mNumPositionKeys equivalent to the
max number of aiVectorKey that can be stored in s->mPositionKeys
- the code later attempts to get the next write location by doing: aiVectorKey* sub = s->mPositionKeys + s->mNumPositionKeys;
- this points to the end of the array, not after the last element in the array
- Issue 2
- 4ad1d2aa30/code/AssetLib/CSM/CSMLoader.cpp (L178-L184)
- if the CSM file does not declare last frame data, then mPositionKeys will never be initialized
fix:
- we preserve s->mNumPositionKeys to still contain the actual number of aiVectorKeys and ensure that we will not write out of bounds
- we initialize mPositionKeys with a default value and if we find last frame info, we just re-initialize it
Co-authored-by: Vinz Spring <vinzs@amazon.de>
Co-authored-by: Kim Kulling <kimkulling@users.noreply.github.com>