hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
Diffstat (limited to 'src/rendering')
-rw-r--r--src/rendering/index_buffer.cpp6
-rw-r--r--src/rendering/index_buffer.h3
-rw-r--r--src/rendering/renderer.cpp8
-rw-r--r--src/rendering/renderer.h22
-rw-r--r--src/rendering/shader.cpp22
-rw-r--r--src/rendering/shader.h6
-rw-r--r--src/rendering/uniform_buffer.cpp23
-rw-r--r--src/rendering/uniform_buffer.h18
-rw-r--r--src/rendering/vertex_array.cpp6
-rw-r--r--src/rendering/vertex_array.h2
-rw-r--r--src/rendering/vertex_buffer.cpp6
-rw-r--r--src/rendering/vertex_buffer.h6
12 files changed, 95 insertions, 33 deletions
diff --git a/src/rendering/index_buffer.cpp b/src/rendering/index_buffer.cpp
index 1095e3b..3271a5a 100644
--- a/src/rendering/index_buffer.cpp
+++ b/src/rendering/index_buffer.cpp
@@ -6,14 +6,14 @@
namespace Donut
{
- IndexBuffer* IndexBuffer::create(const uint32_t* indices, uint32_t count)
+ Ref<IndexBuffer> IndexBuffer::create(const uint32_t* indices, uint32_t count)
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
- return new OpenGLIndexBuffer(indices, count);
+ return create_ref<OpenGLIndexBuffer>(indices, count);
case RendererAPI::API::Vulkan:
- return new VulkanIndexBuffer((uint32_t*)indices, count);
+ return create_ref<VulkanIndexBuffer>((uint32_t*)indices, count);
default:
return nullptr;
}
diff --git a/src/rendering/index_buffer.h b/src/rendering/index_buffer.h
index 856559a..9859c20 100644
--- a/src/rendering/index_buffer.h
+++ b/src/rendering/index_buffer.h
@@ -1,5 +1,6 @@
#pragma once
+#include "core/memory.h"
#include <cstdint>
namespace Donut
@@ -13,6 +14,6 @@ namespace Donut
virtual void unbind() const = 0;
virtual uint32_t get_count() const = 0;
- static IndexBuffer* create(const uint32_t* indices, uint32_t count);
+ static Ref<IndexBuffer> create(const uint32_t* indices, uint32_t count);
};
};
diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp
index 5e4682c..f34e2b0 100644
--- a/src/rendering/renderer.cpp
+++ b/src/rendering/renderer.cpp
@@ -7,14 +7,14 @@
namespace Donut
{
- Scope<RendererAPI> RendererAPI::create()
+ Ref<RendererAPI> RendererAPI::create()
{
switch (s_api)
{
case API::OpenGL:
- return create_scope<OpenGLRendererAPI>();
+ return create_ref<OpenGLRendererAPI>();
case API::Vulkan:
- return create_scope<VulkanRendererAPI>();
+ return create_ref<VulkanRendererAPI>();
default:
return nullptr;
}
@@ -50,7 +50,7 @@ namespace Donut
RenderCommand::draw_indexed(vertex_array);
}
- Scope<RendererAPI> RenderCommand::s_renderer_api = RendererAPI::create();
+ Ref<RendererAPI> RenderCommand::s_renderer_api = RendererAPI::create();
void Renderer::set_clear_color(const glm::vec4& color)
{
diff --git a/src/rendering/renderer.h b/src/rendering/renderer.h
index 6212b21..4a028e5 100644
--- a/src/rendering/renderer.h
+++ b/src/rendering/renderer.h
@@ -26,14 +26,17 @@ namespace Donut
virtual void set_clear_color(const glm::vec4& color) = 0;
virtual void clear() = 0;
virtual void enable_depth_test() = 0;
+ virtual void disable_depth_test() = 0;
virtual void set_face_culling(bool enabled) = 0;
+ virtual void enable_blending() = 0;
+ virtual void disable_blending() = 0;
virtual void draw_indexed(const Ref<VertexArray>& vertex_array,
uint32_t index_count = 0) = 0;
inline static API get_api() { return s_api; }
inline static void set_api(API api) { s_api = api; }
- static Scope<RendererAPI> create();
+ static Ref<RendererAPI> create();
private:
static API s_api;
};
@@ -66,18 +69,33 @@ namespace Donut
s_renderer_api->enable_depth_test();
}
+ inline static void disable_depth_test()
+ {
+ s_renderer_api->disable_depth_test();
+ }
+
inline static void set_face_culling(bool enabled)
{
s_renderer_api->set_face_culling(enabled);
}
+ inline static void enable_blending()
+ {
+ s_renderer_api->enable_blending();
+ }
+
+ inline static void disable_blending()
+ {
+ s_renderer_api->disable_blending();
+ }
+
inline static void draw_indexed(const Ref<VertexArray>& vertex_array, uint32_t index_count = 0)
{
s_renderer_api->draw_indexed(vertex_array, index_count);
}
private:
- static Scope<RendererAPI> s_renderer_api;
+ static Ref<RendererAPI> s_renderer_api;
};
class Renderer
diff --git a/src/rendering/shader.cpp b/src/rendering/shader.cpp
index 1bbd0fc..833b719 100644
--- a/src/rendering/shader.cpp
+++ b/src/rendering/shader.cpp
@@ -6,40 +6,40 @@
namespace Donut
{
- Shader* Shader::create(const std::string& filepath)
+ Ref<Shader> Shader::create(const std::string& filepath)
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
- return new OpenGLShader(filepath);
+ return create_ref<OpenGLShader>(filepath);
case RendererAPI::API::Vulkan:
- return new VulkanShader(filepath);
+ return create_ref<VulkanShader>(filepath);
default:
return nullptr;
}
}
- Shader* Shader::create(const std::string& name, const std::string& vertex_src, const std::string& fragment_src)
+ Ref<Shader> Shader::create(const std::string& name, const std::string& vertex_src, const std::string& fragment_src)
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
- return new OpenGLShader(name, vertex_src, fragment_src);
+ return create_ref<OpenGLShader>(name, vertex_src, fragment_src);
case RendererAPI::API::Vulkan:
- return new VulkanShader(name, vertex_src, fragment_src);
+ return create_ref<VulkanShader>(name, vertex_src, fragment_src);
default:
return nullptr;
}
}
- Shader* Shader::create_compute(const std::string& name, const std::string& compute_src)
+ Ref<Shader> Shader::create_compute(const std::string& name, const std::string& compute_src)
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
- return new OpenGLShader(name, compute_src);
+ return create_ref<OpenGLShader>(name, compute_src);
case RendererAPI::API::Vulkan:
- return new VulkanShader(name, compute_src);
+ return create_ref<VulkanShader>(name, compute_src);
default:
return nullptr;
}
@@ -58,14 +58,14 @@ namespace Donut
Ref<Shader> ShaderLibrary::load(const std::string& filepath)
{
- auto shader = Ref<Shader>(Shader::create(filepath));
+ auto shader = Shader::create(filepath);
add(shader);
return shader;
}
Ref<Shader> ShaderLibrary::load(const std::string& name, const std::string& filepath)
{
- auto shader = Ref<Shader>(Shader::create(filepath));
+ auto shader = Shader::create(filepath);
add(name, shader);
return shader;
}
diff --git a/src/rendering/shader.h b/src/rendering/shader.h
index 814f0cf..7f024bd 100644
--- a/src/rendering/shader.h
+++ b/src/rendering/shader.h
@@ -35,9 +35,9 @@ namespace Donut
virtual const std::string& get_name() const = 0;
- static Shader* create(const std::string& filepath);
- static Shader* create(const std::string& name, const std::string& vertex_src, const std::string& fragment_src);
- static Shader* create_compute(const std::string& name, const std::string& compute_src);
+ static Ref<Shader> create(const std::string& filepath);
+ static Ref<Shader> create(const std::string& name, const std::string& vertex_src, const std::string& fragment_src);
+ static Ref<Shader> create_compute(const std::string& name, const std::string& compute_src);
};
class ShaderLibrary
diff --git a/src/rendering/uniform_buffer.cpp b/src/rendering/uniform_buffer.cpp
new file mode 100644
index 0000000..4e693a2
--- /dev/null
+++ b/src/rendering/uniform_buffer.cpp
@@ -0,0 +1,23 @@
+#include "uniform_buffer.h"
+#include "renderer.h"
+
+#include "platform/opengl/opengl_uniform_buffer.h"
+#include "platform/vulkan/vulkan_uniform_buffer.h"
+
+namespace Donut
+{
+ Ref<UniformBuffer> UniformBuffer::create(uint32_t size, uint32_t binding)
+ {
+ switch (Renderer::get_api())
+ {
+ case RendererAPI::API::OpenGL:
+ return create_ref<OpenGLUniformBuffer>(size, binding);
+ case RendererAPI::API::Vulkan:
+ return create_ref<VulkanUniformBuffer>(size, binding);
+ case RendererAPI::API::None:
+ return nullptr;
+ default:
+ return nullptr;
+ }
+ }
+};
diff --git a/src/rendering/uniform_buffer.h b/src/rendering/uniform_buffer.h
new file mode 100644
index 0000000..4df39d9
--- /dev/null
+++ b/src/rendering/uniform_buffer.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "core/memory.h"
+#include <cstdint>
+
+namespace Donut
+{
+ class UniformBuffer
+ {
+ public:
+ virtual ~UniformBuffer() = default;
+
+ virtual void set_data(const void* data, uint32_t size, uint32_t offset = 0) = 0;
+ virtual void bind(uint32_t binding) = 0;
+
+ static Ref<UniformBuffer> create(uint32_t size, uint32_t binding);
+ };
+};
diff --git a/src/rendering/vertex_array.cpp b/src/rendering/vertex_array.cpp
index bb92ff3..d0cd4b0 100644
--- a/src/rendering/vertex_array.cpp
+++ b/src/rendering/vertex_array.cpp
@@ -17,14 +17,14 @@ namespace Donut
}
}
- VertexArray* VertexArray::create()
+ Ref<VertexArray> VertexArray::create()
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
- return new OpenGLVertexArray();
+ return create_ref<OpenGLVertexArray>();
case RendererAPI::API::Vulkan:
- return new VulkanVertexArray();
+ return create_ref<VulkanVertexArray>();
default:
return nullptr;
}
diff --git a/src/rendering/vertex_array.h b/src/rendering/vertex_array.h
index a39849f..3729167 100644
--- a/src/rendering/vertex_array.h
+++ b/src/rendering/vertex_array.h
@@ -23,6 +23,6 @@ namespace Donut
virtual const std::vector<Ref<VertexBuffer>>& get_vertex_buffers() const = 0;
virtual const Ref<IndexBuffer>& get_index_buffer() const = 0;
- static VertexArray* create();
+ static Ref<VertexArray> create();
};
};
diff --git a/src/rendering/vertex_buffer.cpp b/src/rendering/vertex_buffer.cpp
index 4929711..ef2b288 100644
--- a/src/rendering/vertex_buffer.cpp
+++ b/src/rendering/vertex_buffer.cpp
@@ -6,14 +6,14 @@
namespace Donut
{
- VertexBuffer* VertexBuffer::create(const void* data, uint32_t size)
+ Ref<VertexBuffer> VertexBuffer::create(const void* data, uint32_t size)
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
- return new OpenGLVertexBuffer(data, size);
+ return create_ref<OpenGLVertexBuffer>(data, size);
case RendererAPI::API::Vulkan:
- return new VulkanVertexBuffer((float*)data, size);
+ return create_ref<VulkanVertexBuffer>((float*)data, size);
default:
return nullptr;
}
diff --git a/src/rendering/vertex_buffer.h b/src/rendering/vertex_buffer.h
index 77a76c9..39f43ba 100644
--- a/src/rendering/vertex_buffer.h
+++ b/src/rendering/vertex_buffer.h
@@ -1,5 +1,7 @@
#pragma once
+#include "core/memory.h"
+
#include <cstdint>
#include <vector>
@@ -22,7 +24,7 @@ namespace Donut
~VertexBufferLayout() = default;
template<typename T>
- void push(uint32_t count)
+ void push(uint32_t count)
{
static_assert(false);
}
@@ -68,6 +70,6 @@ namespace Donut
virtual const VertexBufferLayout& get_layout() const = 0;
virtual void set_layout(const VertexBufferLayout& layout) = 0;
- static VertexBuffer* create(const void* data, uint32_t size);
+ static Ref<VertexBuffer> create(const void* data, uint32_t size);
};
};