aboutsummaryrefslogtreecommitdiff
path: root/src/Rendering
diff options
context:
space:
mode:
Diffstat (limited to 'src/Rendering')
-rw-r--r--src/Rendering/IndexBuffer.cpp6
-rw-r--r--src/Rendering/IndexBuffer.h3
-rw-r--r--src/Rendering/Renderer.cpp8
-rw-r--r--src/Rendering/Renderer.h52
-rw-r--r--src/Rendering/Shader.cpp22
-rw-r--r--src/Rendering/Shader.h6
-rw-r--r--src/Rendering/TextureManager.cpp34
-rw-r--r--src/Rendering/TextureManager.h19
-rw-r--r--src/Rendering/VertexArray.cpp6
-rw-r--r--src/Rendering/VertexArray.h2
-rw-r--r--src/Rendering/VertexBuffer.cpp6
-rw-r--r--src/Rendering/VertexBuffer.h6
12 files changed, 124 insertions, 46 deletions
diff --git a/src/Rendering/IndexBuffer.cpp b/src/Rendering/IndexBuffer.cpp
index dc900ed..185684b 100644
--- a/src/Rendering/IndexBuffer.cpp
+++ b/src/Rendering/IndexBuffer.cpp
@@ -6,14 +6,14 @@
namespace Donut
{
- Ref<IndexBuffer> IndexBuffer::Create(const uint32_t* indices, uint32_t count)
+ IndexBuffer* IndexBuffer::Create(const uint32_t* indices, uint32_t count)
{
switch (Renderer::GetAPI())
{
case RendererAPI::API::OpenGL:
- return CreateRef<OpenGLIndexBuffer>(indices, count);
+ return new OpenGLIndexBuffer(indices, count);
case RendererAPI::API::Vulkan:
- return CreateRef<VulkanIndexBuffer>((uint32_t*)indices, count);
+ return new VulkanIndexBuffer((uint32_t*)indices, count);
default:
return nullptr;
}
diff --git a/src/Rendering/IndexBuffer.h b/src/Rendering/IndexBuffer.h
index bb1b3a1..a58cc6c 100644
--- a/src/Rendering/IndexBuffer.h
+++ b/src/Rendering/IndexBuffer.h
@@ -1,6 +1,5 @@
#pragma once
-#include "Core/Memory.h"
#include <cstdint>
namespace Donut
@@ -14,6 +13,6 @@ namespace Donut
virtual void Unbind() const = 0;
virtual uint32_t GetCount() const = 0;
- static Ref<IndexBuffer> Create(const uint32_t* indices, uint32_t count);
+ static IndexBuffer* Create(const uint32_t* indices, uint32_t count);
};
};
diff --git a/src/Rendering/Renderer.cpp b/src/Rendering/Renderer.cpp
index c1001d8..c0684cb 100644
--- a/src/Rendering/Renderer.cpp
+++ b/src/Rendering/Renderer.cpp
@@ -7,14 +7,14 @@
namespace Donut
{
- Ref<RendererAPI> RendererAPI::Create()
+ Scope<RendererAPI> RendererAPI::Create()
{
switch (s_API)
{
case API::OpenGL:
- return CreateRef<OpenGLRendererAPI>();
+ return CreateScope<OpenGLRendererAPI>();
case API::Vulkan:
- return CreateRef<VulkanRendererAPI>();
+ return CreateScope<VulkanRendererAPI>();
default:
return nullptr;
}
@@ -50,7 +50,7 @@ namespace Donut
RenderCommand::DrawIndexed(vertexArray);
}
- Ref<RendererAPI> RenderCommand::s_RendererAPI = RendererAPI::Create();
+ Scope<RendererAPI> RenderCommand::s_RendererAPI = RendererAPI::Create();
void Renderer::SetClearColor(const glm::vec4& color)
{
diff --git a/src/Rendering/Renderer.h b/src/Rendering/Renderer.h
index b2a44a4..d6c4154 100644
--- a/src/Rendering/Renderer.h
+++ b/src/Rendering/Renderer.h
@@ -20,23 +20,31 @@ namespace Donut
public:
virtual ~RendererAPI() = default;
- virtual void Init() = 0;
+ virtual void Init() = 0;
virtual void SetViewport(uint32_t x, uint32_t y,
- uint32_t width, uint32_t height) = 0;
- virtual void SetClearColor(const glm::vec4& color) = 0;
- virtual void Clear() = 0;
- virtual void EnableDepthTest() = 0;
- virtual void DisableDepthTest() = 0;
- virtual void SetFaceCulling(bool enabled) = 0;
- virtual void EnableBlending() = 0;
- virtual void DisableBlending() = 0;
+ uint32_t width, uint32_t height) = 0;
+ virtual void SetClearColor(const glm::vec4& color) = 0;
+ virtual void Clear() = 0;
+ virtual void EnableDepthTest() = 0;
+ virtual void DisableDepthTest() = 0;
+ virtual void SetFaceCulling(bool enabled) = 0;
+ virtual void EnableBlending() = 0;
+ virtual void DisableBlending() = 0;
virtual void DrawIndexed(const Ref<VertexArray>& vertexArray,
- uint32_t indexCount = 0) = 0;
+ uint32_t indexCount = 0) = 0;
+
+ virtual void DrawArrays(uint32_t vertexCount, uint32_t first = 0) = 0;
+ virtual void DrawLines(const Ref<VertexArray>& vertexArray,
+ uint32_t indexCount = 0) = 0;
+ virtual void BindTexture(uint32_t textureID, uint32_t slot = 0) = 0;
+ virtual void BindImageTexture(uint32_t textureID,
+ uint32_t slot = 0,
+ bool readOnly = false) = 0;
inline static API GetAPI() { return s_API; }
inline static void SetAPI(API api) { s_API = api; }
- static Ref<RendererAPI> Create();
+ static Scope<RendererAPI> Create();
private:
static API s_API;
};
@@ -94,8 +102,28 @@ namespace Donut
s_RendererAPI->DrawIndexed(vertexArray, indexCount);
}
+ inline static void DrawArrays(uint32_t vertexCount, uint32_t first = 0)
+ {
+ s_RendererAPI->DrawArrays(vertexCount, first);
+ }
+
+ inline static void DrawLines(const Ref<VertexArray>& vertexArray, uint32_t indexCount = 0)
+ {
+ s_RendererAPI->DrawLines(vertexArray, indexCount);
+ }
+
+ inline static void BindTexture(uint32_t textureID, uint32_t slot = 0)
+ {
+ s_RendererAPI->BindTexture(textureID, slot);
+ }
+
+ inline static void BindImageTexture(uint32_t textureID, uint32_t slot = 0, bool readOnly = false)
+ {
+ s_RendererAPI->BindImageTexture(textureID, slot, readOnly);
+ }
+
private:
- static Ref<RendererAPI> s_RendererAPI;
+ static Scope<RendererAPI> s_RendererAPI;
};
class Renderer
diff --git a/src/Rendering/Shader.cpp b/src/Rendering/Shader.cpp
index 2198663..8266e00 100644
--- a/src/Rendering/Shader.cpp
+++ b/src/Rendering/Shader.cpp
@@ -6,40 +6,40 @@
namespace Donut
{
- Ref<Shader> Shader::Create(const std::string& filepath)
+ Shader* Shader::Create(const std::string& filepath)
{
switch (Renderer::GetAPI())
{
case RendererAPI::API::OpenGL:
- return CreateRef<OpenGLShader>(filepath);
+ return new OpenGLShader(filepath);
case RendererAPI::API::Vulkan:
- return CreateRef<VulkanShader>(filepath);
+ return new VulkanShader(filepath);
default:
return nullptr;
}
}
- Ref<Shader> Shader::Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc)
+ Shader* Shader::Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc)
{
switch (Renderer::GetAPI())
{
case RendererAPI::API::OpenGL:
- return CreateRef<OpenGLShader>(name, vertexSrc, fragmentSrc);
+ return new OpenGLShader(name, vertexSrc, fragmentSrc);
case RendererAPI::API::Vulkan:
- return CreateRef<VulkanShader>(name, vertexSrc, fragmentSrc);
+ return new VulkanShader(name, vertexSrc, fragmentSrc);
default:
return nullptr;
}
}
- Ref<Shader> Shader::CreateCompute(const std::string& name, const std::string& computeSrc)
+ Shader* Shader::CreateCompute(const std::string& name, const std::string& computeSrc)
{
switch (Renderer::GetAPI())
{
case RendererAPI::API::OpenGL:
- return CreateRef<OpenGLShader>(name, computeSrc);
+ return new OpenGLShader(name, computeSrc);
case RendererAPI::API::Vulkan:
- return CreateRef<VulkanShader>(name, computeSrc);
+ return new VulkanShader(name, computeSrc);
default:
return nullptr;
}
@@ -58,14 +58,14 @@ namespace Donut
Ref<Shader> ShaderLibrary::Load(const std::string& filepath)
{
- auto shader = Shader::Create(filepath);
+ auto shader = Ref<Shader>(Shader::Create(filepath));
Add(shader);
return shader;
}
Ref<Shader> ShaderLibrary::Load(const std::string& name, const std::string& filepath)
{
- auto shader = Shader::Create(filepath);
+ auto shader = Ref<Shader>(Shader::Create(filepath));
Add(name, shader);
return shader;
}
diff --git a/src/Rendering/Shader.h b/src/Rendering/Shader.h
index 9cfecd9..e2d8d2a 100644
--- a/src/Rendering/Shader.h
+++ b/src/Rendering/Shader.h
@@ -35,9 +35,9 @@ namespace Donut
virtual const std::string& GetName() const = 0;
- static Ref<Shader> Create(const std::string& filepath);
- static Ref<Shader> Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc);
- static Ref<Shader> CreateCompute(const std::string& name, const std::string& computeSrc);
+ static Shader* Create(const std::string& filepath);
+ static Shader* Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc);
+ static Shader* CreateCompute(const std::string& name, const std::string& computeSrc);
};
class ShaderLibrary
diff --git a/src/Rendering/TextureManager.cpp b/src/Rendering/TextureManager.cpp
new file mode 100644
index 0000000..9110558
--- /dev/null
+++ b/src/Rendering/TextureManager.cpp
@@ -0,0 +1,34 @@
+#include "TextureManager.h"
+#include "Platform/OpenGL/OpenGLTexture.h"
+#include "Platform/OpenGL/OpenGLRendererAPI.h"
+#include <glad/glad.h>
+
+namespace Donut
+{
+ Ref<Texture2D> TextureManager::CreateTexture(uint32_t width, uint32_t height)
+ {
+ return CreateRef<OpenGLTexture2D>(width, height);
+ }
+
+ void TextureManager::BindTexture(uint32_t textureID, uint32_t slot)
+ {
+ RenderCommand::BindTexture(textureID, slot);
+ }
+
+ void TextureManager::BindImageTexture(uint32_t textureID, uint32_t slot, bool readOnly)
+ {
+ RenderCommand::BindImageTexture(textureID, slot, readOnly);
+ }
+
+ void TextureManager::SetTextureData(uint32_t textureID, void* data, uint32_t width, uint32_t height)
+ {
+ glBindTexture(GL_TEXTURE_2D, textureID);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);
+ }
+
+ void TextureManager::ResizeTexture(uint32_t textureID, uint32_t width, uint32_t height)
+ {
+ glBindTexture(GL_TEXTURE_2D, textureID);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
+ }
+};
diff --git a/src/Rendering/TextureManager.h b/src/Rendering/TextureManager.h
new file mode 100644
index 0000000..0ab6c5f
--- /dev/null
+++ b/src/Rendering/TextureManager.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "Core/Memory.h"
+#include "Rendering/Texture.h"
+#include <cstdint>
+
+namespace Donut
+{
+ class TextureManager
+ {
+ public:
+ static Ref<Texture2D> CreateTexture(uint32_t width, uint32_t height);
+
+ static void BindTexture(uint32_t textureID, uint32_t slot = 0);
+ static void BindImageTexture(uint32_t textureID, uint32_t slot = 0, bool readOnly = false);
+ static void SetTextureData(uint32_t textureID, void* data, uint32_t width, uint32_t height);
+ static void ResizeTexture(uint32_t textureID, uint32_t width, uint32_t height);
+ };
+};
diff --git a/src/Rendering/VertexArray.cpp b/src/Rendering/VertexArray.cpp
index bca1f4a..366675f 100644
--- a/src/Rendering/VertexArray.cpp
+++ b/src/Rendering/VertexArray.cpp
@@ -17,14 +17,14 @@ namespace Donut
}
}
- Ref<VertexArray> VertexArray::Create()
+ VertexArray* VertexArray::Create()
{
switch (Renderer::GetAPI())
{
case RendererAPI::API::OpenGL:
- return CreateRef<OpenGLVertexArray>();
+ return new OpenGLVertexArray();
case RendererAPI::API::Vulkan:
- return CreateRef<VulkanVertexArray>();
+ return new VulkanVertexArray();
default:
return nullptr;
}
diff --git a/src/Rendering/VertexArray.h b/src/Rendering/VertexArray.h
index aa857e4..10fff89 100644
--- a/src/Rendering/VertexArray.h
+++ b/src/Rendering/VertexArray.h
@@ -23,6 +23,6 @@ namespace Donut
virtual const std::vector<Ref<VertexBuffer>>& GetVertexBuffers() const = 0;
virtual const Ref<IndexBuffer>& GetIndexBuffer() const = 0;
- static Ref<VertexArray> Create();
+ static VertexArray* Create();
};
};
diff --git a/src/Rendering/VertexBuffer.cpp b/src/Rendering/VertexBuffer.cpp
index dd59546..a7e2504 100644
--- a/src/Rendering/VertexBuffer.cpp
+++ b/src/Rendering/VertexBuffer.cpp
@@ -6,14 +6,14 @@
namespace Donut
{
- Ref<VertexBuffer> VertexBuffer::Create(const void* data, uint32_t size)
+ VertexBuffer* VertexBuffer::Create(const void* data, uint32_t size)
{
switch (Renderer::GetAPI())
{
case RendererAPI::API::OpenGL:
- return CreateRef<OpenGLVertexBuffer>(data, size);
+ return new OpenGLVertexBuffer(data, size);
case RendererAPI::API::Vulkan:
- return CreateRef<VulkanVertexBuffer>((float*)data, size);
+ return new VulkanVertexBuffer((float*)data, size);
default:
return nullptr;
}
diff --git a/src/Rendering/VertexBuffer.h b/src/Rendering/VertexBuffer.h
index db85755..35b9a84 100644
--- a/src/Rendering/VertexBuffer.h
+++ b/src/Rendering/VertexBuffer.h
@@ -1,7 +1,5 @@
#pragma once
-#include "Core/Memory.h"
-
#include <cstdint>
#include <vector>
@@ -24,7 +22,7 @@ namespace Donut
~VertexBufferLayout() = default;
template<typename T>
- void Push(uint32_t count)
+ void Push(uint32_t count)
{
static_assert(false);
}
@@ -70,6 +68,6 @@ namespace Donut
virtual const VertexBufferLayout& GetLayout() const = 0;
virtual void SetLayout(const VertexBufferLayout& layout) = 0;
- static Ref<VertexBuffer> Create(const void* data, uint32_t size);
+ static VertexBuffer* Create(const void* data, uint32_t size);
};
};