3D Editor treaks
This commit is contained in:
parent
0b279163de
commit
822c60d839
27 changed files with 254 additions and 124 deletions
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
7
RasterRender/rsc/shaders/default.frag
Normal file
7
RasterRender/rsc/shaders/default.frag
Normal 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);
|
||||
}
|
||||
13
RasterRender/rsc/shaders/default.vert
Normal file
13
RasterRender/rsc/shaders/default.vert
Normal 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;
|
||||
}
|
||||
7
RasterRender/rsc/shaders/solid.frag
Normal file
7
RasterRender/rsc/shaders/solid.frag
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#version 330 core
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main() {
|
||||
FragColor = vec4(1, 0, 0, 1.f);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue