Remade sprite rendering
Added VertexColor shader flag Added color sprite attribute Added VertexStruct_XY_Color(_UV) struct & declaration Former-commit-id: b664f4520aa55f4502f85f9dedab9b92040a8c16
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
#include <Nazara/Math/Box.hpp>
|
||||
#include <Nazara/Math/Matrix4.hpp>
|
||||
#include <Nazara/Utility/Enums.hpp>
|
||||
#include <Nazara/Utility/VertexStruct.hpp>
|
||||
|
||||
class NzDrawable;
|
||||
class NzLight;
|
||||
@@ -28,7 +29,7 @@ class NAZARA_API NzAbstractRenderQueue : NzNonCopyable
|
||||
virtual void AddDrawable(const NzDrawable* drawable) = 0;
|
||||
virtual void AddLight(const NzLight* light) = 0;
|
||||
virtual void AddMesh(const NzMaterial* material, const NzMeshData& meshData, const NzBoxf& meshAABB, const NzMatrix4f& transformMatrix) = 0;
|
||||
virtual void AddSprite(const NzSprite* sprite) = 0;
|
||||
virtual void AddSprites(const NzMaterial* material, const NzVertexStruct_XYZ_Color_UV* vertices, unsigned int spriteCount) = 0;
|
||||
|
||||
virtual void Clear(bool fully) = 0;
|
||||
};
|
||||
|
||||
@@ -31,7 +31,7 @@ class NAZARA_API NzDeferredRenderQueue : public NzAbstractRenderQueue, NzResourc
|
||||
void AddDrawable(const NzDrawable* drawable) override;
|
||||
void AddLight(const NzLight* light) override;
|
||||
void AddMesh(const NzMaterial* material, const NzMeshData& meshData, const NzBoxf& meshAABB, const NzMatrix4f& transformMatrix) override;
|
||||
void AddSprite(const NzSprite* sprite) override;
|
||||
void AddSprites(const NzMaterial* material, const NzVertexStruct_XYZ_Color_UV* vertices, unsigned int spriteCount) override;
|
||||
|
||||
void Clear(bool fully);
|
||||
|
||||
|
||||
@@ -85,10 +85,11 @@ enum nzShaderFlags
|
||||
{
|
||||
nzShaderFlags_None = 0,
|
||||
|
||||
nzShaderFlags_Deferred = 0x1,
|
||||
nzShaderFlags_Instancing = 0x2,
|
||||
nzShaderFlags_Deferred = 0x1,
|
||||
nzShaderFlags_Instancing = 0x2,
|
||||
nzShaderFlags_VertexColor = 0x4,
|
||||
|
||||
nzShaderFlags_Max = nzShaderFlags_Instancing*2-1
|
||||
nzShaderFlags_Max = nzShaderFlags_VertexColor*2-1
|
||||
};
|
||||
|
||||
#endif // NAZARA_ENUMS_GRAPHICS_HPP
|
||||
|
||||
@@ -33,7 +33,7 @@ class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzResource
|
||||
void AddDrawable(const NzDrawable* drawable) override;
|
||||
void AddLight(const NzLight* light) override;
|
||||
void AddMesh(const NzMaterial* material, const NzMeshData& meshData, const NzBoxf& meshAABB, const NzMatrix4f& transformMatrix) override;
|
||||
void AddSprite(const NzSprite* sprite) override;
|
||||
void AddSprites(const NzMaterial* material, const NzVertexStruct_XYZ_Color_UV* vertices, unsigned int spriteCount) override;
|
||||
|
||||
void Clear(bool fully);
|
||||
|
||||
@@ -43,6 +43,12 @@ class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzResource
|
||||
bool OnResourceDestroy(const NzResource* resource, int index) override;
|
||||
void OnResourceReleased(const NzResource* resource, int index) override;
|
||||
|
||||
struct SpriteChain_XYZ_Color_UV
|
||||
{
|
||||
const NzVertexStruct_XYZ_Color_UV* vertices;
|
||||
unsigned int spriteCount;
|
||||
};
|
||||
|
||||
struct TransparentModelData
|
||||
{
|
||||
NzMatrix4f transformMatrix;
|
||||
@@ -68,12 +74,12 @@ class NAZARA_API NzForwardRenderQueue : public NzAbstractRenderQueue, NzResource
|
||||
|
||||
typedef std::map<NzMeshData, std::pair<NzSpheref, std::vector<NzMatrix4f>>, MeshDataComparator> MeshInstanceContainer;
|
||||
typedef std::map<const NzMaterial*, std::tuple<bool, bool, MeshInstanceContainer>, BatchedModelMaterialComparator> ModelBatches;
|
||||
typedef std::map<const NzMaterial*, std::vector<const NzSprite*>> BatchedSpriteContainer;
|
||||
typedef std::map<const NzMaterial*, std::vector<SpriteChain_XYZ_Color_UV>> BasicSpriteBatches;
|
||||
typedef std::vector<const NzLight*> LightContainer;
|
||||
typedef std::vector<unsigned int> TransparentModelContainer;
|
||||
|
||||
BasicSpriteBatches basicSprites;
|
||||
ModelBatches opaqueModels;
|
||||
BatchedSpriteContainer sprites;
|
||||
TransparentModelContainer transparentModels;
|
||||
std::vector<TransparentModelData> transparentModelData;
|
||||
std::vector<const NzDrawable*> otherDrawables;
|
||||
|
||||
@@ -34,8 +34,8 @@ class NAZARA_API NzForwardRenderTechnique : public NzAbstractRenderTechnique, Nz
|
||||
private:
|
||||
struct LightUniforms;
|
||||
|
||||
void DrawBasicSprites(const NzScene* scene) const;
|
||||
void DrawOpaqueModels(const NzScene* scene) const;
|
||||
void DrawSprites(const NzScene* scene) const;
|
||||
void DrawTransparentModels(const NzScene* scene) const;
|
||||
const LightUniforms* GetLightUniforms(const NzShader* shader) const;
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <Nazara/Prerequesites.hpp>
|
||||
#include <Nazara/Graphics/Material.hpp>
|
||||
#include <Nazara/Graphics/SceneNode.hpp>
|
||||
#include <Nazara/Utility/VertexStruct.hpp>
|
||||
|
||||
class NAZARA_API NzSprite : public NzSceneNode
|
||||
{
|
||||
@@ -23,6 +24,7 @@ class NAZARA_API NzSprite : public NzSceneNode
|
||||
void AddToRenderQueue(NzAbstractRenderQueue* renderQueue) const override;
|
||||
|
||||
const NzBoundingVolumef& GetBoundingVolume() const override;
|
||||
const NzColor& GetColor() const;
|
||||
NzMaterial* GetMaterial() const;
|
||||
nzSceneNodeType GetSceneNodeType() const override;
|
||||
const NzVector2f& GetSize() const;
|
||||
@@ -30,6 +32,7 @@ class NAZARA_API NzSprite : public NzSceneNode
|
||||
|
||||
bool IsDrawable() const;
|
||||
|
||||
void SetColor(const NzColor& color);
|
||||
void SetMaterial(NzMaterial* material, bool resizeSprite = true);
|
||||
void SetSize(const NzVector2f& size);
|
||||
void SetSize(float sizeX, float sizeY);
|
||||
@@ -42,12 +45,16 @@ class NAZARA_API NzSprite : public NzSceneNode
|
||||
void Register() override;
|
||||
void Unregister() override;
|
||||
void UpdateBoundingVolume() const;
|
||||
void UpdateVertices() const;
|
||||
|
||||
mutable NzBoundingVolumef m_boundingVolume;
|
||||
NzColor m_color;
|
||||
NzMaterialRef m_material;
|
||||
NzRectf m_textureCoords;
|
||||
NzVector2f m_size;
|
||||
mutable NzVertexStruct_XYZ_Color_UV m_vertices[4];
|
||||
mutable bool m_boundingVolumeUpdated;
|
||||
mutable bool m_verticesUpdated;
|
||||
};
|
||||
|
||||
#endif // NAZARA_SPRITE_HPP
|
||||
|
||||
@@ -254,6 +254,8 @@ enum nzVertexLayout
|
||||
nzVertexLayout_XY,
|
||||
nzVertexLayout_XY_UV,
|
||||
nzVertexLayout_XYZ,
|
||||
nzVertexLayout_XYZ_Color,
|
||||
nzVertexLayout_XYZ_Color_UV,
|
||||
nzVertexLayout_XYZ_Normal,
|
||||
nzVertexLayout_XYZ_Normal_UV,
|
||||
nzVertexLayout_XYZ_Normal_UV_Tangent,
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#ifndef NAZARA_VERTEXSTRUCT_HPP
|
||||
#define NAZARA_VERTEXSTRUCT_HPP
|
||||
|
||||
#include <Nazara/Core/Color.hpp>
|
||||
#include <Nazara/Math/Vector2.hpp>
|
||||
#include <Nazara/Math/Vector3.hpp>
|
||||
|
||||
@@ -17,7 +18,7 @@ struct NzVertexStruct_XY
|
||||
NzVector2f position;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XY_UV : public NzVertexStruct_XY
|
||||
struct NzVertexStruct_XY_UV : NzVertexStruct_XY
|
||||
{
|
||||
NzVector2f uv;
|
||||
};
|
||||
@@ -29,29 +30,39 @@ struct NzVertexStruct_XYZ
|
||||
NzVector3f position;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XYZ_Normal : public NzVertexStruct_XYZ
|
||||
struct NzVertexStruct_XYZ_Color : NzVertexStruct_XYZ
|
||||
{
|
||||
NzVector3f normal;
|
||||
NzColor color;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XYZ_Normal_UV : public NzVertexStruct_XYZ_Normal
|
||||
struct NzVertexStruct_XYZ_Color_UV : NzVertexStruct_XYZ_Color
|
||||
{
|
||||
NzVector2f uv;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XYZ_Normal_UV_Tangent : public NzVertexStruct_XYZ_Normal_UV
|
||||
struct NzVertexStruct_XYZ_Normal : NzVertexStruct_XYZ
|
||||
{
|
||||
NzVector3f normal;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XYZ_Normal_UV : NzVertexStruct_XYZ_Normal
|
||||
{
|
||||
NzVector2f uv;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XYZ_Normal_UV_Tangent : NzVertexStruct_XYZ_Normal_UV
|
||||
{
|
||||
NzVector3f tangent;
|
||||
};
|
||||
|
||||
struct NzVertexStruct_XYZ_UV : public NzVertexStruct_XYZ
|
||||
struct NzVertexStruct_XYZ_UV : NzVertexStruct_XYZ
|
||||
{
|
||||
NzVector2f uv;
|
||||
};
|
||||
|
||||
/************************* Structures 3D (+ Skinning) ************************/
|
||||
|
||||
struct NzVertexStruct_XYZ_Normal_UV_Tangent_Skinning : public NzVertexStruct_XYZ_Normal_UV_Tangent
|
||||
struct NzVertexStruct_XYZ_Normal_UV_Tangent_Skinning : NzVertexStruct_XYZ_Normal_UV_Tangent
|
||||
{
|
||||
nzInt32 weightCount;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user