metaforce/Runtime/Graphics/IRenderer.hpp

107 lines
4.2 KiB
C++
Raw Normal View History

2016-04-13 06:07:23 +00:00
#ifndef __URDE_IRENDERER_HPP__
#define __URDE_IRENDERER_HPP__
2015-08-21 00:06:39 +00:00
#include <vector>
#include "../RetroTypes.hpp"
#include "../CToken.hpp"
2016-03-04 23:04:53 +00:00
#include "zeus/CAABox.hpp"
#include "zeus/CPlane.hpp"
2016-07-21 05:21:45 +00:00
#include "zeus/CFrustum.hpp"
2016-03-04 23:04:53 +00:00
#include "zeus/CColor.hpp"
2015-08-21 00:06:39 +00:00
2016-03-04 23:04:53 +00:00
namespace urde
2015-08-21 00:06:39 +00:00
{
class CMetroidModelInstance;
class CLight;
class CAreaOctTree;
2016-07-26 22:05:59 +00:00
class CParticleGen;
2015-08-21 00:06:39 +00:00
class CModel;
class CSkinnedModel;
2016-07-27 23:06:57 +00:00
class CPVSVisSet;
2015-08-21 00:06:39 +00:00
class IRenderer
{
public:
2016-07-21 05:21:45 +00:00
using TDrawableCallback = std::function<void(const void*, const void*, int)>;
using TReflectionCallback = std::function<void(void*, const zeus::CVector3f&)>;
2015-11-21 01:16:07 +00:00
enum class EDrawableSorting
2015-08-21 00:06:39 +00:00
{
2016-07-26 22:05:59 +00:00
SortedBuckets,
UnsortedCallback
2015-08-21 00:06:39 +00:00
};
2015-11-21 01:16:07 +00:00
enum class EDebugOption
2015-08-21 00:06:39 +00:00
{
};
2015-11-21 01:16:07 +00:00
enum class EPrimitiveType
2015-08-21 00:06:39 +00:00
{
};
2015-11-21 01:16:07 +00:00
enum class ERglFogMode
2015-08-21 00:06:39 +00:00
{
};
virtual ~IRenderer() = default;
2016-07-26 22:05:59 +00:00
virtual void AddStaticGeometry(const std::vector<CMetroidModelInstance>*, const CAreaOctTree*, int)=0;
2016-07-27 23:06:57 +00:00
virtual void EnablePVS(const CPVSVisSet*, u32)=0;
virtual void DisablePVS()=0;
2016-07-26 22:05:59 +00:00
virtual void RemoveStaticGeometry(const std::vector<CMetroidModelInstance>*)=0;
2016-07-27 23:06:57 +00:00
virtual void DrawUnsortedGeometry(const std::vector<CLight>&, int, int)=0;
virtual void DrawSortedGeometry(const std::vector<CLight>&, int, int)=0;
virtual void DrawStaticGeometry(const std::vector<CLight>&, int, int)=0;
2016-07-21 05:21:45 +00:00
virtual void PostRenderFogs()=0;
2016-07-26 22:05:59 +00:00
virtual void AddParticleGen(const CParticleGen&)=0;
2016-07-21 05:21:45 +00:00
virtual void AddPlaneObject(const void*, const zeus::CAABox&, const zeus::CPlane&, int)=0;
virtual void AddDrawable(void const *, const zeus::CVector3f&, const zeus::CAABox&, int, EDrawableSorting)=0;
2016-07-26 22:05:59 +00:00
virtual void SetDrawableCallback(TDrawableCallback&&, const void*)=0;
2016-07-21 05:21:45 +00:00
virtual void SetWorldViewpoint(const zeus::CTransform&)=0;
virtual void SetPerspectiveFovScalar(float)=0;
virtual void SetPerspective(float, float, float, float, float)=0;
virtual void SetPerspective(float, float, float, float)=0;
virtual void SetViewportOrtho(bool, float, float)=0;
virtual void SetClippingPlanes(const zeus::CFrustum&)=0;
virtual void SetViewport(int, int, int, int)=0;
virtual void SetDepthReadWrite(bool, bool)=0;
virtual void SetBlendMode_AdditiveAlpha()=0;
virtual void SetBlendMode_AlphaBlended()=0;
virtual void SetBlendMode_NoColorWrite()=0;
virtual void SetBlendMode_ColorMultiply()=0;
virtual void SetBlendMode_InvertDst()=0;
virtual void SetBlendMode_InvertSrc()=0;
virtual void SetBlendMode_Replace()=0;
virtual void SetBlendMode_AdditiveDestColor()=0;
virtual void SetDebugOption(EDebugOption, int)=0;
virtual void BeginScene()=0;
virtual void EndScene()=0;
virtual void BeginPrimitive(EPrimitiveType, int)=0;
virtual void BeginLines(int)=0;
virtual void BeginLineStrip(int)=0;
virtual void BeginTriangles(int)=0;
virtual void BeginTriangleStrip(int)=0;
virtual void BeginTriangleFan(int)=0;
virtual void PrimVertex(const zeus::CVector3f&)=0;
virtual void PrimNormal(const zeus::CVector3f&)=0;
virtual void PrimColor(float, float, float, float)=0;
virtual void PrimColor(const zeus::CColor&)=0;
virtual void EndPrimitive()=0;
virtual void SetAmbientColor(const zeus::CColor&)=0;
virtual void SetStaticWorldAmbientColor(const zeus::CColor&)=0;
virtual void DrawString(const char*, int, int)=0;
virtual u32 GetFPS()=0;
virtual void CacheReflection(TReflectionCallback, void*, bool)=0;
virtual void DrawSpaceWarp(const zeus::CVector3f&, float)=0;
virtual void DrawThermalModel(const CModel&, const zeus::CColor&, const zeus::CColor&, const float*, const float*)=0;
virtual void DrawXRayOutline(const CModel&, const float*, const float*)=0;
virtual void SetWireframeFlags(int)=0;
virtual void SetWorldFog(ERglFogMode, float, float, const zeus::CColor&)=0;
virtual void RenderFogVolume(const zeus::CColor&, const zeus::CAABox&, const TLockedToken<CModel>*, const CSkinnedModel*)=0;
virtual void SetThermal(bool, float, const zeus::CColor&)=0;
virtual void SetThermalColdScale(float scale)=0;
2016-07-21 05:21:45 +00:00
virtual void DoThermalBlendCold()=0;
virtual void DoThermalBlendHot()=0;
virtual u32 GetStaticWorldDataSize()=0;
2015-08-21 00:06:39 +00:00
};
}
2016-04-13 06:07:23 +00:00
#endif // __URDE_IRENDERER_HPP__