Compare commits
1 Commits
forward-re
...
mono
| Author | SHA1 | Date | |
|---|---|---|---|
| 2b82b30de1 |
@ -103,7 +103,7 @@ namespace Prism {
|
||||
uint32_t attribIndex = 0;
|
||||
for (const auto& element : layout)
|
||||
{
|
||||
auto glBaseType = ShaderDataTypeToOpenGLBaseType(element.Type);
|
||||
const auto glBaseType = ShaderDataTypeToOpenGLBaseType(element.Type);
|
||||
glEnableVertexAttribArray(attribIndex);
|
||||
if (glBaseType == GL_INT)
|
||||
{
|
||||
|
||||
@ -14,8 +14,8 @@ namespace Prism {
|
||||
OpenGLPipeline(const PipelineSpecification& spec);
|
||||
virtual ~OpenGLPipeline();
|
||||
|
||||
virtual PipelineSpecification& GetSpecification() { return m_Specification; }
|
||||
virtual const PipelineSpecification& GetSpecification() const { return m_Specification; }
|
||||
virtual PipelineSpecification& GetSpecification() override { return m_Specification; }
|
||||
virtual const PipelineSpecification& GetSpecification() const override { return m_Specification; }
|
||||
|
||||
virtual void Invalidate() override;
|
||||
|
||||
|
||||
@ -1,107 +0,0 @@
|
||||
//
|
||||
// Created by sfd on 25-11-29.
|
||||
//
|
||||
|
||||
#include "OpenGLVertexArray.h"
|
||||
|
||||
#include "glad/glad.h"
|
||||
#include "Prism/Renderer/Renderer.h"
|
||||
|
||||
namespace Prism
|
||||
{
|
||||
static GLenum ShaderDataTypeToOpenGLBaseType(ShaderDataType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ShaderDataType::Float: return GL_FLOAT;
|
||||
case ShaderDataType::Float2: return GL_FLOAT;
|
||||
case ShaderDataType::Float3: return GL_FLOAT;
|
||||
case ShaderDataType::Float4: return GL_FLOAT;
|
||||
case ShaderDataType::Mat3: return GL_FLOAT;
|
||||
case ShaderDataType::Mat4: return GL_FLOAT;
|
||||
case ShaderDataType::Int: return GL_INT;
|
||||
case ShaderDataType::Int2: return GL_INT;
|
||||
case ShaderDataType::Int3: return GL_INT;
|
||||
case ShaderDataType::Int4: return GL_INT;
|
||||
case ShaderDataType::Bool: return GL_BOOL;
|
||||
}
|
||||
|
||||
PM_CORE_ASSERT(false, "Unknown ShaderDataType!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
OpenGLVertexArray::OpenGLVertexArray()
|
||||
{
|
||||
Renderer::Submit([this]() {
|
||||
glCreateVertexArrays(1, &m_RendererID);
|
||||
});
|
||||
}
|
||||
|
||||
OpenGLVertexArray::~OpenGLVertexArray()
|
||||
{
|
||||
GLuint rendererID = m_RendererID;
|
||||
Renderer::Submit([rendererID](){
|
||||
glDeleteVertexArrays(1, &rendererID);
|
||||
});
|
||||
}
|
||||
|
||||
void OpenGLVertexArray::Bind() const
|
||||
{
|
||||
Ref<const OpenGLVertexArray> instance = this;
|
||||
Renderer::Submit([instance](){
|
||||
glBindVertexArray(instance->m_RendererID);
|
||||
});
|
||||
}
|
||||
|
||||
void OpenGLVertexArray::Unbind() const
|
||||
{
|
||||
Renderer::Submit([this](){
|
||||
glBindVertexArray(0);
|
||||
});
|
||||
}
|
||||
|
||||
void OpenGLVertexArray::AddVertexBuffer(const Ref<VertexBuffer>& vertexBuffer)
|
||||
{
|
||||
const auto size = vertexBuffer->GetLayout().GetElements().size();
|
||||
PM_CORE_ASSERT(size, "Vertex Buffer has no layout!");
|
||||
|
||||
Bind();
|
||||
vertexBuffer->Bind();
|
||||
Ref<OpenGLVertexArray> instance = this;
|
||||
Renderer::Submit([instance, vertexBuffer]() mutable {
|
||||
const auto& layout = vertexBuffer->GetLayout();
|
||||
for (const auto& element : layout)
|
||||
{
|
||||
auto glBaseType = ShaderDataTypeToOpenGLBaseType(element.Type);
|
||||
glEnableVertexAttribArray(instance->m_VertexBufferIndex);
|
||||
if (glBaseType == GL_INT)
|
||||
{
|
||||
glVertexAttribIPointer(instance->m_VertexBufferIndex,
|
||||
element.GetComponentCount(),
|
||||
glBaseType,
|
||||
layout.GetStride(),
|
||||
(const void*)(intptr_t)element.Offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
glVertexAttribPointer(instance->m_VertexBufferIndex,
|
||||
element.GetComponentCount(),
|
||||
glBaseType,
|
||||
element.Normalized ? GL_TRUE : GL_FALSE,
|
||||
layout.GetStride(),
|
||||
(const void*)(intptr_t)element.Offset);
|
||||
}
|
||||
instance->m_VertexBufferIndex++;
|
||||
}
|
||||
});
|
||||
m_VertexBuffers.push_back(vertexBuffer);
|
||||
}
|
||||
|
||||
void OpenGLVertexArray::SetIndexBuffer(const Ref<IndexBuffer>& indexBuffer)
|
||||
{
|
||||
Bind();
|
||||
indexBuffer->Bind();
|
||||
|
||||
m_IndexBuffer = indexBuffer;
|
||||
}
|
||||
}
|
||||
@ -1,36 +0,0 @@
|
||||
//
|
||||
// Created by sfd on 25-11-29.
|
||||
//
|
||||
|
||||
#ifndef OPENGLVERTEXARRAY_H
|
||||
#define OPENGLVERTEXARRAY_H
|
||||
|
||||
#include "Prism/Renderer/VertexArray.h"
|
||||
|
||||
namespace Prism
|
||||
{
|
||||
class OpenGLVertexArray : public VertexArray
|
||||
{
|
||||
public:
|
||||
OpenGLVertexArray();
|
||||
virtual ~OpenGLVertexArray();
|
||||
|
||||
virtual void Bind() const override;
|
||||
virtual void Unbind() const override;
|
||||
|
||||
virtual void AddVertexBuffer(const Ref<VertexBuffer>& vertexBuffer) override;
|
||||
virtual void SetIndexBuffer(const Ref<IndexBuffer>& indexBuffer) override;
|
||||
|
||||
virtual const std::vector<Ref<VertexBuffer>>& GetVertexBuffers() const override { return m_VertexBuffers; }
|
||||
virtual const Ref<IndexBuffer>& GetIndexBuffer() const override { return m_IndexBuffer; }
|
||||
virtual RendererID GetRendererID() const override { return m_RendererID; }
|
||||
private:
|
||||
RendererID m_RendererID = 0;
|
||||
uint32_t m_VertexBufferIndex = 0;
|
||||
std::vector<Ref<VertexBuffer>> m_VertexBuffers;
|
||||
Ref<IndexBuffer> m_IndexBuffer;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //OPENGLVERTEXARRAY_H
|
||||
@ -7,10 +7,10 @@
|
||||
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
#include "IndexBuffer.h"
|
||||
#include "Material.h"
|
||||
#include "Pipeline.h"
|
||||
#include "Shader.h"
|
||||
#include "VertexArray.h"
|
||||
#include "Prism/Core/TimeStep.h"
|
||||
#include "Prism/Core/Math/AABB.h"
|
||||
|
||||
|
||||
@ -6,7 +6,6 @@
|
||||
|
||||
#include "Renderer.h"
|
||||
#include "Shader.h"
|
||||
#include "VertexArray.h"
|
||||
|
||||
namespace Prism
|
||||
{
|
||||
|
||||
@ -1,23 +0,0 @@
|
||||
//
|
||||
// Created by sfd on 25-11-29.
|
||||
//
|
||||
|
||||
#include "VertexArray.h"
|
||||
|
||||
#include "Prism/Platform/OpenGL/OpenGLVertexArray.h"
|
||||
|
||||
namespace Prism
|
||||
{
|
||||
Ref<VertexArray> VertexArray::Create()
|
||||
{
|
||||
switch (RendererAPI::Current())
|
||||
{
|
||||
case RendererAPIType::None: PM_CORE_ASSERT(false, "RendererAPI::None is currently not supported!");
|
||||
return nullptr;
|
||||
case RendererAPIType::OpenGL: return Ref<OpenGLVertexArray>::Create();
|
||||
}
|
||||
|
||||
PM_CORE_ASSERT(false, "Unknown RendererAPI");
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
@ -1,35 +0,0 @@
|
||||
//
|
||||
// Created by sfd on 25-11-29.
|
||||
//
|
||||
|
||||
#ifndef VERTEXARRAY_H
|
||||
#define VERTEXARRAY_H
|
||||
#include "IndexBuffer.h"
|
||||
#include "VertexBuffer.h"
|
||||
#include "Prism/Core/Ref.h"
|
||||
|
||||
|
||||
namespace Prism
|
||||
{
|
||||
class PRISM_API VertexArray : public RefCounted
|
||||
{
|
||||
public:
|
||||
virtual ~VertexArray() {}
|
||||
|
||||
static Ref<VertexArray> Create();
|
||||
|
||||
virtual void Bind() const = 0;
|
||||
virtual void Unbind() const = 0;
|
||||
|
||||
virtual void AddVertexBuffer(const Ref<VertexBuffer>& vertexBuffer) = 0;
|
||||
virtual void SetIndexBuffer(const Ref<IndexBuffer>& indexBuffer) = 0;
|
||||
|
||||
virtual const std::vector<Ref<VertexBuffer>>& GetVertexBuffers() const = 0;
|
||||
virtual const Ref<IndexBuffer>& GetIndexBuffer() const = 0;
|
||||
|
||||
virtual RendererID GetRendererID() const = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
#endif //VERTEXARRAY_H
|
||||
Reference in New Issue
Block a user