Big skeletal animation update

Added MeshInfos demo
Added MD5Mesh/MD5Anim loader support
Added Node class
Fixed ResourceParams not being exported
Added support for skeletal animation
(Animation/Mesh/Joint/SkeletalMesh/Skeleton)
Meshes are now only stored with VertexStruct_XYZ_Normal_UV_Tangent type
Moved Sequence declaration to Sequence.hpp

-Animation:
Renamed Create to Create[Keyframe|Skeletal]

-AxisAlignedBox:
Added Contains method
Added GetCorner method
Added GetCube method
Added Transform method

-Cube/Rect:
Added GetPosition method
Added GetSize method
(Almost) Fixed ExtendTo method
Fixed GetCenter method

-File:
Added GetDirectory static function
Added GetPath method
Renamed GetDirectoryPath method to GetDirectory

-Math module:
Fixed constructor/methods taking a non-const array
GetNormal/Normalize methods now takes an optionnal integer pointer
(returning length)
Made all classes default constructor trivial
Inverse, MakeIdentity, MakeZero, Normalize, Set methods now returns
reference to object

-Matrix4:
Modified methods to avoid copies
Removed COW (Too much overhead)
Removed Concatenate[Affine] static function

-Mesh:
Renamed Create to Create[Keyframe|Skeletal|Static]
Renamed Skin to Material

-MeshParams:
No longer takes declaration argument
Renamed loadAnimations to animated
Storage default to BufferStorage_Hardware if supported and
BufferStorage_Software otherwise

-OpenGL:
Added glGetBooleanv function
Added glIsEnabled function

-Quaternion:
Added ComputeW method
Added Conjugate method

-Renderer:
Added IsEnabled static function
Fixed GetLineWidth function not being static
Removed SetVertexDeclaration

-RenderWindow:
Made CopyTo[Image|Texture] method constant

-Resource
Fixed RemoveResourceListener crash

-ResourceLoader:
Loaders are now used in a LIFO context

-Stream:
Renamed GetLine method to ReadLine

-String:
Fixed Simplified

-Utility module
Added configuration define for strict resource parsing

-VertexBuffer
Now takes a VertexDeclaration pointer

-VertexDeclaration
No longer throw an error when getting a non-existing element


Former-commit-id: f7358c1231d6af48b799d2f24f077a001e16785b
This commit is contained in:
Lynix
2012-11-21 17:23:50 +01:00
parent 84f73f2b6a
commit 70ef422950
99 changed files with 6270 additions and 1983 deletions

View File

