Added alpha-mapping support

Former-commit-id: ba4598e9e5efc47e04e72dc709d64d214d77e9a1
This commit is contained in:
Lynix
2013-05-16 22:47:25 +02:00
parent 0b66452e33
commit 4b68ff0118
6 changed files with 110 additions and 25 deletions

View File

@@ -21,6 +21,36 @@ class NzStaticMesh;
class NAZARA_API NzRenderQueue
{
public:
NzRenderQueue() = default;
~NzRenderQueue() = default;
void Clear();
struct SkeletalData
{
NzMatrix4f transformMatrix;
///TODO: Déplacer vers un container séparé qui ne serait pas sujet à Clear();
std::vector<NzMeshVertex> skinnedVertices;
};
struct TransparentModel
{
NzMatrix4f transformMatrix;
NzMaterial* material;
};
struct TransparentSkeletalModel : public TransparentModel
{
///TODO: Déplacer vers un container séparé qui ne serait pas sujet à Clear();
std::vector<NzMeshVertex> skinnedVertices;
};
struct TransparentStaticModel : public TransparentModel
{
NzStaticMesh* mesh;
};
struct MaterialComparator
{
bool operator()(const NzMaterial* mat1, const NzMaterial* mat2);
@@ -36,24 +66,13 @@ class NAZARA_API NzRenderQueue
bool operator()(const NzStaticMesh* subMesh1, const NzStaticMesh* subMesh2);
};
NzRenderQueue() = default;
~NzRenderQueue() = default;
void Clear();
struct SkeletalData
{
NzMatrix4f transformMatrix;
///TODO: Déplacer vers un container séparé qui ne serait pas sujer à Clear();
std::vector<NzMeshVertex> skinnedVertices;
};
typedef std::map<NzSkeletalMesh*, std::vector<SkeletalData>, SkeletalMeshComparator> SkeletalMeshContainer;
typedef std::map<NzStaticMesh*, std::vector<NzMatrix4f>, StaticMeshComparator> StaticMeshContainer;
std::map<NzMaterial*, SkeletalMeshContainer, MaterialComparator> visibleSkeletalModels;
std::map<NzMaterial*, StaticMeshContainer, MaterialComparator> visibleStaticModels;
std::vector<TransparentSkeletalModel> visibleTransparentSkeletalModels;
std::vector<TransparentStaticModel> visibleTransparentStaticModels;
std::vector<const NzDrawable*> otherDrawables;
std::vector<const NzLight*> directionnalLights;
std::vector<const NzLight*> visibleLights;

View File

@@ -149,15 +149,16 @@ enum nzShaderFlags
{
nzShaderFlags_None = 0,
nzShaderFlags_Deferred = 0x001,
nzShaderFlags_DiffuseMapping = 0x002,
nzShaderFlags_EmissiveMapping = 0x004,
nzShaderFlags_FlipUVs = 0x008,
nzShaderFlags_Instancing = 0x010,
nzShaderFlags_Lighting = 0x020,
nzShaderFlags_NormalMapping = 0x040,
nzShaderFlags_ParallaxMapping = 0x080,
nzShaderFlags_SpecularMapping = 0x100
nzShaderFlags_AlphaMapping = 0x001,
nzShaderFlags_Deferred = 0x002,
nzShaderFlags_DiffuseMapping = 0x004,
nzShaderFlags_EmissiveMapping = 0x008,
nzShaderFlags_FlipUVs = 0x010,
nzShaderFlags_Instancing = 0x020,
nzShaderFlags_Lighting = 0x040,
nzShaderFlags_NormalMapping = 0x080,
nzShaderFlags_ParallaxMapping = 0x100,
nzShaderFlags_SpecularMapping = 0x200
};
enum nzShaderLanguage
@@ -174,6 +175,7 @@ enum nzShaderUniform
{
nzShaderUniform_CameraPosition,
nzShaderUniform_LightCount,
nzShaderUniform_MaterialAlphaMap,
nzShaderUniform_MaterialAmbient,
nzShaderUniform_MaterialDiffuse,
nzShaderUniform_MaterialDiffuseMap,

View File

@@ -53,6 +53,7 @@ class NAZARA_API NzMaterial : public NzResource
NzColor GetAmbientColor() const;
const NzShader* GetCustomShader() const;
NzColor GetDiffuseColor() const;
NzTexture* GetAlphaMap() const;
NzTexture* GetDiffuseMap() const;
NzTextureSampler& GetDiffuseSampler();
const NzTextureSampler& GetDiffuseSampler() const;
@@ -85,6 +86,8 @@ class NAZARA_API NzMaterial : public NzResource
void Reset();
bool SetAlphaMap(const NzString& texturePath);
void SetAlphaMap(NzTexture* map);
void SetAmbientColor(const NzColor& ambient);
void SetDiffuseColor(const NzColor& diffuse);
bool SetDiffuseMap(const NzString& texturePath);
@@ -128,6 +131,7 @@ class NAZARA_API NzMaterial : public NzResource
NzTextureSampler m_diffuseSampler;
NzTextureSampler m_specularSampler;
mutable NzShaderConstRef m_customShader;
NzTextureRef m_alphaMap;
NzTextureRef m_diffuseMap;
NzTextureRef m_emissiveMap;
NzTextureRef m_heightMap;