Optimisations

Former-commit-id: 81d277a49b57f061a6339678bd953054e434c613
This commit is contained in:
Lynix
2013-07-03 01:17:22 +02:00
parent 3c1c04b2aa
commit b035852576
14 changed files with 179 additions and 173 deletions

View File

@@ -12,9 +12,9 @@
template<typename Type, typename Parameters>
bool NzResourceLoader<Type, Parameters>::IsExtensionSupported(const NzString& extension)
{
for (auto loader = Type::s_loaders.begin(); loader != Type::s_loaders.end(); ++loader)
for (Loader& loader : Type::s_loaders)
{
ExtensionGetter isExtensionSupported = std::get<0>(*loader);
ExtensionGetter isExtensionSupported = std::get<0>(loader);
if (isExtensionSupported && isExtensionSupported(extension))
return true;
@@ -45,15 +45,15 @@ bool NzResourceLoader<Type, Parameters>::LoadFromFile(Type* resource, const NzSt
NzFile file(path); // Ouvert seulement en cas de besoin
bool found = false;
for (auto loader = Type::s_loaders.begin(); loader != Type::s_loaders.end(); ++loader)
for (Loader& loader : Type::s_loaders)
{
ExtensionGetter isExtensionSupported = std::get<0>(*loader);
ExtensionGetter isExtensionSupported = std::get<0>(loader);
if (!isExtensionSupported || !isExtensionSupported(ext))
continue;
StreamChecker checkFunc = std::get<1>(*loader);
StreamLoader streamLoader = std::get<2>(*loader);
FileLoader fileLoader = std::get<3>(*loader);
StreamChecker checkFunc = std::get<1>(loader);
StreamLoader streamLoader = std::get<2>(loader);
FileLoader fileLoader = std::get<3>(loader);
if (checkFunc && !file.IsOpen())
{
@@ -141,10 +141,10 @@ bool NzResourceLoader<Type, Parameters>::LoadFromStream(Type* resource, NzInputS
nzUInt64 streamPos = stream.GetCursorPos();
bool found = false;
for (auto loader = Type::s_loaders.begin(); loader != Type::s_loaders.end(); ++loader)
for (Loader& loader : Type::s_loaders)
{
StreamChecker checkFunc = std::get<1>(*loader);
StreamLoader streamLoader = std::get<2>(*loader);
StreamChecker checkFunc = std::get<1>(loader);
StreamLoader streamLoader = std::get<2>(loader);
stream.SetCursorPos(streamPos);

View File

@@ -24,7 +24,7 @@ class NAZARA_API NzAbstractRenderQueue : NzNonCopyable
virtual void AddLight(const NzLight* light) = 0;
virtual void AddModel(const NzModel* model) = 0;
virtual void Clear() = 0;
virtual void Clear(bool fully) = 0;
};
#endif // NAZARA_ABSTRACTRENDERQUEUE_HPP

View File

@@ -8,6 +8,8 @@
#define NAZARA_FORWARDRENDERQUEUE_HPP
#include <Nazara/Prerequesites.hpp>
#include <Nazara/Core/Color.hpp>
#include <Nazara/Core/ResourceListener.hpp>
#include <Nazara/Graphics/AbstractRenderQueue.hpp>
#include <Nazara/Math/Box.hpp>
#include <Nazara/Math/Matrix4.hpp>
@@ -18,7 +20,7 @@ class NzMaterial;
class NzSkeletalMesh;
class NzStaticMesh;
class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue
class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzResourceListener
{
friend class NzForwardRenderTechnique;
@@ -30,11 +32,21 @@ class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue
void AddLight(const NzLight* light);
void AddModel(const NzModel* model);
void Clear();
void Clear(bool fully);
void Sort(const NzCamera& camera);
private:
void OnResourceDestroy(const NzResource* resource, int index);
struct BillboardData
{
NzColor color;
NzVector3f position;
NzVector2f size;
float rotation;
};
struct MaterialComparator
{
bool operator()(const NzMaterial* mat1, const NzMaterial* mat2);
@@ -76,6 +88,7 @@ class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue
typedef std::map<NzSkeletalMesh*, std::vector<SkeletalData>, SkeletalMeshComparator> SkeletalMeshContainer;
typedef std::map<NzStaticMesh*, std::vector<NzMatrix4f>, StaticMeshComparator> StaticMeshContainer;
std::map<NzMaterial*, std::vector<BillboardData>, MaterialComparator> billboards;
std::map<NzMaterial*, std::pair<SkeletalMeshContainer, StaticMeshContainer>, MaterialComparator> visibleModels;
std::vector<std::pair<unsigned int, bool>> visibleTransparentsModels;
std::vector<TransparentSkeletalModel> transparentSkeletalModels;

View File

@@ -72,15 +72,15 @@ void NzLuaClass<T>::Register(NzLuaInstance& lua)
m_info->methods.resize(m_methods.size());
unsigned int index = 0;
for (auto it = m_methods.begin(); it != m_methods.end(); ++it)
for (auto& pair : m_methods)
{
m_info->methods[index] = it->second;
m_info->methods[index] = pair.second;
lua.PushValue(1);
lua.PushInteger(index);
lua.PushCFunction(MethodProxy, 2);
lua.SetField(it->first); // Méthode
lua.SetField(pair.first); // Méthode
index++;
}