@@ -158,18 +158,11 @@ nzUInt64 NzFile::GetCursorPos() const
return m_impl->GetCursorPos();
}
NzString NzFile::GetDirectoryPath() const
NzString NzFile::GetDirectory() const
{
NazaraLock(m_mutex)
return m_filePath.SubstrTo(NAZARA_DIRECTORY_SEPARATOR, -1, true);
}
NzString NzFile::GetFilePath() const
{
NazaraLock(m_mutex)
return m_filePath;
return m_filePath.SubstrTo(NAZARA_DIRECTORY_SEPARATOR, -1, true, true);
}
NzString NzFile::GetFileName() const
@@ -193,6 +186,13 @@ time_t NzFile::GetLastWriteTime() const
return GetLastWriteTime(m_filePath);
}
NzString NzFile::GetPath() const
{
NazaraLock(m_mutex)
return m_filePath;
}
nzUInt64 NzFile::GetSize() const
{
NazaraLock(m_mutex)
@@ -602,6 +602,11 @@ time_t NzFile::GetCreationTime(const NzString& filePath)
return NzFileImpl::GetCreationTime(NormalizePath(filePath));
}
NzString NzFile::GetDirectory(const NzString& filePath)
{
return filePath.SubstrTo(NAZARA_DIRECTORY_SEPARATOR, -1, true, true);
}
time_t NzFile::GetLastAccessTime(const NzString& filePath)
{
if (filePath.IsEmpty())
@@ -642,29 +647,25 @@ nzUInt64 NzFile::GetSize(const NzString& filePath)
return NzFileImpl::GetSize(NormalizePath(filePath));
}
bool NzFile::IsAbsolute(const NzString& path)
bool NzFile::IsAbsolute(const NzString& filePath)
{
NzString wpath(path);
wpath.Trim();
if (wpath.IsEmpty())
NzString path(filePath.Trimmed());
if (path.IsEmpty())
return false;
#if NAZARA_CORE_NORMALIZE_DIRECTORY_SEPARATORS
wpath = NormalizeSeparators(wpath);
#endif
path = NormalizeSeparators(path);
#ifdef NAZARA_PLATFORM_WINDOWS
if (path.Match("?:*"))
if (path.Match("?:*")) // Ex: C:\Hello
return true;
else if (path.Match("\\\\*"))
else if (path.Match("\\\\*")) // Ex: \\Laptop
return true;
else if (wpath.StartsWith('\\')) // Spécial : '\' fait référence au disque racine
else if (path.StartsWith('\\')) // Spécial : '\' fait référence au disque racine
return true;
else
return false;
#elif defined(NAZARA_PLATEFORM_LINUX)
return wpath.StartsWith('/');
return path.StartsWith('/');
#else
#error OS case not implemented
#endif
@@ -672,12 +673,7 @@ bool NzFile::IsAbsolute(const NzString& path)
NzString NzFile::NormalizePath(const NzString& filePath)
{
NzString path(filePath);
path.Trim();
#if NAZARA_CORE_NORMALIZE_DIRECTORY_SEPARATORS
path = NormalizeSeparators(path);
#endif
NzString path = NormalizeSeparators(filePath.Trimmed());
if (!IsAbsolute(path))
path = NzDirectory::GetCurrent() + NAZARA_DIRECTORY_SEPARATOR + path;

View File

@@ -8,7 +8,7 @@
NzInputStream::~NzInputStream() = default;
NzString NzInputStream::GetLine(unsigned int lineSize)
NzString NzInputStream::ReadLine(unsigned int lineSize)
{
NzString line;
if (lineSize == 0) // Taille maximale indéterminée

View File

@@ -79,7 +79,7 @@ NzString NzLog::GetFile() const
NazaraLock(m_mutex)
if (m_file)
return m_file->GetFilePath();
return m_file->GetPath();
else
return NzString();
}

View File

@@ -23,9 +23,13 @@ m_resourceReferenceCount(0)
NzResource::~NzResource()
{
EnsureResourceListenerUpdate();
for (const NzResourceEntry& entry : m_resourceListenersCache)
entry.listener->OnResourceReleased(this, entry.index);
for (auto it = m_resourceListenersCache.begin(); it != m_resourceListenersCache.end(); ++it)
(*it).listener->OnResourceReleased(this, (*it).index);
#if NAZARA_CORE_SAFE
if (m_resourceReferenceCount > 0)
NazaraWarning("Resource destroyed while still referenced " + NzString::Number(m_resourceReferenceCount) + " time(s)");
#endif
}
void NzResource::AddResourceListener(NzResourceListener* listener, int index) const
@@ -57,14 +61,31 @@ bool NzResource::IsPersistent() const
void NzResource::RemoveResourceListener(NzResourceListener* listener) const
{
NazaraLock(m_mutex)
NazaraMutexLock(m_mutex);
if (m_resourceListeners.erase(listener) != 0)
m_resourceListenerUpdated = false;
else
NazaraError(NzString::Pointer(listener) + " is not listening to " + NzString::Pointer(this));
NazaraError(NzString::Pointer(listener) + " is not a listener of " + NzString::Pointer(this));
RemoveResourceReference();
// RemoveResourceReference()
#if NAZARA_CORE_SAFE
if (m_resourceReferenceCount == 0)
{
NazaraError("Impossible to remove reference (Ref. counter is already 0)");
return;
}
#endif
if (--m_resourceReferenceCount == 0 && !m_resourcePersistent)
{
NazaraMutexUnlock(m_mutex);
delete this;
}
else
{
NazaraMutexUnlock(m_mutex);
}
}
void NzResource::RemoveResourceReference() const
@@ -112,9 +133,8 @@ void NzResource::NotifyCreated()
NazaraLock(m_mutex)
EnsureResourceListenerUpdate();
for (auto it = m_resourceListenersCache.begin(); it != m_resourceListenersCache.end(); ++it)
(*it).listener->OnResourceCreated(this, (*it).index);
for (const NzResourceEntry& entry : m_resourceListenersCache)
entry.listener->OnResourceCreated(this, entry.index);
}
void NzResource::NotifyDestroy()
@@ -122,9 +142,8 @@ void NzResource::NotifyDestroy()
NazaraLock(m_mutex)
EnsureResourceListenerUpdate();
for (auto it = m_resourceListenersCache.begin(); it != m_resourceListenersCache.end(); ++it)
(*it).listener->OnResourceDestroy(this, (*it).index);
for (const NzResourceEntry& entry : m_resourceListenersCache)
entry.listener->OnResourceDestroy(this, entry.index);
}
void NzResource::EnsureResourceListenerUpdate() const

View File

@@ -7,6 +7,16 @@
NzStream::~NzStream() = default;
NzString NzStream::GetDirectory() const
{
return NzString();
}
NzString NzStream::GetPath() const
{
return NzString();
}
unsigned int NzStream::GetStreamOptions() const
{
return m_streamOptions;

View File

@@ -3369,7 +3369,7 @@ NzString NzString::Simplified(nzUInt32 flags) const
while (++ptr != limit);
}
if (!inword)
if (!inword && p != str)
p--;
*p = '\0';
@@ -4040,7 +4040,7 @@ NzString NzString::Trimmed(char character, nzUInt32 flags) const
{
for (; endPos > 0; --endPos)
{
if (nzToLower(m_sharedString->string[startPos]) != ch)
if (nzToLower(m_sharedString->string[endPos]) != ch)
break;
}
}
@@ -4060,7 +4060,7 @@ NzString NzString::Trimmed(char character, nzUInt32 flags) const
{
for (; endPos > 0; --endPos)
{
if (m_sharedString->string[startPos] != character)
if (m_sharedString->string[endPos] != character)
break;
}
}

View File

@@ -11,10 +11,8 @@
NzSemaphoreImpl::NzSemaphoreImpl(unsigned int count)
{
m_semaphore = CreateSemaphore(nullptr, count, std::numeric_limits<LONG>::max(), nullptr);
#if NAZARA_CORE_SAFE ///FIXME: Ne peut échouer qu'à cause de mauvais paramètres ?
if (!m_semaphore)
NazaraError("Failed to create semaphore: " + NzGetLastSystemError());
#endif
}
NzSemaphoreImpl::~NzSemaphoreImpl()