// Copyright (C) 2015 Jérôme Leclercq // This file is part of the "Nazara Engine - Graphics module" // For conditions of distribution and use, see copyright notice in Config.hpp #pragma once #ifndef NAZARA_ABSTRACTRENDERQUEUE_HPP #define NAZARA_ABSTRACTRENDERQUEUE_HPP #include #include #include #include #include #include #include #include #include class NzDrawable; class NzMaterial; class NzTexture; struct NzMeshData; class NAZARA_GRAPHICS_API NzAbstractRenderQueue { public: struct DirectionalLight; struct PointLight; struct SpotLight; NzAbstractRenderQueue() = default; NzAbstractRenderQueue(const NzAbstractRenderQueue&) = delete; NzAbstractRenderQueue(NzAbstractRenderQueue&&) = default; virtual ~NzAbstractRenderQueue(); // Je ne suis vraiment pas fan du nombre de surcharges pour AddBillboards, // mais je n'ai pas d'autre solution tout aussi performante pour le moment... virtual void AddBillboard(const NzMaterial* material, const NzVector3f& position, const NzVector2f& size, const NzVector2f& sinCos = NzVector2f(0.f, 1.f), const NzColor& color = NzColor::White) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr sinCosPtr = nullptr, NzSparsePtr colorPtr = nullptr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr sinCosPtr, NzSparsePtr alphaPtr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr anglePtr, NzSparsePtr colorPtr = nullptr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr anglePtr, NzSparsePtr alphaPtr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr sinCosPtr = nullptr, NzSparsePtr colorPtr = nullptr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr sinCosPtr, NzSparsePtr alphaPtr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr anglePtr, NzSparsePtr colorPtr = nullptr) = 0; virtual void AddBillboards(const NzMaterial* material, unsigned int count, NzSparsePtr positionPtr, NzSparsePtr sizePtr, NzSparsePtr anglePtr, NzSparsePtr alphaPtr) = 0; virtual void AddDrawable(const NzDrawable* drawable) = 0; virtual void AddDirectionalLight(const DirectionalLight& light); virtual void AddMesh(const NzMaterial* material, const NzMeshData& meshData, const NzBoxf& meshAABB, const NzMatrix4f& transformMatrix) = 0; virtual void AddPointLight(const PointLight& light); virtual void AddSpotLight(const SpotLight& light); virtual void AddSprites(const NzMaterial* material, const NzVertexStruct_XYZ_Color_UV* vertices, unsigned int spriteCount, const NzTexture* overlay = nullptr) = 0; virtual void Clear(bool fully = false); NzAbstractRenderQueue& operator=(const NzAbstractRenderQueue&) = delete; NzAbstractRenderQueue& operator=(NzAbstractRenderQueue&&) = default; struct DirectionalLight { NzColor color; NzVector3f direction; float ambientFactor; float diffuseFactor; }; struct PointLight { NzColor color; NzVector3f position; float ambientFactor; float attenuation; float diffuseFactor; float invRadius; float radius; }; struct SpotLight { NzColor color; NzVector3f direction; NzVector3f position; float ambientFactor; float attenuation; float diffuseFactor; float innerAngleCosine; float invRadius; float outerAngleCosine; float outerAngleTangent; float radius; }; std::vector directionalLights; std::vector pointLights; std::vector spotLights; }; #endif // NAZARA_ABSTRACTRENDERQUEUE_HPP