3D Editor treaks

This commit is contained in:
IlyaShurupov 2024-11-05 12:26:48 +03:00 committed by Ilya Shurupov
parent 8d167b960a
commit 573541ba2d
27 changed files with 254 additions and 124 deletions

View file

@ -3,20 +3,24 @@
using namespace tp;
RasterRender::RasterRender() :
mRenderBuffer({ 100, 100 })
{
RasterRender::RasterRender() {
mDefaultShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/default.frag", true);
mSolidShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/solid.frag", true);
}
RasterRender::~RasterRender() {}
void RasterRender::resize(const Vec2<tp::ualni>& size) {
auto sizeF = Vec2F(size.x, size.y);
mRenderBuffer.resize(sizeF);
mTempBuffer.resize(sizeF);
}
uint4 RasterRender::getRenderBufferID() { return mRenderBuffer.texId(); }
Vec2F RasterRender::getBufferSize() { return mRenderBuffer.getSize(); }
void RasterRender::bindCameraShaderAttributes(Mat4F cameraMat) {
void RasterRender::bindCameraShaderAttributes(const Mat4F& cameraMat) {
static auto camera = (GLint) mDefaultShader.getu("Camera");
glUniformMatrix4fv(camera, 1, true, &cameraMat[0][0]);
}
@ -28,11 +32,18 @@ void RasterRender::bindObjectShaderAttributes(const Object& object) {
Mat4F basisMat = toMat4(object.mTopology.Basis);
Vec4F originPoint = toVec4(object.mTopology.Origin);
basisMat = basisMat.transpose();
glUniform4fv(origin, 1, &originPoint[0]);
glUniformMatrix4fv(basis, 1, false, &basisMat[0][0]);
}
void RasterRender::renderDefault(const Scene& geometry) {
mRenderBuffer.mClearCol = { 0.0f, 0.0f, 0.0f, 0.f };
mRenderBuffer.beginDraw();
mRenderBuffer.clear();
mDefaultShader.bind();
Mat4F cameraMat = geometry.mCamera.calculateTransformationMatrix();
@ -55,10 +66,19 @@ void RasterRender::renderDefault(const Scene& geometry) {
}
mDefaultShader.unbind();
glDisable(GL_DEPTH_TEST);
// glPolygonMode(GL_FRONT, GL_FILL);
// glPolygonMode(GL_BACK, GL_FILL);
mRenderBuffer.endDraw();
}
void RasterRender::renderOutline(const Camera& camera, const Object& object) {
glEnable(GL_STENCIL_TEST);
mRenderBuffer.beginDraw();
// glEnable(GL_STENCIL_TEST);
mSolidShader.bind();
@ -69,30 +89,23 @@ void RasterRender::renderOutline(const Camera& camera, const Object& object) {
mSolidShader.unbind();
glDisable(GL_STENCIL_TEST);
// glDisable(GL_STENCIL_TEST);
mRenderBuffer.endDraw();
}
void RasterRender::render(const Scene& geometry, const Vec2<ualni>& size) {
void RasterRender::beginRender(const Scene& geometry, const Vec2<tp::ualni>& size) {
resize(size);
for (auto object : geometry.mObjects) {
if (!object->mGUPBuffers) {
object->mGUPBuffers = new ObjectBuffers(&object.data());
}
}
}
mRenderBuffer.mClearCol = { 0.0f, 0.0f, 0.0f, 0.f };
mRenderBuffer.beginDraw();
mRenderBuffer.clear();
renderDefault(geometry);
// if (geometry.mObjects.size()) renderOutline(geometry.mCamera, geometry.mObjects.first());
// glPolygonMode(GL_FRONT, GL_FILL);
// glPolygonMode(GL_BACK, GL_FILL);
mRenderBuffer.endDraw();
void RasterRender::endRender() {
// pass
}
RenderBuffer* RasterRender::getRenderBuffer() { return &mRenderBuffer; }

View file

@ -7,7 +7,7 @@
namespace tp {
class RenderBuffer {
public:
explicit RenderBuffer(const Vec2F& size);
explicit RenderBuffer(const Vec2F& size = { 10, 10 });
RenderBuffer(const Vec2F& size, tp::uint1 samples);
~RenderBuffer();

View file

@ -12,20 +12,25 @@ namespace tp {
RasterRender();
~RasterRender();
void render(const Scene& geometry, const Vec2<ualni>& size);
void beginRender(const Scene& geometry, const Vec2<ualni>& size);
void endRender();
void renderDefault(const Scene& geometry);
void renderOutline(const Camera& camera, const Object& object);
void resize(const Vec2<ualni>& size);
uint4 getRenderBufferID();
RenderBuffer* getRenderBuffer();
Vec2F getBufferSize();
private:
void renderDefault(const Scene& geometry);
void renderOutline(const Camera& camera, const Object& object);
void bindObjectShaderAttributes(const Object& object);
void bindCameraShaderAttributes(Mat4F cameraMat);
void bindCameraShaderAttributes(const Mat4F& cameraMat);
private:
RenderBuffer mRenderBuffer;
RenderBuffer mTempBuffer;
RenderShader mDefaultShader;
RenderShader mSolidShader;

View file

@ -0,0 +1,7 @@
#version 330 core
out vec4 FragColor;
void main() {
FragColor = vec4(gl_FragCoord.z, gl_FragCoord.z, gl_FragCoord.z, 1.f);
}

View file

@ -0,0 +1,13 @@
#version 330 core
layout(location = 0) in vec3 Point;
uniform vec4 Origin;
uniform mat4 Basis;
uniform mat4 Camera;
void main() {
// vec4 transformed = vec4(Point.xyz, 1.0);
vec4 transformed = (Basis * vec4(Point.xyz, 1.0)) + Origin;
gl_Position = Camera * transformed;
}

View file

@ -0,0 +1,7 @@
#version 330 core
out vec4 FragColor;
void main() {
FragColor = vec4(1, 0, 0, 1.f);
}