You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lunarium_OLD/src/renderer/renderer2D.h

128 lines
3.8 KiB
C

/******************************************************************************
* File - renderer2D.h
* Author - Joey Pollack
* Date - 2022/07/13 (y/m/d)
* Mod Date - 2022/07/13 (y/m/d)
* Description - The main 2D render class
******************************************************************************/
#ifndef LUNARIUM_RENDERER_2D_H_
#define LUNARIUM_RENDERER_2D_H_
#include <core/common_defs.h>
#include "render_common.h"
#include <utils/op_res.h>
#include <glm/glm.hpp>
#include <vector>
namespace lunarium
{
class OrthographicCamera;
class Renderer2D
{
public:
struct FrameStats
{
int NumTris = 0;
int DrawCalls = 0;
};
Texture* GetDebugTexture();
void SetClearColor(Color color);
Color GetClearColor();
void ResetFrameStats();
FrameStats GetFrameStats() const;
void BeginDraw(OrthographicCamera* pCamera);
void EndDraw();
// Draw methods
void DrawQuad(Rectangle quad, Color color, Texture* texture = nullptr, float angle = 0.0f);
void DrawQuads(Rectangle* quads, u32 num_quads, Color* pColors);
void DrawSprite(Texture& image, glm::vec2 position, Color color = {1.0f, 1.0f, 1.0f, 1.0f}, float angle = 0);
void DrawSprite(Texture& image, Rectangle source, Rectangle destination, Color color = {1.0f, 1.0f, 1.0f, 1.0f}, float angle = 0);
void DrawString(const char* string, Rectangle boundingArea, Color color = {1.0f, 1.0f, 1.0f, 1.0f}, float scale = 1.0f, int font = 0);
private:
friend class RenderContext;
OpRes Initialize();
void Shutdown();
void Flush();
private:
Renderer2D();
Renderer2D(const Renderer2D&) = delete;
Renderer2D(const Renderer2D&&) = delete;
Renderer2D operator=(const Renderer2D&) = delete;
private: // data
struct QuadData
{
int mNumQuads = 0;
const int MaxQuads = 10000;
const int MaxVertices = MaxQuads * 4;
const int MaxIndices = MaxQuads * 6;
const int TextureSlots = 32;
// const glm::vec4 vert_pos[4] = {
// { -0.5f, 0.5f, 0.0f, 1.0f }, // TOP LEFT
// { 0.5f, 0.5f, 0.0f, 1.0f }, // TOP RIGHT
// { 0.5f, -0.5f, 0.0f, 1.0f }, // BOTTOM RIGHT
// { -0.5f, -0.5f, 0.0f, 1.0f } // BOTTOM LEFT
// };
const glm::vec4 vert_pos[4] = {
{ -0.5f, -0.5f, 0.0f, 1.0f },
{ 0.5f, -0.5f, 0.0f, 1.0f },
{ 0.5f, 0.5f, 0.0f, 1.0f },
{ -0.5f, 0.5f, 0.0f, 1.0f }
};
const glm::vec2 vert_tex[4] = {
{ 0.0f, 1.0f },
{ 1.0f, 1.0f },
{ 1.0f, 0.0f },
{ 0.0f, 0.0f },
};
struct Vertex
{
glm::vec3 pos;
glm::vec2 tex_coord;
glm::vec4 color;
float tex_slot;
glm::vec3 translation;
float angle;
glm::vec3 scale;
};
//const u32 indices[6] = { 0, 1, 2, 0, 2, 3 };
const u32 indices[6] = { 0, 1, 2, 2, 3, 0 };
Vertex* mRawVertexBuffer;
int mRawBufferIndex;
BufferLayout mBufferLayout;
VertexBuffer* mVertexBuffer;
//IndexBuffer* mIndexBuffer;
Shader* mQuadShader;
} mQuadData;
FrameStats mFrameStats;
OrthographicCamera* mpCamera;
std::vector<Texture*> mLoadedTextures;
Texture* mpWhiteTexture;
Color mClearColor;
/// DEBUG STUFF
u32 mTVAO;
u32 mTVBO;
};
}
#endif // LUNARIUM_RENDERER_2D_H_