tmp
This commit is contained in:
parent
9e339defd6
commit
a9fbb909ac
21 changed files with 322 additions and 30 deletions
|
|
@ -22,4 +22,6 @@ add_subdirectory(DataAnalysis)
|
||||||
add_subdirectory(Objects)
|
add_subdirectory(Objects)
|
||||||
add_subdirectory(Widgets)
|
add_subdirectory(Widgets)
|
||||||
add_subdirectory(LibraryViewer)
|
add_subdirectory(LibraryViewer)
|
||||||
add_subdirectory(Sketch3D)
|
add_subdirectory(RasterRender)
|
||||||
|
add_subdirectory(Sketch3D)
|
||||||
|
add_subdirectory(GeometryEditor2D)
|
||||||
22
GeometryEditor2D/CMakeLists.txt
Normal file
22
GeometryEditor2D/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
project(GeometryEditor2D)
|
||||||
|
|
||||||
|
### ---------------------- Externals --------------------- ###
|
||||||
|
set(BINDINGS_INCLUDE ../Externals/glfw/include)
|
||||||
|
set(BINDINGS_LIBS glfw Imgui)
|
||||||
|
|
||||||
|
### ---------------------- Static Library --------------------- ###
|
||||||
|
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
|
||||||
|
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 Graphics Connection Widgets Math RasterRender)
|
||||||
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS})
|
||||||
|
|
||||||
|
### -------------------------- Applications -------------------------- ###
|
||||||
|
add_executable(geomEdit2d ./applications/Entry.cpp)
|
||||||
|
target_link_libraries(geomEdit2d ${PROJECT_NAME})
|
||||||
|
|
||||||
|
file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||||
|
file(COPY "rsc/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||||
39
GeometryEditor2D/applications/Entry.cpp
Normal file
39
GeometryEditor2D/applications/Entry.cpp
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
|
||||||
|
#include "EditorWidget.hpp"
|
||||||
|
|
||||||
|
#include "GraphicApplication.hpp"
|
||||||
|
|
||||||
|
using namespace tp;
|
||||||
|
|
||||||
|
class EditorGUI : public Application {
|
||||||
|
public:
|
||||||
|
EditorGUI() {
|
||||||
|
Vec2F renderResolution = { 1000, 1000 };
|
||||||
|
auto canvas = this->mGraphics->getCanvas();
|
||||||
|
mGui = new EditorWidget<EventHandler, Canvas>(canvas, &geometry, renderResolution);
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
~EditorGUI() override { delete mGui; }
|
||||||
|
|
||||||
|
void processFrame(EventHandler* eventHandler) override {
|
||||||
|
auto rec = RectF({ 0, 0 }, mWindow->getSize());
|
||||||
|
mGui->proc(*eventHandler, rec, rec);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawFrame(Canvas* canvas) override { mGui->draw(*canvas); }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Geometry geometry;
|
||||||
|
EditorWidget<EventHandler, Canvas>* mGui;
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
GlobalGUIConfig mConfig;
|
||||||
|
gGlobalGUIConfig = &mConfig;
|
||||||
|
|
||||||
|
{
|
||||||
|
EditorGUI gui;
|
||||||
|
gui.run();
|
||||||
|
}
|
||||||
|
}
|
||||||
0
GeometryEditor2D/private/Geometry.cpp
Normal file
0
GeometryEditor2D/private/Geometry.cpp
Normal file
76
GeometryEditor2D/private/Render.cpp
Normal file
76
GeometryEditor2D/private/Render.cpp
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
#include "Render.hpp"
|
||||||
|
|
||||||
|
#include "GraphicsApi.hpp"
|
||||||
|
|
||||||
|
using namespace tp;
|
||||||
|
|
||||||
|
struct Shape {
|
||||||
|
float buffer[6] = {
|
||||||
|
0, 0, 1, 0, 0, 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
GLuint vbo_id = 0;
|
||||||
|
GLuint vbo_len = 6;
|
||||||
|
|
||||||
|
Shape() {
|
||||||
|
glGenBuffers(1, &vbo_id);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, sizeof(buffer), buffer, GL_STATIC_COPY);
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawCall() {
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, vbo_id);
|
||||||
|
|
||||||
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(float), nullptr);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glDrawArrays(GL_TRIANGLES, 0, 3);
|
||||||
|
|
||||||
|
glDisableVertexAttribArray(0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
~Shape() { glDeleteBuffers(1, &vbo_id); }
|
||||||
|
};
|
||||||
|
|
||||||
|
Render::Render(Vec2F renderResolution) :
|
||||||
|
mRenderBuffer(renderResolution) {
|
||||||
|
|
||||||
|
mDefaultShader.load("rsc/shaders/default.vert", nullptr, "rsc/shaders/default.frag", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
Render::~Render() {}
|
||||||
|
|
||||||
|
uint4 Render::getRenderBuffer() { return mRenderBuffer.texId(); }
|
||||||
|
|
||||||
|
Vec2F Render::getBufferSize() { return mRenderBuffer.getSize(); }
|
||||||
|
|
||||||
|
void Render::render(const Geometry& geometry, Vec2F size) {
|
||||||
|
|
||||||
|
static Shape shape;
|
||||||
|
|
||||||
|
mRenderBuffer.mClearCol = { 0.1f, 0.1f, 0.1f, 1.f };
|
||||||
|
|
||||||
|
mRenderBuffer.beginDraw();
|
||||||
|
mRenderBuffer.clear();
|
||||||
|
|
||||||
|
{
|
||||||
|
mDefaultShader.bind();
|
||||||
|
|
||||||
|
static auto uniform_color = mDefaultShader.getu("Color");
|
||||||
|
static auto uniform_scale = mDefaultShader.getu("Viewport");
|
||||||
|
|
||||||
|
RGBA col = { 0, 0, 1.f, 1.f };
|
||||||
|
RectF viewport = { 0.0f, 0.0f, 1.f, 1.f };
|
||||||
|
viewport.w = viewport.z * (size.y / size.x);
|
||||||
|
|
||||||
|
glUniform4fv(uniform_color, 1, &col.r);
|
||||||
|
glUniform4fv(uniform_scale, 1, &viewport.x);
|
||||||
|
|
||||||
|
shape.drawCall();
|
||||||
|
|
||||||
|
mDefaultShader.unbind();
|
||||||
|
}
|
||||||
|
|
||||||
|
mRenderBuffer.endDraw();
|
||||||
|
}
|
||||||
68
GeometryEditor2D/public/EditorWidget.hpp
Normal file
68
GeometryEditor2D/public/EditorWidget.hpp
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
#include "Widgets.hpp"
|
||||||
|
#include "Render.hpp"
|
||||||
|
|
||||||
|
namespace tp {
|
||||||
|
template <typename Events, typename Canvas>
|
||||||
|
class ViewportWidget : public Widget<Events, Canvas> {
|
||||||
|
public:
|
||||||
|
explicit ViewportWidget(Canvas* canvas, Geometry* geometry, Vec2F renderResolution) :
|
||||||
|
mRender(renderResolution) {
|
||||||
|
this->createConfig("ViewportWidget");
|
||||||
|
mImage = canvas->createImageFromTextId(mRender.getRenderBuffer(), mRender.getBufferSize());
|
||||||
|
mCanvas = canvas;
|
||||||
|
}
|
||||||
|
|
||||||
|
~ViewportWidget() { mCanvas->deleteImageHandle(mImage); }
|
||||||
|
|
||||||
|
void proc(const Events& events, const RectF& areaParent, const RectF& aArea) override {
|
||||||
|
this->mArea = aArea;
|
||||||
|
this->mVisible = areaParent.isOverlap(aArea);
|
||||||
|
if (!this->mVisible) return;
|
||||||
|
|
||||||
|
mRender.render(*mGeometry, this->mArea.size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw(Canvas& canvas) override {
|
||||||
|
if (!this->mVisible) return;
|
||||||
|
|
||||||
|
canvas.drawImage(this->mArea, &mImage);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
Render mRender;
|
||||||
|
Geometry* mGeometry = nullptr;
|
||||||
|
Canvas* mCanvas = nullptr;
|
||||||
|
Canvas::ImageHandle mImage;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Events, typename Canvas>
|
||||||
|
class EditorWidget : public Widget<Events, Canvas> {
|
||||||
|
public:
|
||||||
|
EditorWidget(Canvas* canvas, Geometry* geometry, Vec2F renderResolution) :
|
||||||
|
mViewport(canvas, geometry, renderResolution) {
|
||||||
|
this->createConfig("EditorWidget");
|
||||||
|
this->addColor("Base", "Base");
|
||||||
|
}
|
||||||
|
|
||||||
|
void proc(const Events& events, const RectF& areaParent, const RectF& aArea) override {
|
||||||
|
this->mArea = aArea;
|
||||||
|
this->mVisible = areaParent.isOverlap(aArea);
|
||||||
|
if (!this->mVisible) return;
|
||||||
|
|
||||||
|
mSplitView.proc(events, aArea, aArea);
|
||||||
|
mViewport.proc(events, aArea, mSplitView.getFirst());
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw(Canvas& canvas) override {
|
||||||
|
if (!this->mVisible) return;
|
||||||
|
|
||||||
|
canvas.rect(this->mArea, this->getColor("Base"));
|
||||||
|
mSplitView.draw(canvas);
|
||||||
|
mViewport.draw(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
ViewportWidget<Events, Canvas> mViewport;
|
||||||
|
SplitView<Events, Canvas> mSplitView;
|
||||||
|
};
|
||||||
|
}
|
||||||
8
GeometryEditor2D/public/Geometry.hpp
Normal file
8
GeometryEditor2D/public/Geometry.hpp
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace tp {
|
||||||
|
class Geometry {
|
||||||
|
public:
|
||||||
|
Geometry() = default;
|
||||||
|
};
|
||||||
|
}
|
||||||
23
GeometryEditor2D/public/Render.hpp
Normal file
23
GeometryEditor2D/public/Render.hpp
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "Geometry.hpp"
|
||||||
|
#include "Rect.hpp"
|
||||||
|
|
||||||
|
#include "FrameBuffer.hpp"
|
||||||
|
#include "Shader.hpp"
|
||||||
|
|
||||||
|
namespace tp {
|
||||||
|
class Render {
|
||||||
|
public:
|
||||||
|
explicit Render(Vec2F renderResolution);
|
||||||
|
~Render();
|
||||||
|
|
||||||
|
void render(const Geometry& geometry, Vec2F size);
|
||||||
|
uint4 getRenderBuffer();
|
||||||
|
Vec2F getBufferSize();
|
||||||
|
|
||||||
|
private:
|
||||||
|
RenderBuffer mRenderBuffer;
|
||||||
|
RenderShader mDefaultShader;
|
||||||
|
};
|
||||||
|
}
|
||||||
BIN
GeometryEditor2D/rsc/Font.ttf
Normal file
BIN
GeometryEditor2D/rsc/Font.ttf
Normal file
Binary file not shown.
9
GeometryEditor2D/rsc/shaders/default.frag
Normal file
9
GeometryEditor2D/rsc/shaders/default.frag
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#version 330 core
|
||||||
|
|
||||||
|
uniform vec4 Color;
|
||||||
|
|
||||||
|
out vec4 FragColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
FragColor = vec4(1.f);
|
||||||
|
}
|
||||||
22
GeometryEditor2D/rsc/shaders/default.vert
Normal file
22
GeometryEditor2D/rsc/shaders/default.vert
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#version 330 core
|
||||||
|
|
||||||
|
layout(location = 0) in vec2 point;
|
||||||
|
|
||||||
|
uniform vec4 Viewport;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
vec2 transformedPoint = point;
|
||||||
|
|
||||||
|
transformedPoint.x = transformedPoint.x - Viewport.x;
|
||||||
|
transformedPoint.y = transformedPoint.y - Viewport.y;
|
||||||
|
|
||||||
|
transformedPoint.x = transformedPoint.x / Viewport.z;
|
||||||
|
transformedPoint.y = transformedPoint.y / Viewport.w;
|
||||||
|
|
||||||
|
transformedPoint.y = -transformedPoint.y;
|
||||||
|
|
||||||
|
transformedPoint.y = transformedPoint.y * 2;
|
||||||
|
transformedPoint.x = transformedPoint.x * 2;
|
||||||
|
|
||||||
|
gl_Position = vec4(transformedPoint.x - 1, transformedPoint.y + 1, 1.0, 1.0);
|
||||||
|
}
|
||||||
|
|
@ -62,7 +62,7 @@ namespace tp {
|
||||||
|
|
||||||
ImageHandle createImageFromTextId(ualni id, Vec2F size);
|
ImageHandle createImageFromTextId(ualni id, Vec2F size);
|
||||||
void deleteImageHandle(ImageHandle image);
|
void deleteImageHandle(ImageHandle image);
|
||||||
void drawImage(const RectF& rec, ImageHandle* image, halnf angle, halnf alpha, halnf rounding);
|
void drawImage(const RectF& rec, ImageHandle* image, halnf angle = 0, halnf alpha = 1.f, halnf rounding = 0.f);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Buffer<RectF> mScissors;
|
Buffer<RectF> mScissors;
|
||||||
|
|
@ -71,7 +71,9 @@ namespace tp {
|
||||||
|
|
||||||
class Graphics {
|
class Graphics {
|
||||||
public:
|
public:
|
||||||
explicit Graphics(Window* window) : mGui(window), mCanvas(window) {}
|
explicit Graphics(Window* window) :
|
||||||
|
mGui(window),
|
||||||
|
mCanvas(window) {}
|
||||||
|
|
||||||
void procBegin() {
|
void procBegin() {
|
||||||
mCanvas.procBegin();
|
mCanvas.procBegin();
|
||||||
|
|
@ -88,14 +90,12 @@ namespace tp {
|
||||||
mGui.drawBegin();
|
mGui.drawBegin();
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawEnd() {
|
void drawEnd() {
|
||||||
mCanvas.drawEnd();
|
mCanvas.drawEnd();
|
||||||
mGui.drawEnd();
|
mGui.drawEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
Canvas* getCanvas() {
|
Canvas* getCanvas() { return &mCanvas; }
|
||||||
return &mCanvas;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Canvas mCanvas;
|
Canvas mCanvas;
|
||||||
|
|
|
||||||
15
RasterRender/CMakeLists.txt
Normal file
15
RasterRender/CMakeLists.txt
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
project(RasterRender)
|
||||||
|
|
||||||
|
### ---------------------- Externals --------------------- ###
|
||||||
|
set(BINDINGS_INCLUDE ${GLEW_INCLUDE_DIR})
|
||||||
|
set(BINDINGS_LIBS ${GLEW_LIB})
|
||||||
|
|
||||||
|
### ---------------------- Static Library --------------------- ###
|
||||||
|
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
|
||||||
|
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 ${BINDINGS_LIBS})
|
||||||
|
|
@ -5,20 +5,26 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void glerr(GLenum type) { printf("GL ERROR\n"); }
|
void glerr(GLenum type) { printf("GL ERROR\n"); }
|
||||||
#define AssertGL(x) { x; GLenum __gle = glGetError(); if (__gle != GL_NO_ERROR) glerr(__gle); }
|
#define AssertGL(x) \
|
||||||
|
{ \
|
||||||
|
x; \
|
||||||
|
GLenum __gle = glGetError(); \
|
||||||
|
if (__gle != GL_NO_ERROR) glerr(__gle); \
|
||||||
|
}
|
||||||
|
|
||||||
using namespace tp;
|
using namespace tp;
|
||||||
|
|
||||||
RenderBuffer::RenderBuffer(const Vec2F& size) :
|
RenderBuffer::RenderBuffer(const Vec2F& size) :
|
||||||
mSize(size) {
|
mSize(size) {
|
||||||
|
|
||||||
mDrawBuffers[0] = {GL_COLOR_ATTACHMENT0};
|
mDrawBuffers[0] = { GL_COLOR_ATTACHMENT0 };
|
||||||
|
|
||||||
// --------- texture ---------
|
// --------- texture ---------
|
||||||
AssertGL(glGenTextures(1, &mTextureId));
|
AssertGL(glGenTextures(1, &mTextureId));
|
||||||
AssertGL(glBindTexture(GL_TEXTURE_2D, mTextureId));
|
AssertGL(glBindTexture(GL_TEXTURE_2D, mTextureId));
|
||||||
// Give an empty image to OpenGL ( the last "0" )
|
// Give an empty image to OpenGL ( the last "0" )
|
||||||
AssertGL(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)size.x, (GLsizei)size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0));
|
AssertGL(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei) size.x, (GLsizei) size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0)
|
||||||
|
);
|
||||||
// Poor filtering. Needed
|
// Poor filtering. Needed
|
||||||
AssertGL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
AssertGL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
||||||
AssertGL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
AssertGL(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
||||||
|
|
@ -26,7 +32,7 @@ RenderBuffer::RenderBuffer(const Vec2F& size) :
|
||||||
// --------- depth ---------
|
// --------- depth ---------
|
||||||
AssertGL(glGenRenderbuffers(1, &mDepthBufferID));
|
AssertGL(glGenRenderbuffers(1, &mDepthBufferID));
|
||||||
AssertGL(glBindRenderbuffer(GL_RENDERBUFFER, mDepthBufferID));
|
AssertGL(glBindRenderbuffer(GL_RENDERBUFFER, mDepthBufferID));
|
||||||
AssertGL(glRenderbufferStorage(GL_RENDERBUFFER, GLW_CONTEXT_DEPTH_COMPONENT, (GLsizei)size.x, (GLsizei)size.y));
|
AssertGL(glRenderbufferStorage(GL_RENDERBUFFER, GLW_CONTEXT_DEPTH_COMPONENT, (GLsizei) size.x, (GLsizei) size.y));
|
||||||
|
|
||||||
// ------------ framebuffer ------------
|
// ------------ framebuffer ------------
|
||||||
AssertGL(glGenFramebuffers(1, &mFrameBufferID));
|
AssertGL(glGenFramebuffers(1, &mFrameBufferID));
|
||||||
|
|
@ -49,18 +55,24 @@ RenderBuffer::RenderBuffer(const Vec2F& size, tp::uint1 samples) :
|
||||||
AssertGL(glGenTextures(1, &mTextureId));
|
AssertGL(glGenTextures(1, &mTextureId));
|
||||||
AssertGL(glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, mTextureId));
|
AssertGL(glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, mTextureId));
|
||||||
#ifdef ENV_OS_ANDROID
|
#ifdef ENV_OS_ANDROID
|
||||||
AssertGL(glTexStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_RGBA, (GLsizei)size.x, (GLsizei)size.y, GL_TRUE));
|
AssertGL(
|
||||||
|
glTexStorage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_RGBA, (GLsizei) size.x, (GLsizei) size.y, GL_TRUE)
|
||||||
|
);
|
||||||
#else
|
#else
|
||||||
AssertGL(glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_RGBA, (GLsizei)size.x, (GLsizei)size.y, GL_TRUE));
|
AssertGL(
|
||||||
|
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, samples, GL_RGBA, (GLsizei) size.x, (GLsizei) size.y, GL_TRUE)
|
||||||
|
);
|
||||||
#endif
|
#endif
|
||||||
// !?
|
// !?
|
||||||
//AssertGL(glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
// AssertGL(glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MAG_FILTER, GL_LINEAR));
|
||||||
//AssertGL(glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
// AssertGL(glTexParameteri(GL_TEXTURE_2D_MULTISAMPLE, GL_TEXTURE_MIN_FILTER, GL_LINEAR));
|
||||||
|
|
||||||
// ------- depth -------
|
// ------- depth -------
|
||||||
AssertGL(glGenRenderbuffers(1, &mDepthBufferID));
|
AssertGL(glGenRenderbuffers(1, &mDepthBufferID));
|
||||||
AssertGL(glBindRenderbuffer(GL_RENDERBUFFER, mDepthBufferID));
|
AssertGL(glBindRenderbuffer(GL_RENDERBUFFER, mDepthBufferID));
|
||||||
AssertGL(glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GLW_CONTEXT_DEPTH_COMPONENT, (GLsizei)size.x, (GLsizei)size.y));
|
AssertGL(glRenderbufferStorageMultisample(
|
||||||
|
GL_RENDERBUFFER, samples, GLW_CONTEXT_DEPTH_COMPONENT, (GLsizei) size.x, (GLsizei) size.y
|
||||||
|
));
|
||||||
|
|
||||||
// ------- fbuff -------
|
// ------- fbuff -------
|
||||||
AssertGL(glGenFramebuffers(1, &mFrameBufferID));
|
AssertGL(glGenFramebuffers(1, &mFrameBufferID));
|
||||||
|
|
@ -72,9 +84,7 @@ RenderBuffer::RenderBuffer(const Vec2F& size, tp::uint1 samples) :
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint4 RenderBuffer::buffId() const {
|
uint4 RenderBuffer::buffId() const { return mFrameBufferID; }
|
||||||
return mFrameBufferID;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RenderBuffer::beginDraw() {
|
void RenderBuffer::beginDraw() {
|
||||||
AssertGL(glBindFramebuffer(GL_FRAMEBUFFER, mFrameBufferID));
|
AssertGL(glBindFramebuffer(GL_FRAMEBUFFER, mFrameBufferID));
|
||||||
|
|
@ -82,7 +92,7 @@ void RenderBuffer::beginDraw() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderBuffer::setViewport(const RectF& viewport) {
|
void RenderBuffer::setViewport(const RectF& viewport) {
|
||||||
AssertGL(glViewport((GLsizei)viewport.x, (GLsizei)viewport.y, (GLsizei)viewport.z, (GLsizei)viewport.w));
|
AssertGL(glViewport((GLsizei) viewport.x, (GLsizei) viewport.y, (GLsizei) viewport.z, (GLsizei) viewport.w));
|
||||||
}
|
}
|
||||||
|
|
||||||
void RenderBuffer::clear() {
|
void RenderBuffer::clear() {
|
||||||
|
|
@ -102,9 +112,6 @@ RenderBuffer::~RenderBuffer() {
|
||||||
glDeleteRenderbuffers(1, &mDepthBufferID);
|
glDeleteRenderbuffers(1, &mDepthBufferID);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint4 RenderBuffer::texId() const {
|
uint4 RenderBuffer::texId() const { return mTextureId; }
|
||||||
return mTextureId;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Vec2F& RenderBuffer::getSize() const { return mSize; }
|
const Vec2F& RenderBuffer::getSize() const { return mSize; }
|
||||||
|
|
||||||
|
|
@ -13,14 +13,15 @@ namespace tp {
|
||||||
void geom_bind_source(const char* geom_src);
|
void geom_bind_source(const char* geom_src);
|
||||||
|
|
||||||
void compile();
|
void compile();
|
||||||
|
|
||||||
void bind();
|
void bind();
|
||||||
uint4 getu(const char* uid);
|
uint4 getu(const char* uid);
|
||||||
void unbind();
|
void unbind();
|
||||||
|
|
||||||
|
void load(const char* vert, const char* geom, const char* frag, bool paths);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool compile_shader(const char* ShaderCode, uint4 ShaderID);
|
bool compile_shader(const char* ShaderCode, uint4 ShaderID);
|
||||||
void load(const char* vert, const char* geom, const char* frag, bool paths);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint4 programm;
|
uint4 programm;
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
project(Sketch3D)
|
project(Sketch3D)
|
||||||
|
|
||||||
### ---------------------- Externals --------------------- ###
|
### ---------------------- Externals --------------------- ###
|
||||||
set(BINDINGS_INCLUDE ../Externals/glfw/include ${GLEW_INCLUDE_DIR})
|
set(BINDINGS_INCLUDE ../Externals/glfw/include)
|
||||||
set(BINDINGS_LIBS glfw Imgui ${GLEW_LIB})
|
set(BINDINGS_LIBS glfw Imgui)
|
||||||
|
|
||||||
### ---------------------- Static Library --------------------- ###
|
### ---------------------- Static Library --------------------- ###
|
||||||
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
|
file(GLOB SOURCES "./private/*.cpp" "./private/*/*.cpp")
|
||||||
|
|
@ -11,12 +11,12 @@ file(GLOB HEADERS "./public/*.hpp" "./public/*/*.hpp")
|
||||||
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
|
add_library(${PROJECT_NAME} STATIC ${SOURCES} ${HEADERS})
|
||||||
|
|
||||||
target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE} ./ext/)
|
target_include_directories(${PROJECT_NAME} PUBLIC ./public/ ${BINDINGS_INCLUDE} ./ext/)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC Graphics Connection Widgets Math)
|
target_link_libraries(${PROJECT_NAME} PUBLIC Graphics Connection Widgets Math RasterRender)
|
||||||
target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS})
|
target_link_libraries(${PROJECT_NAME} PUBLIC ${BINDINGS_LIBS})
|
||||||
|
|
||||||
### -------------------------- Applications -------------------------- ###
|
### -------------------------- Applications -------------------------- ###
|
||||||
add_executable(Sketch3DApp ./applications/Entry.cpp)
|
add_executable(Sketch3DApp ./applications/Entry.cpp)
|
||||||
target_link_libraries(Sketch3DApp ${PROJECT_NAME})
|
target_link_libraries(Sketch3DApp ${PROJECT_NAME})
|
||||||
|
|
||||||
file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
file(COPY "rsc" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||||
file(COPY "applications/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
file(COPY "applications/Font.ttf" DESTINATION "${CMAKE_BINARY_DIR}/${PROJECT_NAME}/")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue