Use scene module in editor
This commit is contained in:
parent
55f5537a67
commit
a0a40f1d04
7 changed files with 78 additions and 140 deletions
61
3DEditor/private/GPUBuffers.hpp
Normal file
61
3DEditor/private/GPUBuffers.hpp
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#pragma once
|
||||
|
||||
#include "Scene.hpp"
|
||||
#include "GraphicsApi.hpp"
|
||||
|
||||
namespace tp {
|
||||
|
||||
class ObjectBuffers : public GPUBuffers {
|
||||
public:
|
||||
ObjectBuffers(Object* object) {
|
||||
mObject = (object);
|
||||
|
||||
auto& buff = mObject->mTopology.Points;
|
||||
auto& indices = mObject->mTopology.Indexes;
|
||||
|
||||
glGenVertexArrays(1, &VAO);
|
||||
glGenBuffers(1, &VBO);
|
||||
glGenBuffers(1, &EBO);
|
||||
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(Vec3F) * buff.size(), buff.getBuff(), GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Vec3<uhalni>) * indices.size(), indices.getBuff(), GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), nullptr);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
Object* mObject = nullptr;
|
||||
|
||||
GLuint VAO = 0;
|
||||
GLuint VBO = 0;
|
||||
GLuint EBO = 0;
|
||||
|
||||
void drawCall() override {
|
||||
auto& indices = mObject->mTopology.Indexes;
|
||||
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glDrawElements(GL_TRIANGLES, indices.size() * 3, GL_UNSIGNED_INT, nullptr);
|
||||
|
||||
// glDrawArrays(GL_TRIANGLES, 0, sizeof(buffer) / (2 * sizeof(float)));
|
||||
|
||||
// glBindVertexArray(0);
|
||||
}
|
||||
|
||||
~ObjectBuffers() {
|
||||
glDeleteBuffers(1, &VBO);
|
||||
glDeleteVertexArrays(1, &VAO);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
|
@ -1,62 +1,8 @@
|
|||
#include "Render.hpp"
|
||||
|
||||
#include "GraphicsApi.hpp"
|
||||
#include "GPUBuffers.hpp"
|
||||
|
||||
using namespace tp;
|
||||
|
||||
class ObjectBuffers {
|
||||
public:
|
||||
ObjectBuffers(Object* object) {
|
||||
mObject = (object);
|
||||
|
||||
auto& buff = mObject->mTopology.Points;
|
||||
auto& indices = mObject->mTopology.Indexes;
|
||||
|
||||
glGenVertexArrays(1, &VAO);
|
||||
glGenBuffers(1, &VBO);
|
||||
glGenBuffers(1, &EBO);
|
||||
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||
glBufferData(GL_ARRAY_BUFFER, sizeof(Vec3F) * buff.size(), buff.getBuff(), GL_STATIC_DRAW);
|
||||
|
||||
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Vec3<uhalni>) * indices.size(), indices.getBuff(), GL_STATIC_DRAW);
|
||||
|
||||
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), nullptr);
|
||||
glEnableVertexAttribArray(0);
|
||||
|
||||
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
glBindVertexArray(0);
|
||||
}
|
||||
|
||||
Object* mObject = nullptr;
|
||||
|
||||
GLuint VAO = 0;
|
||||
GLuint VBO = 0;
|
||||
GLuint EBO = 0;
|
||||
|
||||
void drawCall() {
|
||||
auto& indices = mObject->mTopology.Indexes;
|
||||
|
||||
glBindVertexArray(VAO);
|
||||
|
||||
// glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||
glDrawElements(GL_TRIANGLES, indices.size() * 3, GL_UNSIGNED_INT, nullptr);
|
||||
|
||||
// glDrawArrays(GL_TRIANGLES, 0, sizeof(buffer) / (2 * sizeof(float)));
|
||||
|
||||
// glBindVertexArray(0);
|
||||
}
|
||||
|
||||
~ObjectBuffers() {
|
||||
glDeleteBuffers(1, &VBO);
|
||||
glDeleteVertexArrays(1, &VAO);
|
||||
}
|
||||
};
|
||||
|
||||
Render::Render(Vec2F renderResolution) :
|
||||
mRenderBuffer(renderResolution) {
|
||||
|
||||
|
|
@ -72,8 +18,8 @@ Vec2F Render::getBufferSize() { return mRenderBuffer.getSize(); }
|
|||
void Render::render(const Scene& geometry, Vec2F size) {
|
||||
|
||||
for (auto object : geometry.mObjects) {
|
||||
if (!object->mBuffers) {
|
||||
object->mBuffers = std::make_shared<ObjectBuffers>(&object.data());
|
||||
if (!object->mGUPBuffers) {
|
||||
object->mGUPBuffers = new ObjectBuffers(&object.data());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -101,7 +47,7 @@ void Render::render(const Scene& geometry, Vec2F size) {
|
|||
glUniformMatrix4fv(basis, 1, false, &basisMat[0][0]);
|
||||
glUniformMatrix4fv(camera, 1, true, &cameraMat[0][0]);
|
||||
|
||||
object->mBuffers->drawCall();
|
||||
object->mGUPBuffers->drawCall();
|
||||
}
|
||||
|
||||
mDefaultShader.unbind();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue