Browse Source

Add RenderBundle struct and submit()

master
Riyyi 3 years ago
parent
commit
0b9f4715fc
  1. 38
      inferno/src/inferno/render/renderer.cpp
  2. 29
      inferno/src/inferno/render/renderer.h

38
inferno/src/inferno/render/renderer.cpp

@ -1,41 +1,63 @@
#include <glad/glad.h>
#include "inferno/component/transform.h"
#include "inferno/render/buffer.h"
#include "inferno/render/camera.h"
#include "inferno/render/renderer.h"
#include "inferno/render/shader.h"
#include "inferno/render/texture.h"
namespace Inferno {
void Command::clear()
void RenderCommand::clear()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void Command::clearColor(const glm::vec4 &color)
void RenderCommand::clearColor(const glm::vec4& color)
{
glClearColor(color.r, color.g, color.b, color.a);
}
void Command::drawIndexed(const std::shared_ptr<VertexArray> &vertexArray)
void RenderCommand::drawIndexed(const std::shared_ptr<VertexArray>& vertexArray)
{
glDrawElements(GL_TRIANGLES, vertexArray->getIndexBuffer()->getCount(), GL_UNSIGNED_INT, nullptr);
}
// -----------------------------------------
void Renderer::beginScene()
{
std::shared_ptr<Camera> Renderer2D::m_camera = nullptr;
void Renderer2D::beginScene(const std::shared_ptr<Camera>& camera)
{
m_camera = camera;
}
void Renderer::endScene()
void Renderer2D::endScene()
{
}
void Renderer::submit(const std::shared_ptr<VertexArray> &vertexArray)
void Renderer2D::submit(const std::shared_ptr<VertexArray>& vertexArray)
{
vertexArray->bind();
Command::drawIndexed(vertexArray);
RenderCommand::drawIndexed(vertexArray);
vertexArray->unbind();
}
void Renderer2D::submit(const RenderBundle& bundle)
{
bundle.shader->bind();
if (bundle.texture) bundle.texture->bind();
bundle.vertexArray->bind();
bundle.shader->setFloat("u_projectionView", m_camera->projection() * m_camera->transform()->transform());
bundle.shader->setFloat("u_model", bundle.transform->transform());
RenderCommand::drawIndexed(bundle.vertexArray);
bundle.vertexArray->unbind();
if (bundle.texture) bundle.texture->unbind();
bundle.shader->unbind();
}
}

29
inferno/src/inferno/render/renderer.h

@ -3,28 +3,43 @@
#include <memory> // std::shared_ptr
#include <glm/vec4.hpp>
#include "glm/ext/vector_float4.hpp" // glm::vec4
namespace Inferno {
class Camera;
class Shader;
class Texture;
class Transform;
class VertexArray;
class Command {
struct RenderBundle {
const std::shared_ptr<Shader>& shader;
const std::shared_ptr<Texture>& texture;
const std::shared_ptr<Transform>& transform;
const std::shared_ptr<VertexArray>& vertexArray;
};
class RenderCommand {
public:
static void clear();
static void clearColor(const glm::vec4 &color);
static void clearColor(const glm::vec4& color);
static void drawIndexed(const std::shared_ptr<VertexArray> &vertexArray);
static void drawIndexed(const std::shared_ptr<VertexArray>& vertexArray);
};
// -----------------------------------------
class Renderer {
class Renderer2D {
public:
static void beginScene();
static void beginScene(const std::shared_ptr<Camera>& camera);
static void endScene();
static void submit(const std::shared_ptr<VertexArray> &vertexArray);
static void submit(const std::shared_ptr<VertexArray>& vertexArray);
static void submit(const RenderBundle& bundle);
private:
static std::shared_ptr<Camera> m_camera;
};
}

Loading…
Cancel
Save