First Triangle!
This commit is contained in:
parent
ca7a41740a
commit
f511f6d771
18 changed files with 156 additions and 18 deletions
8
Engine/res/pixel.ps
Normal file
8
Engine/res/pixel.ps
Normal file
|
@ -0,0 +1,8 @@
|
|||
#version 450 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
}
|
8
Engine/res/vertex.vs
Normal file
8
Engine/res/vertex.vs
Normal file
|
@ -0,0 +1,8 @@
|
|||
#version 450 core
|
||||
|
||||
layout(location = 0) in vec2 a_Position;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(a_Position, 0.0, 1.0);
|
||||
}
|
|
@ -1,6 +1,10 @@
|
|||
#pragma once
|
||||
|
||||
#include "Core/Logger.h"
|
||||
#ifndef LOGGER_H
|
||||
#include "Core/Logger.h"
|
||||
#endif
|
||||
|
||||
#include <memory>
|
||||
|
||||
#if defined(LIGHT_PLATFORM_WINDOWS)
|
||||
#define LT_BUILD_PLATFORM "Windows"
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "Events/Event.h"
|
||||
|
||||
#include "Graphics/GraphicsContext.h"
|
||||
#include "Graphics/Renderer.h"
|
||||
#include "Graphics/RenderCommand.h"
|
||||
|
||||
#include "UserInterface/UserInterface.h"
|
||||
|
@ -34,6 +35,9 @@ namespace Light {
|
|||
m_Window->PollEvents();
|
||||
|
||||
// Rendering
|
||||
m_Window->GetGfxContext()->GetRenderer()->Draw();
|
||||
|
||||
// Buffer updates
|
||||
m_Window->GetGfxContext()->GetRenderCommand()->SwapBuffers();
|
||||
m_Window->GetGfxContext()->GetRenderCommand()->ClearBackBuffer();
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@
|
|||
#include "GraphicsContext.h"
|
||||
#include "OpenGL/glGraphicsContext.h"
|
||||
|
||||
#include "Buffers.h"
|
||||
|
||||
#include "Renderer.h"
|
||||
#include "RenderCommand.h"
|
||||
#include "UserInterface/UserInterface.h"
|
||||
|
||||
|
@ -14,8 +17,11 @@ namespace Light {
|
|||
// terminate gfx context dependent classes
|
||||
if (s_Context)
|
||||
{
|
||||
s_Context->m_Renderer.reset();
|
||||
s_Context->m_RenderCommand.reset();
|
||||
s_Context->m_UserInterface.reset();
|
||||
|
||||
delete s_Context;
|
||||
}
|
||||
|
||||
// determine the default api
|
||||
|
@ -41,8 +47,7 @@ namespace Light {
|
|||
// create gfx context dependent classes
|
||||
s_Context->m_RenderCommand = std::unique_ptr<RenderCommand>(RenderCommand::Create(windowHandle));
|
||||
s_Context->m_UserInterface = std::unique_ptr<UserInterface>(UserInterface::Create(windowHandle));
|
||||
// ...Renderer
|
||||
// ...UserInterface...
|
||||
s_Context->m_Renderer = std::unique_ptr<Renderer>(Renderer::Create(s_Context->m_RenderCommand));
|
||||
|
||||
// sanity check
|
||||
LT_ENGINE_ASSERT(s_Context->m_RenderCommand, "GraphicsContext::Create: RenderCommand creation failed");
|
||||
|
|
|
@ -6,6 +6,7 @@ struct GLFWwindow;
|
|||
|
||||
namespace Light {
|
||||
|
||||
class Renderer;
|
||||
class RenderCommand;
|
||||
class UserInterface;
|
||||
|
||||
|
@ -23,7 +24,8 @@ namespace Light {
|
|||
private:
|
||||
static GraphicsContext* s_Context;
|
||||
|
||||
std::unique_ptr<RenderCommand> m_RenderCommand;
|
||||
std::unique_ptr<Renderer> m_Renderer;
|
||||
std::shared_ptr<RenderCommand> m_RenderCommand;
|
||||
std::unique_ptr<UserInterface> m_UserInterface;
|
||||
|
||||
protected:
|
||||
|
@ -39,6 +41,7 @@ namespace Light {
|
|||
|
||||
static inline GraphicsAPI GetGraphicsAPI() { return s_Context->m_GraphicsAPI; }
|
||||
|
||||
inline Renderer* GetRenderer() { return m_Renderer.get(); }
|
||||
inline RenderCommand* GetRenderCommand() { return m_RenderCommand.get(); }
|
||||
inline UserInterface* GetUserInterface() { return m_UserInterface.get(); }
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@ namespace Light {
|
|||
|
||||
class RenderCommand
|
||||
{
|
||||
private:
|
||||
public:
|
||||
RenderCommand(const RenderCommand&) = delete;
|
||||
RenderCommand& operator=(const RenderCommand&) = delete;
|
||||
|
|
63
Engine/src/Engine/Graphics/Renderer.cpp
Normal file
63
Engine/src/Engine/Graphics/Renderer.cpp
Normal file
|
@ -0,0 +1,63 @@
|
|||
#include "ltpch.h"
|
||||
#include "Renderer.h"
|
||||
|
||||
#include "GraphicsContext.h"
|
||||
|
||||
#include "RenderCommand.h"
|
||||
|
||||
namespace Light {
|
||||
|
||||
Renderer* Renderer::m_Context;
|
||||
|
||||
Renderer::Renderer(std::shared_ptr<RenderCommand> renderCommand)
|
||||
: m_RenderCommand(renderCommand)
|
||||
{
|
||||
m_Context = this;
|
||||
|
||||
m_Shader = std::unique_ptr<Shader>(Shader::Create(
|
||||
R"(
|
||||
#version 450 core
|
||||
|
||||
layout(location = 0) in vec2 a_Position;
|
||||
|
||||
void main()
|
||||
{
|
||||
gl_Position = vec4(a_Position, 0.0, 1.0);
|
||||
})",
|
||||
R"(
|
||||
#version 450 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
}
|
||||
)"));
|
||||
|
||||
float vertices[] =
|
||||
{
|
||||
-0.5f, -0.5f,
|
||||
0.5f, -0.5f,
|
||||
0.0f, 0.5f,
|
||||
};
|
||||
|
||||
m_VertexBuffer = std::unique_ptr<VertexBuffer>(VertexBuffer::Create(2 * 3, vertices));
|
||||
m_VertexLayout = std::unique_ptr<VertexLayout>(VertexLayout::Create(m_VertexBuffer.get(), { VertexElementType::Float2 }));
|
||||
}
|
||||
|
||||
Renderer* Renderer::Create(std::shared_ptr<RenderCommand> renderCommand)
|
||||
{
|
||||
return new Renderer(renderCommand);
|
||||
}
|
||||
|
||||
void Renderer::Draw()
|
||||
{
|
||||
m_Shader->Bind();
|
||||
m_VertexBuffer->Bind();
|
||||
m_VertexLayout->Bind();
|
||||
m_RenderCommand->Draw(3u);
|
||||
}
|
||||
|
||||
|
||||
}
|
34
Engine/src/Engine/Graphics/Renderer.h
Normal file
34
Engine/src/Engine/Graphics/Renderer.h
Normal file
|
@ -0,0 +1,34 @@
|
|||
#pragma once
|
||||
|
||||
#include "Base.h"
|
||||
|
||||
#include "Shader.h"
|
||||
#include "Buffers.h"
|
||||
#include "VertexLayout.h"
|
||||
|
||||
#include <memory>
|
||||
|
||||
namespace Light {
|
||||
|
||||
class RenderCommand;
|
||||
|
||||
class Renderer
|
||||
{
|
||||
private:
|
||||
static Renderer* m_Context;
|
||||
|
||||
std::shared_ptr<RenderCommand> m_RenderCommand;
|
||||
|
||||
std::unique_ptr<Shader> m_Shader;
|
||||
std::unique_ptr<VertexBuffer> m_VertexBuffer;
|
||||
std::unique_ptr<VertexLayout> m_VertexLayout;
|
||||
public:
|
||||
static Renderer* Create(std::shared_ptr<RenderCommand> renderCommand);
|
||||
|
||||
void Draw();
|
||||
|
||||
private:
|
||||
Renderer(std::shared_ptr<RenderCommand> renderCommand);
|
||||
};
|
||||
|
||||
}
|
|
@ -1,10 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
#include "Base.h"
|
||||
|
||||
namespace Light {
|
||||
|
||||
class Shader
|
||||
{
|
||||
private:
|
||||
public:
|
||||
static Shader* Create(const std::string& vertexPath, const std::string& pixelPath);
|
||||
|
||||
|
|
|
@ -3,11 +3,10 @@
|
|||
#include "OpenGL/glVertexLayout.h"
|
||||
|
||||
#include "GraphicsContext.h"
|
||||
#include "Buffers.h"
|
||||
|
||||
namespace Light {
|
||||
|
||||
VertexLayout* VertexLayout::Create(VertexBuffer* buffer, const std::vector<VertexElementType> elements)
|
||||
VertexLayout* VertexLayout::Create(VertexBuffer* buffer, const std::vector<VertexElementType>& elements)
|
||||
{
|
||||
switch (GraphicsContext::GetGraphicsAPI())
|
||||
{
|
||||
|
|
|
@ -19,7 +19,9 @@ namespace Light {
|
|||
class VertexLayout
|
||||
{
|
||||
public:
|
||||
static VertexLayout* Create(VertexBuffer* buffer, const std::vector<VertexElementType> elements);
|
||||
static VertexLayout* Create(VertexBuffer* buffer, const std::vector<VertexElementType>& elements);
|
||||
|
||||
virtual ~VertexLayout() = default;;
|
||||
|
||||
virtual void Bind() = 0;
|
||||
virtual void UnBind() = 0;
|
||||
|
|
|
@ -7,10 +7,13 @@ namespace Light {
|
|||
class Layer;
|
||||
class Event;
|
||||
|
||||
template <typename T>
|
||||
using Raw = T*;
|
||||
|
||||
class LayerStack
|
||||
{
|
||||
private:
|
||||
static LayerStack* s_Context;
|
||||
static Raw<LayerStack> s_Context;
|
||||
|
||||
std::vector<Layer*> m_Layers;
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
// Graphics
|
||||
#include "Graphics/GraphicsContext.h"
|
||||
#include "Graphics/RenderCommand.h"
|
||||
#include "Graphics/Renderer.h"
|
||||
|
||||
// Layer
|
||||
#include "Layer/Layer.h"
|
||||
|
|
|
@ -2,11 +2,15 @@
|
|||
#include "glGraphicsContext.h"
|
||||
|
||||
// Required for forward declaration
|
||||
#include "Graphics/Renderer.h"
|
||||
#include "Graphics/RenderCommand.h"
|
||||
#include "Graphics/Shader.h"
|
||||
#include "Graphics/Buffers.h"
|
||||
#include "Graphics/VertexLayout.h"
|
||||
#include "UserInterface/UserInterface.h"
|
||||
|
||||
#include <glad/glad.h>
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <glfw/glfw3.h>
|
||||
|
||||
namespace Light {
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "ltpch.h"
|
||||
#include "glShader.h"
|
||||
|
||||
#include <GLAD/glad.h>
|
||||
#include <glad/glad.h>
|
||||
|
||||
namespace Light {
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace Light {
|
|||
LT_ENGINE_ASSERT(dynamic_cast<glVertexBuffer*>(buffer), "glVertexLayout::glVertexLayout: failed to cast VertexBuffer to glVertexBuffer");
|
||||
|
||||
// elements desc
|
||||
std::vector<glVertexElementDesc> elementsDesc(elements.size());
|
||||
std::vector<glVertexElementDesc> elementsDesc;
|
||||
|
||||
unsigned int stride = 0u;
|
||||
for(const auto& element : elements)
|
||||
|
|
|
@ -4,13 +4,13 @@ Size=400,400
|
|||
Collapsed=0
|
||||
|
||||
[Window][Dear ImGui Demo]
|
||||
Pos=276,-1
|
||||
Size=521,536
|
||||
Collapsed=0
|
||||
Pos=-3,0
|
||||
Size=524,134
|
||||
Collapsed=1
|
||||
|
||||
[Window][Dear ImGui Metrics/Debugger]
|
||||
Pos=263,318
|
||||
Size=346,290
|
||||
Pos=-5,16
|
||||
Size=525,114
|
||||
Collapsed=0
|
||||
|
||||
[Table][0xC9935533,3]
|
||||
|
|
Loading…
Add table
Reference in a new issue