metaforce/Runtime/Graphics/CLineRenderer.hpp

100 lines
2.6 KiB
C++
Raw Normal View History

2016-04-13 06:07:23 +00:00
#ifndef __URDE_CLINERENDERER_HPP__
#define __URDE_CLINERENDERER_HPP__
#include "RetroTypes.hpp"
2016-03-04 23:04:53 +00:00
#include "zeus/CVector3f.hpp"
2017-04-22 21:46:18 +00:00
#include "zeus/CVector4f.hpp"
2016-03-04 23:04:53 +00:00
#include "zeus/CColor.hpp"
#include "boo/graphicsdev/IGraphicsDataFactory.hpp"
2017-04-22 21:46:18 +00:00
#include "hecl/VertexBufferPool.hpp"
#include "hecl/UniformBufferPool.hpp"
2016-03-04 23:04:53 +00:00
namespace urde
{
class CLineRenderer
{
public:
enum class EPrimitiveMode
{
Lines,
LineStrip,
LineLoop
};
2017-04-22 21:46:18 +00:00
struct SDrawVertTex
{
zeus::CVector4f pos;
zeus::CColor color;
zeus::CVector2f uv;
};
struct SDrawVertNoTex
{
zeus::CVector4f pos;
zeus::CColor color;
};
struct SDrawUniform
{
zeus::CColor moduColor;
};
2016-02-18 07:56:14 +00:00
private:
EPrimitiveMode m_mode;
u32 m_maxVerts;
u32 m_nextVert = 0;
bool m_final = false;
bool m_textured;
2016-03-04 23:04:53 +00:00
zeus::CVector3f m_firstPos;
zeus::CVector3f m_secondPos;
zeus::CVector2f m_firstUV;
zeus::CColor m_firstColor;
float m_firstWidth;
2016-03-04 23:04:53 +00:00
zeus::CVector3f m_lastPos;
zeus::CVector3f m_lastPos2;
zeus::CVector2f m_lastUV;
zeus::CColor m_lastColor;
float m_lastWidth;
2017-04-22 21:46:18 +00:00
static rstl::reserved_vector<SDrawVertTex, 256> g_StaticLineVertsTex;
static rstl::reserved_vector<SDrawVertNoTex, 256> g_StaticLineVertsNoTex;
static hecl::VertexBufferPool<SDrawVertTex> s_vertPoolTex;
static hecl::VertexBufferPool<SDrawVertNoTex> s_vertPoolNoTex;
static hecl::UniformBufferPool<SDrawUniform> s_uniformPool;
public:
boo::GraphicsDataToken m_gfxToken;
2017-04-22 21:46:18 +00:00
hecl::VertexBufferPool<SDrawVertTex>::Token m_vertBufTex;
hecl::VertexBufferPool<SDrawVertNoTex>::Token m_vertBufNoTex;
hecl::UniformBufferPool<SDrawUniform>::Token m_uniformBuf;
boo::IShaderDataBinding* m_shaderBind = nullptr;
2017-04-22 06:42:32 +00:00
CLineRenderer(boo::IGraphicsDataFactory::Context& ctx,
EPrimitiveMode mode, u32 maxVerts, boo::ITexture* texture, bool additive);
CLineRenderer(EPrimitiveMode mode, u32 maxVerts, boo::ITexture* texture, bool additive);
2017-04-22 06:42:32 +00:00
CLineRenderer(CLineRenderer&&) = default;
void Reset();
2016-03-04 23:04:53 +00:00
void AddVertex(const zeus::CVector3f& position, const zeus::CColor& color, float width,
const zeus::CVector2f& uv=zeus::CVector2f::skZero);
void Render(const zeus::CColor& moduColor=zeus::CColor::skWhite);
2017-04-22 21:46:18 +00:00
static void UpdateBuffers()
{
s_vertPoolTex.updateBuffers();
s_vertPoolNoTex.updateBuffers();
s_uniformPool.updateBuffers();
}
static void Initialize();
static void Shutdown();
};
}
2016-04-13 06:07:23 +00:00
#endif // __URDE_CLINERENDERER_HPP__