This commit is contained in:
IlyaShurupov 2024-06-18 17:33:39 +03:00 committed by Ilya Shurupov
parent 3bc43612ef
commit 938616d989
16 changed files with 19 additions and 18 deletions

View file

@ -11,5 +11,5 @@ file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp")
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE} ./ext/)
target_link_libraries(${PROJECT_NAME} PUBLIC Math Connection)
target_link_libraries(${PROJECT_NAME} PUBLIC Math Connection 3DScene)
target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS})

View 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);
}
};
}

View file

@ -0,0 +1,58 @@
#include "RasterRender.hpp"
#include "GPUBuffers.hpp"
using namespace tp;
RasterRender::RasterRender(Vec2F renderResolution) :
mRenderBuffer(renderResolution) {
mDefaultShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/default.frag", true);
}
RasterRender::~RasterRender() {}
uint4 RasterRender::getRenderBufferID() { return mRenderBuffer.texId(); }
Vec2F RasterRender::getBufferSize() { return mRenderBuffer.getSize(); }
void RasterRender::render(const Scene& geometry, Vec2F size) {
for (auto object : geometry.mObjects) {
if (!object->mGUPBuffers) {
object->mGUPBuffers = new ObjectBuffers(&object.data());
}
}
mRenderBuffer.mClearCol = { 0.0f, 0.0f, 0.0f, 1.f };
mRenderBuffer.beginDraw();
mRenderBuffer.clear();
mDefaultShader.bind();
Mat4F cameraMat = geometry.mCamera.calculateTransformationMatrix();
glEnable(GL_DEPTH_TEST);
for (auto object : geometry.mObjects) {
static auto origin = (GLint) mDefaultShader.getu("Origin");
static auto basis = (GLint) mDefaultShader.getu("Basis");
static auto camera = (GLint) mDefaultShader.getu("Camera");
Mat4F basisMat;
Vec4F originPoint;
glUniform4fv(origin, 1, &originPoint[0]);
glUniformMatrix4fv(basis, 1, false, &basisMat[0][0]);
glUniformMatrix4fv(camera, 1, true, &cameraMat[0][0]);
object->mGUPBuffers->drawCall();
}
mDefaultShader.unbind();
mRenderBuffer.endDraw();
}
RenderBuffer* RasterRender::getRenderBuffer() { return &mRenderBuffer; }

View file

@ -0,0 +1,24 @@
#pragma once
#include "Scene.hpp"
#include "Rect.hpp"
#include "FrameBuffer.hpp"
#include "Shader.hpp"
namespace tp {
class RasterRender {
public:
explicit RasterRender(Vec2F renderResolution);
~RasterRender();
void render(const Scene& geometry, Vec2F size);
uint4 getRenderBufferID();
RenderBuffer* getRenderBuffer();
Vec2F getBufferSize();
private:
RenderBuffer mRenderBuffer;
RenderShader mDefaultShader;
};
}