2018-10-07 03:42:33 +00:00
|
|
|
#pragma once
|
2016-02-18 02:42:32 +00:00
|
|
|
|
2020-03-17 23:07:24 +00:00
|
|
|
#include <array>
|
|
|
|
|
2019-09-28 02:53:03 +00:00
|
|
|
#include "Runtime/RetroTypes.hpp"
|
|
|
|
#include "Runtime/rstl.hpp"
|
|
|
|
#include "Runtime/Graphics/CGraphics.hpp"
|
|
|
|
|
2022-02-01 00:06:54 +00:00
|
|
|
//#include <boo/graphicsdev/IGraphicsDataFactory.hpp>
|
2019-09-28 02:53:03 +00:00
|
|
|
|
2022-02-01 00:06:54 +00:00
|
|
|
//#include <hecl/UniformBufferPool.hpp>
|
|
|
|
//#include <hecl/VertexBufferPool.hpp>
|
2019-09-28 02:53:03 +00:00
|
|
|
|
|
|
|
#include <zeus/CColor.hpp>
|
|
|
|
#include <zeus/CVector2f.hpp>
|
|
|
|
#include <zeus/CVector3f.hpp>
|
|
|
|
#include <zeus/CVector4f.hpp>
|
2016-02-18 02:42:32 +00:00
|
|
|
|
2021-04-10 08:42:06 +00:00
|
|
|
namespace metaforce {
|
2016-02-18 02:42:32 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
class CLineRenderer {
|
2016-02-18 02:42:32 +00:00
|
|
|
public:
|
2018-12-08 05:30:43 +00:00
|
|
|
enum class EPrimitiveMode { Lines, LineStrip, LineLoop };
|
|
|
|
|
|
|
|
struct SDrawVertTex {
|
|
|
|
zeus::CVector4f pos;
|
|
|
|
zeus::CColor color;
|
|
|
|
zeus::CVector2f uv;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SDrawVertNoTex {
|
|
|
|
zeus::CVector4f pos;
|
|
|
|
zeus::CColor color;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct SDrawUniform {
|
|
|
|
zeus::CColor moduColor;
|
2022-02-16 05:21:24 +00:00
|
|
|
CFogState fog;
|
2018-12-08 05:30:43 +00:00
|
|
|
};
|
2017-04-22 21:46:18 +00:00
|
|
|
|
2016-02-18 07:56:14 +00:00
|
|
|
private:
|
2018-12-08 05:30:43 +00:00
|
|
|
EPrimitiveMode m_mode;
|
|
|
|
u32 m_maxVerts;
|
|
|
|
u32 m_nextVert = 0;
|
|
|
|
bool m_final = false;
|
|
|
|
bool m_textured;
|
|
|
|
|
|
|
|
zeus::CVector3f m_firstPos;
|
|
|
|
zeus::CVector3f m_secondPos;
|
|
|
|
zeus::CVector2f m_firstUV;
|
|
|
|
zeus::CColor m_firstColor;
|
|
|
|
float m_firstWidth;
|
|
|
|
float m_firstW;
|
|
|
|
|
|
|
|
zeus::CVector3f m_lastPos;
|
|
|
|
zeus::CVector3f m_lastPos2;
|
|
|
|
zeus::CVector2f m_lastUV;
|
|
|
|
zeus::CColor m_lastColor;
|
|
|
|
float m_lastWidth;
|
|
|
|
float m_lastW;
|
|
|
|
|
2022-02-01 00:06:54 +00:00
|
|
|
// static rstl::reserved_vector<SDrawVertTex, 1024> g_StaticLineVertsTex;
|
|
|
|
// static rstl::reserved_vector<SDrawVertNoTex, 1024> g_StaticLineVertsNoTex;
|
2018-12-08 05:30:43 +00:00
|
|
|
|
2022-02-01 00:06:54 +00:00
|
|
|
// static hecl::VertexBufferPool<SDrawVertTex> s_vertPoolTex;
|
|
|
|
// static hecl::VertexBufferPool<SDrawVertNoTex> s_vertPoolNoTex;
|
|
|
|
// static hecl::UniformBufferPool<SDrawUniform> s_uniformPool;
|
2017-04-22 21:46:18 +00:00
|
|
|
|
2016-02-18 02:42:32 +00:00
|
|
|
public:
|
2022-02-01 00:06:54 +00:00
|
|
|
// hecl::VertexBufferPool<SDrawVertTex>::Token m_vertBufTex;
|
|
|
|
// hecl::VertexBufferPool<SDrawVertNoTex>::Token m_vertBufNoTex;
|
|
|
|
// hecl::UniformBufferPool<SDrawUniform>::Token m_uniformBuf;
|
|
|
|
// std::array<boo::ObjToken<boo::IShaderDataBinding>, 2> m_shaderBind;
|
|
|
|
|
2022-02-18 00:38:31 +00:00
|
|
|
CLineRenderer(EPrimitiveMode mode, u32 maxVerts, const aurora::gfx::TextureHandle& texture, bool additive,
|
2018-12-08 05:30:43 +00:00
|
|
|
bool zTest = false, bool zGEqual = false);
|
|
|
|
CLineRenderer(CLineRenderer&&) = default;
|
|
|
|
|
|
|
|
void Reset();
|
|
|
|
void AddVertex(const zeus::CVector3f& position, const zeus::CColor& color, float width,
|
2019-02-24 07:15:54 +00:00
|
|
|
const zeus::CVector2f& uv = zeus::skZero2f);
|
2019-03-03 06:19:42 +00:00
|
|
|
void Render(bool alphaWrite = false, const zeus::CColor& moduColor = zeus::skWhite);
|
2018-12-08 05:30:43 +00:00
|
|
|
|
2022-02-01 00:06:54 +00:00
|
|
|
// static void UpdateBuffers() {
|
|
|
|
// s_vertPoolTex.updateBuffers();
|
|
|
|
// s_vertPoolNoTex.updateBuffers();
|
|
|
|
// s_uniformPool.updateBuffers();
|
|
|
|
// }
|
2018-12-08 05:30:43 +00:00
|
|
|
|
|
|
|
static void Initialize();
|
|
|
|
static void Shutdown();
|
2016-02-18 02:42:32 +00:00
|
|
|
};
|
|
|
|
|
2021-04-10 08:42:06 +00:00
|
|
|
} // namespace metaforce
|