Merge remote-tracking branch 'refs/remotes/origin/master' into vulkan
Former-commit-id: e4243c916b02d58153bbda5cb317a75dbaba4a1c [formerly b061bd4916fdfb2ddb8f9a5321a2474427cd1e0b] Former-commit-id: 45002c1ea81078974e4c77a2f70273515c09a134
This commit is contained in:
@@ -298,12 +298,12 @@ namespace Nz
|
||||
|
||||
namespace Loaders
|
||||
{
|
||||
void RegisterOBJ()
|
||||
void RegisterOBJLoader()
|
||||
{
|
||||
MeshLoader::RegisterLoader(IsSupported, Check, Load);
|
||||
}
|
||||
|
||||
void UnregisterOBJ()
|
||||
void UnregisterOBJLoader()
|
||||
{
|
||||
MeshLoader::UnregisterLoader(IsSupported, Check, Load);
|
||||
}
|
||||
|
||||
@@ -13,8 +13,8 @@ namespace Nz
|
||||
{
|
||||
namespace Loaders
|
||||
{
|
||||
void RegisterOBJ();
|
||||
void UnregisterOBJ();
|
||||
void RegisterOBJLoader();
|
||||
void UnregisterOBJLoader();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -125,9 +125,9 @@ namespace Nz
|
||||
for (unsigned int i = 0; i < vertexCount; ++i)
|
||||
{
|
||||
int offset;
|
||||
int& n = currentMesh->vertices[face.firstVertex + i].normal;
|
||||
int& p = currentMesh->vertices[face.firstVertex + i].position;
|
||||
int& t = currentMesh->vertices[face.firstVertex + i].texCoord;
|
||||
int n = 0;
|
||||
int p = 0;
|
||||
int t = 0;
|
||||
|
||||
if (std::sscanf(&m_currentLine[pos], "%d/%d/%d%n", &p, &t, &n, &offset) != 3)
|
||||
{
|
||||
@@ -199,6 +199,10 @@ namespace Nz
|
||||
break;
|
||||
}
|
||||
|
||||
currentMesh->vertices[face.firstVertex + i].normal = static_cast<std::size_t>(n);
|
||||
currentMesh->vertices[face.firstVertex + i].position = static_cast<std::size_t>(p);
|
||||
currentMesh->vertices[face.firstVertex + i].texCoord = static_cast<std::size_t>(t);
|
||||
|
||||
pos += offset;
|
||||
}
|
||||
|
||||
|
||||
@@ -121,7 +121,7 @@ namespace Nz
|
||||
ImageType type = image.GetType();
|
||||
if (type != ImageType_1D && type != ImageType_2D)
|
||||
{
|
||||
NazaraError("Image type 0x" + String::Number(type, 16) + " is not ");
|
||||
NazaraError("Image type 0x" + String::Number(type, 16) + " is not in a supported format");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,6 +12,13 @@ namespace Nz
|
||||
{
|
||||
namespace
|
||||
{
|
||||
UInt32 GetterSequential(const void* buffer, unsigned int i)
|
||||
{
|
||||
NazaraUnused(buffer);
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
UInt32 Getter16(const void* buffer, unsigned int i)
|
||||
{
|
||||
const UInt16* ptr = static_cast<const UInt16*>(buffer);
|
||||
@@ -42,61 +49,67 @@ namespace Nz
|
||||
}
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(IndexBuffer* indexBuffer, BufferAccess access) :
|
||||
m_indexCount(indexBuffer->GetIndexCount())
|
||||
IndexMapper::IndexMapper(IndexBuffer* indexBuffer, BufferAccess access, std::size_t indexCount) :
|
||||
m_indexCount((indexCount != 0) ? indexCount : indexBuffer->GetIndexCount())
|
||||
{
|
||||
#if NAZARA_UTILITY_SAFE
|
||||
if (!indexBuffer)
|
||||
{
|
||||
NazaraError("Index buffer must be valid");
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
NazaraAssert(indexCount != 0 || indexBuffer, "Invalid index count with invalid index buffer");
|
||||
|
||||
if (!m_mapper.Map(indexBuffer, access))
|
||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||
|
||||
if (indexBuffer->HasLargeIndices())
|
||||
if (indexBuffer)
|
||||
{
|
||||
m_getter = Getter32;
|
||||
if (access != BufferAccess_ReadOnly)
|
||||
m_setter = Setter32;
|
||||
if (!m_mapper.Map(indexBuffer, access))
|
||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||
|
||||
if (indexBuffer->HasLargeIndices())
|
||||
{
|
||||
m_getter = Getter32;
|
||||
if (access != BufferAccess_ReadOnly)
|
||||
m_setter = Setter32;
|
||||
else
|
||||
m_setter = SetterError;
|
||||
}
|
||||
else
|
||||
m_setter = SetterError;
|
||||
{
|
||||
m_getter = Getter16;
|
||||
if (access != BufferAccess_ReadOnly)
|
||||
m_setter = Setter16;
|
||||
else
|
||||
m_setter = SetterError;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_getter = Getter16;
|
||||
if (access != BufferAccess_ReadOnly)
|
||||
m_setter = Setter16;
|
||||
else
|
||||
m_setter = SetterError;
|
||||
m_getter = GetterSequential;
|
||||
m_setter = SetterError;
|
||||
}
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access) :
|
||||
IndexMapper::IndexMapper(SubMesh* subMesh, BufferAccess access) :
|
||||
IndexMapper(subMesh->GetIndexBuffer(), access, (subMesh->GetIndexBuffer()) ? 0 : subMesh->GetVertexCount())
|
||||
{
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(const IndexBuffer* indexBuffer, BufferAccess access, std::size_t indexCount) :
|
||||
m_setter(SetterError),
|
||||
m_indexCount(indexBuffer->GetIndexCount())
|
||||
m_indexCount((indexCount != 0) ? indexCount : indexBuffer->GetIndexCount())
|
||||
{
|
||||
#if NAZARA_UTILITY_SAFE
|
||||
if (!indexBuffer)
|
||||
NazaraAssert(indexCount != 0 || indexBuffer, "Invalid index count with invalid index buffer");
|
||||
|
||||
if (indexBuffer)
|
||||
{
|
||||
NazaraError("Index buffer must be valid");
|
||||
return;
|
||||
if (!m_mapper.Map(indexBuffer, access))
|
||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||
|
||||
if (indexBuffer->HasLargeIndices())
|
||||
m_getter = Getter32;
|
||||
else
|
||||
m_getter = Getter16;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!m_mapper.Map(indexBuffer, access))
|
||||
NazaraError("Failed to map buffer"); ///TODO: Unexcepted
|
||||
|
||||
if (indexBuffer->HasLargeIndices())
|
||||
m_getter = Getter32;
|
||||
else
|
||||
m_getter = Getter16;
|
||||
m_getter = GetterSequential;
|
||||
}
|
||||
|
||||
IndexMapper::IndexMapper(const SubMesh* subMesh) :
|
||||
IndexMapper(subMesh->GetIndexBuffer())
|
||||
IndexMapper::IndexMapper(const SubMesh* subMesh, BufferAccess access) :
|
||||
IndexMapper(subMesh->GetIndexBuffer(), access, (subMesh->GetIndexBuffer()) ? 0 : subMesh->GetVertexCount())
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -697,4 +697,5 @@ namespace Nz
|
||||
MeshLoader::LoaderList Mesh::s_loaders;
|
||||
MeshManager::ManagerMap Mesh::s_managerMap;
|
||||
MeshManager::ManagerParams Mesh::s_managerParameters;
|
||||
MeshSaver::SaverList Mesh::s_savers;
|
||||
}
|
||||
|
||||
@@ -17,12 +17,19 @@ namespace Nz
|
||||
m_triangleIndices[1] = m_indexMapper.Get(1);
|
||||
m_triangleIndices[2] = m_indexMapper.Get(2);
|
||||
|
||||
m_indexCount = indexBuffer->GetIndexCount();
|
||||
m_indexCount = m_indexMapper.GetIndexCount();
|
||||
}
|
||||
|
||||
TriangleIterator::TriangleIterator(SubMesh* subMesh) :
|
||||
TriangleIterator(subMesh->GetPrimitiveMode(), subMesh->GetIndexBuffer())
|
||||
TriangleIterator::TriangleIterator(const SubMesh* subMesh) :
|
||||
m_primitiveMode(subMesh->GetPrimitiveMode()),
|
||||
m_indexMapper(subMesh, BufferAccess_ReadOnly)
|
||||
{
|
||||
m_currentIndex = 3;
|
||||
m_triangleIndices[0] = m_indexMapper.Get(0);
|
||||
m_triangleIndices[1] = m_indexMapper.Get(1);
|
||||
m_triangleIndices[2] = m_indexMapper.Get(2);
|
||||
|
||||
m_indexCount = m_indexMapper.GetIndexCount();
|
||||
}
|
||||
|
||||
bool TriangleIterator::Advance()
|
||||
|
||||
@@ -124,7 +124,7 @@ namespace Nz
|
||||
Loaders::RegisterMD5Anim(); // Loader de fichiers .md5anim (v10)
|
||||
|
||||
// Mesh (text)
|
||||
Loaders::RegisterOBJ();
|
||||
Loaders::RegisterOBJLoader();
|
||||
|
||||
// Mesh
|
||||
Loaders::RegisterMD2(); // Loader de fichiers .md2 (v8)
|
||||
@@ -162,7 +162,7 @@ namespace Nz
|
||||
Loaders::UnregisterMD2();
|
||||
Loaders::UnregisterMD5Anim();
|
||||
Loaders::UnregisterMD5Mesh();
|
||||
Loaders::UnregisterOBJ();
|
||||
Loaders::UnregisterOBJLoader();
|
||||
Loaders::UnregisterPCX();
|
||||
Loaders::UnregisterSTBLoader();
|
||||
Loaders::UnregisterSTBSaver();
|
||||
|
||||
@@ -47,6 +47,42 @@ namespace Nz
|
||||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||
m_mapper.Map(vertexBuffer, access);
|
||||
}
|
||||
|
||||
VertexMapper::VertexMapper(const SubMesh* subMesh, BufferAccess access)
|
||||
{
|
||||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||
|
||||
const VertexBuffer* buffer = nullptr;
|
||||
switch (subMesh->GetAnimationType())
|
||||
{
|
||||
case AnimationType_Skeletal:
|
||||
{
|
||||
const SkeletalMesh* skeletalMesh = static_cast<const SkeletalMesh*>(subMesh);
|
||||
buffer = skeletalMesh->GetVertexBuffer();
|
||||
break;
|
||||
}
|
||||
|
||||
case AnimationType_Static:
|
||||
{
|
||||
const StaticMesh* staticMesh = static_cast<const StaticMesh*>(subMesh);
|
||||
buffer = staticMesh->GetVertexBuffer();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
{
|
||||
NazaraInternalError("Animation type not handled (0x" + String::Number(subMesh->GetAnimationType(), 16) + ')');
|
||||
}
|
||||
|
||||
m_mapper.Map(buffer, access);
|
||||
}
|
||||
|
||||
VertexMapper::VertexMapper(const VertexBuffer* vertexBuffer, BufferAccess access)
|
||||
{
|
||||
ErrorFlags flags(ErrorFlag_ThrowException, true);
|
||||
m_mapper.Map(vertexBuffer, access);
|
||||
}
|
||||
|
||||
VertexMapper::~VertexMapper() = default;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user