Graphics: Add support for depth-sorted sprites

This commit is contained in:
Lynix
2017-04-23 13:40:13 +02:00
parent 3e9ae9856a
commit af41b240ad
4 changed files with 238 additions and 51 deletions

View File

@@ -153,7 +153,7 @@ namespace Nz
using MeshPipelineBatches = std::map<const MaterialPipeline*, BatchedMaterialEntry, MaterialPipelineComparator>;
struct TransparentModelData
struct UnbatchedModelData
{
Matrix4f transformMatrix;
MeshData meshData;
@@ -161,16 +161,23 @@ namespace Nz
const Material* material;
};
using TransparentModelContainer = std::vector<std::size_t>;
struct UnbatchedSpriteData
{
std::size_t spriteCount;
const Material* material;
const Texture* overlay;
const VertexStruct_XYZ_Color_UV* vertices;
};
struct Layer
{
BillboardPipelineBatches billboards;
SpritePipelineBatches opaqueSprites;
SpritePipelineBatches depthSortedSprites;
MeshPipelineBatches opaqueModels;
TransparentModelContainer depthSortedMeshes;
std::vector<TransparentModelData> depthSortedMeshData;
std::vector<std::size_t> depthSortedMeshes;
std::vector<std::size_t> depthSortedSprites;
std::vector<UnbatchedModelData> depthSortedMeshData;
std::vector<UnbatchedSpriteData> depthSortedSpriteData;
std::vector<const Drawable*> otherDrawables;
unsigned int clearCount = 0;
};

View File

@@ -43,6 +43,7 @@ namespace Nz
void DrawBasicSprites(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const;
void DrawBillboards(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const;
void DrawOpaqueModels(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const;
void DrawOrderedSprites(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const;
void DrawTransparentModels(const SceneData& sceneData, ForwardRenderQueue::Layer& layer) const;
const ShaderUniforms* GetShaderUniforms(const Shader* shader) const;
void OnShaderInvalidated(const Shader* shader) const;