the rest of the missing stuff
This commit is contained in:
parent
c595421288
commit
db93d81ffd
51 changed files with 10107 additions and 0 deletions
26
deps/vgcore/CMakeLists.txt
vendored
Normal file
26
deps/vgcore/CMakeLists.txt
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
cmake_minimum_required(VERSION 3.23)
|
||||||
|
|
||||||
|
project(VGCore VERSION 0.1.1)
|
||||||
|
|
||||||
|
set (CMAKE_CXX_STANDARD 20)
|
||||||
|
|
||||||
|
find_package(OpenGL REQUIRED)
|
||||||
|
find_package(GLEW REQUIRED)
|
||||||
|
find_package(Boost REQUIRED COMPONENTS filesystem)
|
||||||
|
|
||||||
|
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
|
||||||
|
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
|
||||||
|
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
|
||||||
|
add_subdirectory(deps/glm)
|
||||||
|
add_subdirectory(deps/glfw)
|
||||||
|
add_subdirectory(deps/imgui)
|
||||||
|
add_subdirectory(deps/assimp)
|
||||||
|
if(NOT GCoreDemo)
|
||||||
|
add_subdirectory(demo)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_library(GCore STATIC "src/Graphics.cpp" "src/Window.cpp" src/MessageBox.cpp src/Mesh.cpp src/Widget.cpp src/Viewport.cpp src/ViewportWidget.cpp src/Shader.cpp src/Texture.cpp src/Sprite.cpp src/FileSelectDialog.cpp src/Outliner.cpp src/EditorPopup.cpp)
|
||||||
|
|
||||||
|
target_link_libraries(GCore OpenGL::GL glfw GLEW::GLEW ImGUI glm::glm Boost::filesystem assimp)
|
||||||
|
|
||||||
|
target_include_directories(GCore PUBLIC include deps/IconFontCppHeaders)
|
||||||
9
deps/vgcore/demo/CMakeLists.txt
vendored
Normal file
9
deps/vgcore/demo/CMakeLists.txt
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
project(GCoreDemo)
|
||||||
|
|
||||||
|
set (CMAKE_CXX_STANDARD 20)
|
||||||
|
|
||||||
|
add_executable(GCoreDemo "src/main.cpp" "src/Demo.cpp" "src/DemoViewport.cpp" "src/fps.cpp")
|
||||||
|
|
||||||
|
target_include_directories(GCoreDemo PUBLIC include)
|
||||||
|
|
||||||
|
target_link_libraries(GCoreDemo GCore)
|
||||||
8
deps/vgcore/demo/include/Demo.h
vendored
Normal file
8
deps/vgcore/demo/include/Demo.h
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
#include"virintox/gcore/Window.h"
|
||||||
|
|
||||||
|
class Demo : public Graphics::Window{
|
||||||
|
public:
|
||||||
|
Demo();
|
||||||
|
void Update() override;
|
||||||
|
inline static Demo* THIS;
|
||||||
|
};
|
||||||
9
deps/vgcore/demo/include/DemoViewport.h
vendored
Normal file
9
deps/vgcore/demo/include/DemoViewport.h
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
#include<virintox/gcore/ViewportWidget.h>
|
||||||
|
|
||||||
|
class DemoViewport : public Graphics::ViewportWidget{
|
||||||
|
public:
|
||||||
|
DemoViewport();
|
||||||
|
void Draw() override;
|
||||||
|
~DemoViewport() = default;
|
||||||
|
};
|
||||||
6
deps/vgcore/demo/include/fps.h
vendored
Normal file
6
deps/vgcore/demo/include/fps.h
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#include<virintox/gcore/Widget.h>
|
||||||
|
|
||||||
|
class fps : Graphics::Widget{
|
||||||
|
fps();
|
||||||
|
void Draw() override;
|
||||||
|
};
|
||||||
40
deps/vgcore/demo/src/Demo.cpp
vendored
Normal file
40
deps/vgcore/demo/src/Demo.cpp
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
#include"virintox/gcore/Graphics.h"
|
||||||
|
#include"Demo.h"
|
||||||
|
#include"virintox/gcore/Window.h"
|
||||||
|
#include"virintox/gcore/FileSelectDialog.h"
|
||||||
|
#include<DemoViewport.h>
|
||||||
|
#include "imgui.h"
|
||||||
|
#include"iostream"
|
||||||
|
|
||||||
|
Demo::Demo() : Graphics::Window("GCoreDemo"){
|
||||||
|
THIS = this;
|
||||||
|
|
||||||
|
addWidget<DemoViewport>();
|
||||||
|
|
||||||
|
AddMenu("File");
|
||||||
|
AddMenu("Widgets");
|
||||||
|
|
||||||
|
AddMenuItem("File", "Open", [](){
|
||||||
|
auto fsdiag = static_cast<Graphics::FileSelectDialog*>(THIS->WidgetByName.find("Select File")->second);
|
||||||
|
|
||||||
|
fsdiag->fileSelectMode = Graphics::FileSelectMode::Open;
|
||||||
|
|
||||||
|
fsdiag->Active = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
AddMenuItem("File", "Quit", [](){
|
||||||
|
Graphics::Quit();
|
||||||
|
});
|
||||||
|
|
||||||
|
AddMenuItem("Widgets", "Demo Viewport", [](){
|
||||||
|
THIS->WidgetByName.find("test")->second->Active ^= 1;
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
addWidget<Graphics::FileSelectDialog>(new Graphics::FileSelectDialog(std::vector<std::string>{".txt"},[](boost::filesystem::path file){std::cout << file;}));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Demo::Update(){
|
||||||
|
|
||||||
|
}
|
||||||
16
deps/vgcore/demo/src/DemoViewport.cpp
vendored
Normal file
16
deps/vgcore/demo/src/DemoViewport.cpp
vendored
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#include "virintox/gcore/ViewportWidget.h"
|
||||||
|
#include "virintox/gcore/Widget.h"
|
||||||
|
#include<DemoViewport.h>
|
||||||
|
#include<virintox/gcore/Texture.h>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
Graphics::Texture img;
|
||||||
|
|
||||||
|
DemoViewport::DemoViewport() : Graphics::ViewportWidget("test", true) {
|
||||||
|
img = Graphics::Texture("/home/tv/Pictures/aa.png");
|
||||||
|
}
|
||||||
|
|
||||||
|
void DemoViewport::Draw(){
|
||||||
|
img.DrawC(glm::vec2(0,0),1);
|
||||||
|
ChangeView(0,0,1);
|
||||||
|
}
|
||||||
11
deps/vgcore/demo/src/fps.cpp
vendored
Normal file
11
deps/vgcore/demo/src/fps.cpp
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "fps.h"
|
||||||
|
#include "boost/chrono.hpp"
|
||||||
|
|
||||||
|
float last;
|
||||||
|
|
||||||
|
fps::fps() : Graphics::Widget("fps", true){}
|
||||||
|
|
||||||
|
|
||||||
|
void fps::Draw(){
|
||||||
|
|
||||||
|
}
|
||||||
9
deps/vgcore/demo/src/main.cpp
vendored
Normal file
9
deps/vgcore/demo/src/main.cpp
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
#include "virintox/gcore/Graphics.h"
|
||||||
|
#include "Demo.h"
|
||||||
|
int main(){
|
||||||
|
Graphics::Init();
|
||||||
|
Graphics::setWindow<Demo>();
|
||||||
|
Graphics::BeginLoop();
|
||||||
|
Graphics::Terminate();
|
||||||
|
}
|
||||||
1
deps/vgcore/deps/IconFontCppHeaders
vendored
Submodule
1
deps/vgcore/deps/IconFontCppHeaders
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 90da8021ec7c7792c454c3f43516595754a91765
|
||||||
1
deps/vgcore/deps/assimp
vendored
Submodule
1
deps/vgcore/deps/assimp
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5770faac102bddcc26665dc81cf27c5328c1a6ab
|
||||||
1
deps/vgcore/deps/glfw
vendored
Submodule
1
deps/vgcore/deps/glfw
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 3fa2360720eeba1964df3c0ecf4b5df8648a8e52
|
||||||
1
deps/vgcore/deps/glm
vendored
Submodule
1
deps/vgcore/deps/glm
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5c46b9c07008ae65cb81ab79cd677ecc1934b903
|
||||||
8
deps/vgcore/deps/imgui/CMakeLists.txt
vendored
Normal file
8
deps/vgcore/deps/imgui/CMakeLists.txt
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
project(ImGUI)
|
||||||
|
|
||||||
|
find_package(GLEW REQUIRED)
|
||||||
|
|
||||||
|
add_library(ImGUI STATIC imgui/imgui.cpp imgui/imgui_demo.cpp imgui/imgui_draw.cpp imgui/imgui_tables.cpp imgui/imgui_widgets.cpp imgui/backends/imgui_impl_glfw.cpp imgui/backends/imgui_impl_opengl3.cpp imgui/misc/cpp/imgui_stdlib.cpp)
|
||||||
|
|
||||||
|
target_link_libraries(ImGUI glfw GLEW::GLEW)
|
||||||
|
target_include_directories(ImGUI PUBLIC imgui)
|
||||||
1
deps/vgcore/deps/imgui/imgui
vendored
Submodule
1
deps/vgcore/deps/imgui/imgui
vendored
Submodule
|
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 2fa36a2283b6b5a3a0b65d373de0d490116b4b15
|
||||||
2
deps/vgcore/include/virintox/GCore.h
vendored
Normal file
2
deps/vgcore/include/virintox/GCore.h
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
#include<Graphics.h>
|
||||||
|
|
||||||
22
deps/vgcore/include/virintox/gcore/EditorPopup.h
vendored
Normal file
22
deps/vgcore/include/virintox/gcore/EditorPopup.h
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
#pragma once
|
||||||
|
#include <cstring>
|
||||||
|
#include<functional>
|
||||||
|
|
||||||
|
#include<virintox/gcore/Widget.h>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
class NameEditor : public Widget{
|
||||||
|
public:
|
||||||
|
NameEditor(std::function<void(std::string)> func,std::string name = "Name Editor");
|
||||||
|
|
||||||
|
char NewName[256];
|
||||||
|
void PreDraw() override;
|
||||||
|
void Draw() override;
|
||||||
|
inline void Activate(const std::string ¤t){
|
||||||
|
strcpy(NewName, current.c_str());
|
||||||
|
Active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::function<void(std::string)> SetFunc;
|
||||||
|
};
|
||||||
|
}
|
||||||
12
deps/vgcore/include/virintox/gcore/Exceptions.h
vendored
Normal file
12
deps/vgcore/include/virintox/gcore/Exceptions.h
vendored
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
#pragma once
|
||||||
|
#include<exception>
|
||||||
|
#include<string>
|
||||||
|
|
||||||
|
namespace Graphics::Exceptions{
|
||||||
|
class SegmentationFault : std::exception{
|
||||||
|
public:
|
||||||
|
const char* what() const noexcept override;
|
||||||
|
private:
|
||||||
|
const char* where;
|
||||||
|
};
|
||||||
|
}
|
||||||
41
deps/vgcore/include/virintox/gcore/FileSelectDialog.h
vendored
Normal file
41
deps/vgcore/include/virintox/gcore/FileSelectDialog.h
vendored
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
|
||||||
|
#ifndef PNS_FILESELECTDIALOG_H
|
||||||
|
#define PNS_FILESELECTDIALOG_H
|
||||||
|
|
||||||
|
#include<virintox/gcore/Widget.h>
|
||||||
|
#include<functional>
|
||||||
|
#include<boost/filesystem.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
enum FileSelectMode{
|
||||||
|
Open,
|
||||||
|
Save
|
||||||
|
};
|
||||||
|
class FileSelectDialog : public Widget{
|
||||||
|
public:
|
||||||
|
FileSelectDialog(std::string name,std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenCloseFunc);
|
||||||
|
FileSelectDialog(std::string name,std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenFunc, std::function<void(boost::filesystem::path)> OnSaveFunc);
|
||||||
|
|
||||||
|
FileSelectDialog(std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenCloseFunc);
|
||||||
|
FileSelectDialog(std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenFunc, std::function<void(boost::filesystem::path)> OnSaveFunc);
|
||||||
|
void Draw() override;
|
||||||
|
std::vector<std::string> Path;
|
||||||
|
std::vector<std::string> Extension;
|
||||||
|
boost::filesystem::path GetPath();
|
||||||
|
|
||||||
|
std::string Filter;
|
||||||
|
|
||||||
|
char Filename[256] = "";
|
||||||
|
|
||||||
|
FileSelectMode fileSelectMode;
|
||||||
|
|
||||||
|
~FileSelectDialog() override;
|
||||||
|
protected:
|
||||||
|
int SelectedFile;
|
||||||
|
std::function<void(boost::filesystem::path)> OnOpen;
|
||||||
|
std::function<void(boost::filesystem::path)> OnSave;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif //PNS_FILESELECTDIALOG_H
|
||||||
35
deps/vgcore/include/virintox/gcore/Graphics.h
vendored
Normal file
35
deps/vgcore/include/virintox/gcore/Graphics.h
vendored
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
#ifndef PNS_GRAPHICS_H
|
||||||
|
#define PNS_GRAPHICS_H
|
||||||
|
#include<string>
|
||||||
|
#include<array>
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<GLFW/glfw3.h>
|
||||||
|
#include<virintox/gcore/Window.h>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
|
||||||
|
void Init();
|
||||||
|
void BeginLoop();
|
||||||
|
void Terminate();
|
||||||
|
|
||||||
|
void EnableVsync();
|
||||||
|
|
||||||
|
inline float MWheel;
|
||||||
|
|
||||||
|
inline std::unique_ptr<Window> window;
|
||||||
|
inline bool Running;
|
||||||
|
|
||||||
|
template<class T>
|
||||||
|
inline T* setWindow(){
|
||||||
|
T* _window = new T();
|
||||||
|
window = std::unique_ptr<Window>(_window);
|
||||||
|
return _window;
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Quit(){
|
||||||
|
Running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
26
deps/vgcore/include/virintox/gcore/ITreeSerializable.h
vendored
Normal file
26
deps/vgcore/include/virintox/gcore/ITreeSerializable.h
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
#ifndef PNS_ITREESERIALIZABLE_H
|
||||||
|
#define PNS_ITREESERIALIZABLE_H
|
||||||
|
|
||||||
|
#include<string>
|
||||||
|
#include<vector>
|
||||||
|
|
||||||
|
enum ObjectType{
|
||||||
|
Folder,
|
||||||
|
Item
|
||||||
|
};
|
||||||
|
|
||||||
|
class ITreeSerializable{
|
||||||
|
public:
|
||||||
|
virtual void SetParent(ITreeSerializable*) = 0;
|
||||||
|
virtual std::string GetName() = 0;
|
||||||
|
virtual void SetName(std::string) = 0;
|
||||||
|
virtual void Release(ITreeSerializable*) = 0;
|
||||||
|
virtual void Attach(ITreeSerializable*) = 0;
|
||||||
|
|
||||||
|
virtual std::vector<ITreeSerializable*> GetSubItems() = 0;
|
||||||
|
virtual ObjectType GetObjectType() = 0;
|
||||||
|
|
||||||
|
bool CurrentlySelected;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //PNS_ITREESERIALIZABLE_H
|
||||||
32
deps/vgcore/include/virintox/gcore/Mesh.h
vendored
Normal file
32
deps/vgcore/include/virintox/gcore/Mesh.h
vendored
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
#pragma once
|
||||||
|
#include "glm/ext/vector_float3.hpp"
|
||||||
|
#include<glm/mat3x2.hpp>
|
||||||
|
#include<glm/mat3x3.hpp>
|
||||||
|
#include<glm/vec3.hpp>
|
||||||
|
#include<glm/vec2.hpp>
|
||||||
|
#include<vector>
|
||||||
|
|
||||||
|
#include<virintox/gcore/Texture.h>
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
class Mesh{
|
||||||
|
public:
|
||||||
|
|
||||||
|
explicit Mesh(boost::filesystem::path PathToModel,Shader &ShaderToUse);
|
||||||
|
|
||||||
|
explicit Mesh(const std::vector<glm::mat3x2> &Polygons, const std::vector<glm::mat3x2> &TexCoords, Shader &Shader = GetDefaultShader2D());
|
||||||
|
Mesh(const std::vector<glm::vec2> &Points,const std::vector<GLuint> &Indices,const std::vector<glm::vec2> &TexCoords, Shader &Shader = GetDefaultShader2D());
|
||||||
|
explicit Mesh(const std::vector<glm::mat3x3> &Polygons, const std::vector<glm::mat3x2> &TexCoords, Shader &Shader = GetDefaultShader3D());
|
||||||
|
Mesh(const std::vector<glm::vec3> &Points,const std::vector<GLuint> &Indices, const std::vector<glm::vec2> &TexCoords, Shader &Shader = GetDefaultShader3D());
|
||||||
|
|
||||||
|
void Draw(const Texture &Tex,const glm::vec2 &Pos) const;
|
||||||
|
void Draw(const Texture &Tex,const glm::vec3 &Pos, const glm::vec3 &Scale = glm::vec3(1,1,1), const glm::vec3 &Rot = glm::vec3(0,0,0)) const;
|
||||||
|
private:
|
||||||
|
Shader &shader;
|
||||||
|
GLuint VBO,VAO,EBO;
|
||||||
|
GLuint VCount;
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
36
deps/vgcore/include/virintox/gcore/MessageBox.h
vendored
Normal file
36
deps/vgcore/include/virintox/gcore/MessageBox.h
vendored
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
#pragma once
|
||||||
|
#include "Widget.h"
|
||||||
|
#include <exception>
|
||||||
|
namespace Graphics{
|
||||||
|
|
||||||
|
enum ErrorSeverity{
|
||||||
|
Fault,
|
||||||
|
Error,
|
||||||
|
Warning,
|
||||||
|
Info
|
||||||
|
};
|
||||||
|
|
||||||
|
class MSGBoxException : public std::exception{
|
||||||
|
public:
|
||||||
|
inline MSGBoxException(std::string What,ErrorSeverity severity): whattext(What),Severity(severity){};
|
||||||
|
|
||||||
|
const char * what() const noexcept override;
|
||||||
|
|
||||||
|
std::string whattext;
|
||||||
|
ErrorSeverity Severity;
|
||||||
|
};
|
||||||
|
|
||||||
|
class MessageBox : public Widget{
|
||||||
|
public:
|
||||||
|
MessageBox(std::string Text, ErrorSeverity Severity = Info);
|
||||||
|
void Draw() override;
|
||||||
|
void PostDraw() override;
|
||||||
|
bool Deactivate = false;
|
||||||
|
private:
|
||||||
|
std::string text;
|
||||||
|
ErrorSeverity severity;
|
||||||
|
|
||||||
|
public:
|
||||||
|
~MessageBox() override;
|
||||||
|
};
|
||||||
|
}
|
||||||
9
deps/vgcore/include/virintox/gcore/Model.h
vendored
Normal file
9
deps/vgcore/include/virintox/gcore/Model.h
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
|
//Not ready for production
|
||||||
|
namespace Graphics{
|
||||||
|
class Model{
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
44
deps/vgcore/include/virintox/gcore/Outliner.h
vendored
Normal file
44
deps/vgcore/include/virintox/gcore/Outliner.h
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
#ifndef PNS_OUTLINER_H
|
||||||
|
#define PNS_OUTLINER_H
|
||||||
|
|
||||||
|
#include<memory>
|
||||||
|
#include<virintox/gcore/Widget.h>
|
||||||
|
#include<cstring>
|
||||||
|
#include<virintox/gcore/ITreeSerializable.h>
|
||||||
|
namespace Graphics {
|
||||||
|
class NameEditorOld : public Widget{
|
||||||
|
public:
|
||||||
|
NameEditorOld();
|
||||||
|
|
||||||
|
char NewName[256];
|
||||||
|
void PreDraw() override;
|
||||||
|
void Draw() override;
|
||||||
|
inline void Activate(ITreeSerializable* Node){
|
||||||
|
memset(NewName,0,256);
|
||||||
|
EditingNode = Node;
|
||||||
|
Active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ITreeSerializable* EditingNode;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Outliner : public Widget{
|
||||||
|
public:
|
||||||
|
Outliner();
|
||||||
|
void Draw() override;
|
||||||
|
void DrawNode(ITreeSerializable* Node);
|
||||||
|
inline void SetMainItem(ITreeSerializable* Item){
|
||||||
|
LastSelectedNode = nullptr;
|
||||||
|
MainItem = Item;
|
||||||
|
}
|
||||||
|
ITreeSerializable* MainItem;
|
||||||
|
ITreeSerializable* LastSelectedNode;
|
||||||
|
|
||||||
|
NameEditorOld NameEdit;
|
||||||
|
|
||||||
|
void PostDraw() override;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //PNS_OUTLINER_H
|
||||||
20
deps/vgcore/include/virintox/gcore/Shader.h
vendored
Normal file
20
deps/vgcore/include/virintox/gcore/Shader.h
vendored
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
#ifndef PNS_SHADER_H
|
||||||
|
#define PNS_SHADER_H
|
||||||
|
#include <GL/glew.h>
|
||||||
|
namespace Graphics{
|
||||||
|
class Shader{
|
||||||
|
public:
|
||||||
|
static void SetupDefaults();
|
||||||
|
|
||||||
|
inline Shader(){ init = false; };
|
||||||
|
Shader(const GLchar* Vertex, const GLchar* Fragment);
|
||||||
|
void Use();
|
||||||
|
GLuint ShaderId;
|
||||||
|
|
||||||
|
bool init;
|
||||||
|
};
|
||||||
|
Shader &GetDefaultShader2D();
|
||||||
|
Shader &GetDefaultShader3D();
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //PNS_SHADER_H
|
||||||
23
deps/vgcore/include/virintox/gcore/Sprite.h
vendored
Normal file
23
deps/vgcore/include/virintox/gcore/Sprite.h
vendored
Normal file
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef PNS_SPRITE_H
|
||||||
|
#define PNS_SPRITE_H
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include"Texture.h"
|
||||||
|
#include<glm/vec2.hpp>
|
||||||
|
#include<glm/mat3x2.hpp>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
class Sprite{
|
||||||
|
public:
|
||||||
|
Sprite();
|
||||||
|
Sprite(const glm::vec2 &Pos,float scale, Texture* Tex);
|
||||||
|
Sprite(const glm::mat3x2 &Veticies,const glm::mat3x2 &TexCoords, Texture* Tex);
|
||||||
|
void Update(const glm::vec2 &Pos,float scale) const;
|
||||||
|
void Update(const glm::mat3x2 &Veticies,const glm::mat3x2 &TexCoords) const;
|
||||||
|
void Draw();
|
||||||
|
Texture* TexPtr;
|
||||||
|
protected:
|
||||||
|
GLuint VBO,VAO,EBO;
|
||||||
|
int VCount;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif //PNS_SPRITE_H
|
||||||
30
deps/vgcore/include/virintox/gcore/Texture.h
vendored
Normal file
30
deps/vgcore/include/virintox/gcore/Texture.h
vendored
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
#ifndef PNS_TEXTURE_H
|
||||||
|
#define PNS_TEXTURE_H
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<boost/filesystem.hpp>
|
||||||
|
#include<glm/mat3x2.hpp>
|
||||||
|
#include<glm/vec2.hpp>
|
||||||
|
namespace Graphics {
|
||||||
|
class Texture {
|
||||||
|
public:
|
||||||
|
Texture() = default;
|
||||||
|
|
||||||
|
Texture(boost::filesystem::path PngFile,bool Normalize = false);
|
||||||
|
|
||||||
|
~Texture();
|
||||||
|
|
||||||
|
glm::vec2 size;
|
||||||
|
|
||||||
|
inline operator int() const{
|
||||||
|
return TexID;
|
||||||
|
}
|
||||||
|
void SetActive() const;
|
||||||
|
void Draw(glm::vec2 pos, float scale = 1);
|
||||||
|
void DrawC(glm::vec2 pos, float scale = 1);
|
||||||
|
void DrawTri(glm::tmat3x2<float> Tri, glm::tmat3x2<float> TexCoords);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
unsigned int TexID;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif //PNS_TEXTURE_H
|
||||||
49
deps/vgcore/include/virintox/gcore/Viewport.h
vendored
Normal file
49
deps/vgcore/include/virintox/gcore/Viewport.h
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#ifndef PNS_VIEWPORT_H
|
||||||
|
#define PNS_VIEWPORT_H
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<glm/vec2.hpp>
|
||||||
|
#include"Widget.h"
|
||||||
|
|
||||||
|
enum InputType{
|
||||||
|
MouseDownR,
|
||||||
|
MouseDownL,
|
||||||
|
MouseUpR,
|
||||||
|
MouseUpL,
|
||||||
|
MouseHoldR,
|
||||||
|
MouseHoldL,
|
||||||
|
MouseHover,
|
||||||
|
MWheel
|
||||||
|
};
|
||||||
|
|
||||||
|
struct InputEvent{
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
InputType EventType;
|
||||||
|
float MWheel;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace Graphics {
|
||||||
|
class Viewport{
|
||||||
|
public:
|
||||||
|
Viewport();
|
||||||
|
unsigned int Framebuffer;
|
||||||
|
unsigned int FramebufferTex;
|
||||||
|
unsigned int FramebufferDepthTex;
|
||||||
|
unsigned int FramebufferMatIdTex;
|
||||||
|
unsigned int FramebufferWorldPosTex;
|
||||||
|
|
||||||
|
void ChangeView(const glm::vec2 &pos,float scale) const;
|
||||||
|
void ChangeView(float x,float y, float scale) const;
|
||||||
|
|
||||||
|
virtual void Draw() = 0;
|
||||||
|
virtual void HandleInput(InputEvent);
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void RecreateFramebuffer();
|
||||||
|
|
||||||
|
int frameheight,framewidth;
|
||||||
|
int lastframeheight,lastframewidth;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif //PNS_VIEWPORT_H
|
||||||
14
deps/vgcore/include/virintox/gcore/ViewportWidget.h
vendored
Normal file
14
deps/vgcore/include/virintox/gcore/ViewportWidget.h
vendored
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef PNS_VIEWPORTWIDGET_H
|
||||||
|
#define PNS_VIEWPORTWIDGET_H
|
||||||
|
#include"Viewport.h"
|
||||||
|
#include"Widget.h"
|
||||||
|
namespace Graphics{
|
||||||
|
class ViewportWidget : public Graphics::Viewport , public Graphics::Widget{
|
||||||
|
public:
|
||||||
|
ViewportWidget(std::string name,bool active);
|
||||||
|
void PreDraw() override;
|
||||||
|
void PostDraw() override;
|
||||||
|
virtual void DrawOver();
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif
|
||||||
28
deps/vgcore/include/virintox/gcore/Widget.h
vendored
Normal file
28
deps/vgcore/include/virintox/gcore/Widget.h
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#ifndef PNS_WIDGET_H
|
||||||
|
#define PNS_WIDGET_H
|
||||||
|
#include<string>
|
||||||
|
#include<vector>
|
||||||
|
#include<memory>
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include "WidgetElement.h"
|
||||||
|
|
||||||
|
namespace Graphics {
|
||||||
|
class Widget {
|
||||||
|
public:
|
||||||
|
Widget(std::string name, bool active = false);
|
||||||
|
virtual void Update();
|
||||||
|
virtual void PreDraw();
|
||||||
|
virtual void Draw();
|
||||||
|
virtual void PostDraw();
|
||||||
|
inline std::string GetName(){
|
||||||
|
return Name;
|
||||||
|
}
|
||||||
|
bool Active;
|
||||||
|
protected:
|
||||||
|
std::vector<std::unique_ptr<WidgetElement>> Elements;
|
||||||
|
std::string Name;
|
||||||
|
public:
|
||||||
|
virtual ~Widget() = default;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
#endif //PNS_WIDGET_H
|
||||||
13
deps/vgcore/include/virintox/gcore/WidgetElement.h
vendored
Normal file
13
deps/vgcore/include/virintox/gcore/WidgetElement.h
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef PNS_WIDGETELEMENT_H
|
||||||
|
#define PNS_WIDGETELEMENT_H
|
||||||
|
|
||||||
|
namespace Graphics {
|
||||||
|
class WidgetElement {
|
||||||
|
public:
|
||||||
|
virtual void Render() = 0;
|
||||||
|
virtual ~WidgetElement() = default;
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //PNS_WIDGETELEMENT_H
|
||||||
72
deps/vgcore/include/virintox/gcore/Window.h
vendored
Normal file
72
deps/vgcore/include/virintox/gcore/Window.h
vendored
Normal file
|
|
@ -0,0 +1,72 @@
|
||||||
|
#ifndef PNS_WINDOW_H
|
||||||
|
#define PNS_WINDOW_H
|
||||||
|
#include "MessageBox.h"
|
||||||
|
#include "Widget.h"
|
||||||
|
|
||||||
|
#include<GLFW/glfw3.h>
|
||||||
|
#include<memory>
|
||||||
|
#include<string>
|
||||||
|
#include<vector>
|
||||||
|
#include<functional>
|
||||||
|
#include<map>
|
||||||
|
#include<list>
|
||||||
|
|
||||||
|
struct MenuItem{
|
||||||
|
std::string Name;
|
||||||
|
std::function<void(void)> Func;
|
||||||
|
std::string Shortcut;
|
||||||
|
int ShortcutKey;
|
||||||
|
};
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
class Window{
|
||||||
|
public:
|
||||||
|
explicit Window(const std::string &name = "Unnamed GCore Window");
|
||||||
|
virtual void Update();
|
||||||
|
|
||||||
|
virtual void DrawBG();
|
||||||
|
void Draw();
|
||||||
|
|
||||||
|
inline GLFWwindow* GetGlfwWindow(){
|
||||||
|
return window;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<std::unique_ptr<Widget>> Widgets;
|
||||||
|
std::map<std::string,Widget*> WidgetByName;
|
||||||
|
|
||||||
|
virtual void DropCallback(const std::vector<std::string> &paths);
|
||||||
|
|
||||||
|
std::list<MessageBox*> msgBoxes;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::map<std::string,std::vector<MenuItem>> Menus;
|
||||||
|
|
||||||
|
inline void AddMenu(std::string Title){
|
||||||
|
Menus.insert({Title,std::vector<MenuItem>()});
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void AddMenuItem(std::string Menu,std::string name,std::function<void()> func, std::string shortcut = "",int ShortcutKey = 0){
|
||||||
|
Menus.find(Menu)->second.push_back(MenuItem{name,func,shortcut, ShortcutKey});
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
inline T* addWidget(){
|
||||||
|
T* t = new T();
|
||||||
|
Widgets.push_back(std::unique_ptr<Widget>(t));
|
||||||
|
WidgetByName.insert({t->GetName(),t});
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
inline T* addWidget(T* t){
|
||||||
|
|
||||||
|
Widgets.push_back(std::unique_ptr<Widget>(t));
|
||||||
|
WidgetByName.insert({t->GetName(),t});
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
GLFWwindow* window;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif //PNS_WINDOW_H
|
||||||
7897
deps/vgcore/include/virintox/gcore/stb_image.h
vendored
Normal file
7897
deps/vgcore/include/virintox/gcore/stb_image.h
vendored
Normal file
File diff suppressed because it is too large
Load diff
28
deps/vgcore/src/EditorPopup.cpp
vendored
Normal file
28
deps/vgcore/src/EditorPopup.cpp
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include<virintox/gcore/EditorPopup.h>
|
||||||
|
#include<imgui.h>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
NameEditor::NameEditor(std::function<void(std::string)> func,std::string name) : Widget(name) {
|
||||||
|
SetFunc = func;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NameEditor::PreDraw() {
|
||||||
|
ImGui::Begin(Name.c_str(),&Active,ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NameEditor::Draw() {
|
||||||
|
ImGui::Text("Change Name of Node to:");
|
||||||
|
|
||||||
|
bool Done = ImGui::InputText("##",NewName,256,ImGuiInputTextFlags_EnterReturnsTrue);
|
||||||
|
ImVec2 PrevPos = ImGui::GetCursorPos();
|
||||||
|
Done |= ImGui::Button("Done",ImVec2(140.0f,30.0f));
|
||||||
|
|
||||||
|
PrevPos.x += 145.0f;
|
||||||
|
ImGui::SetCursorPos(PrevPos);
|
||||||
|
Active &= !ImGui::Button("Cancel",ImVec2(140.0f,30.0f));
|
||||||
|
if(Done){
|
||||||
|
SetFunc(std::string(NewName));
|
||||||
|
Active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
0
deps/vgcore/src/Exceptions.cpp
vendored
Normal file
0
deps/vgcore/src/Exceptions.cpp
vendored
Normal file
248
deps/vgcore/src/FileSelectDialog.cpp
vendored
Normal file
248
deps/vgcore/src/FileSelectDialog.cpp
vendored
Normal file
|
|
@ -0,0 +1,248 @@
|
||||||
|
#include<virintox/gcore/FileSelectDialog.h>
|
||||||
|
#include <cstring>
|
||||||
|
#include<imgui.h>
|
||||||
|
#include <boost/algorithm/string.hpp>
|
||||||
|
#include "IconsFontAwesome6.h"
|
||||||
|
#include<misc/cpp/imgui_stdlib.h>
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
|
||||||
|
FileSelectDialog::FileSelectDialog(std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenCloseFunc)\
|
||||||
|
: FileSelectDialog("Select File",FileType, OnOpenCloseFunc) {}
|
||||||
|
FileSelectDialog::FileSelectDialog(std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenFunc, std::function<void(boost::filesystem::path)> OnSaveFunc)\
|
||||||
|
: FileSelectDialog("Select File",FileType, OnOpenFunc, OnSaveFunc) {}
|
||||||
|
|
||||||
|
|
||||||
|
FileSelectDialog::FileSelectDialog(std::string name,std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenCloseFunc) : Widget(name, false) {
|
||||||
|
Path = std::vector<std::string>();
|
||||||
|
OnOpen = std::move(OnOpenCloseFunc);
|
||||||
|
OnSave = std::move(OnOpenCloseFunc);
|
||||||
|
Extension = FileType;
|
||||||
|
|
||||||
|
SelectedFile = 0;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
std::vector<std::string> strvec;
|
||||||
|
boost::algorithm::split(strvec,getenv("USERPROFILE"),boost::is_any_of("\\"));
|
||||||
|
|
||||||
|
for(auto str: strvec){
|
||||||
|
Path.push_back(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef __linux__
|
||||||
|
std::vector<std::string> strvec;
|
||||||
|
boost::algorithm::split(strvec,getenv("HOME"),boost::is_any_of("/"));
|
||||||
|
|
||||||
|
for(auto str: strvec){
|
||||||
|
Path.push_back(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
FileSelectDialog::FileSelectDialog(std::string name,std::vector<std::string> FileType, std::function<void(boost::filesystem::path)> OnOpenFunc, std::function<void(boost::filesystem::path)> OnSaveFunc) : Widget(name, false) {
|
||||||
|
Path = std::vector<std::string>();
|
||||||
|
OnOpen = std::move(OnOpenFunc);
|
||||||
|
OnSave = std::move(OnSaveFunc);
|
||||||
|
Extension = FileType;
|
||||||
|
SelectedFile = 0;
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
std::vector<std::string> strvec;
|
||||||
|
boost::algorithm::split(strvec,getenv("USERPROFILE"),boost::is_any_of("\\"));
|
||||||
|
|
||||||
|
for(auto str: strvec){
|
||||||
|
Path.push_back(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef unix
|
||||||
|
std::vector<std::string> strvec;
|
||||||
|
boost::algorithm::split(strvec,getenv("HOME"),boost::is_any_of("/"));
|
||||||
|
|
||||||
|
for(auto str: strvec){
|
||||||
|
Path.push_back(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void FileSelectDialog::Draw() {
|
||||||
|
const int MaxTextHeight = ImGui::CalcTextSize("abcdefghijklmnopqrstivwxyzABCDEFGHIJKLMNOPQRSTUVW").y;
|
||||||
|
boost::filesystem::path CurrentSelectedFile;
|
||||||
|
bool CurrentFileIsFolder = false;
|
||||||
|
{
|
||||||
|
ImGui::BeginGroupPanel("Path", ImVec2(0.9f, 0.0f));
|
||||||
|
float yCPos = ImGui::GetCursorPosY();
|
||||||
|
float xCPos = ImGui::GetCursorPosX();
|
||||||
|
|
||||||
|
yCPos -= 8;
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Button,ImVec4(0.0,0.0,0.0,0.0));
|
||||||
|
int num = 1;
|
||||||
|
for (std::string S: Path) {
|
||||||
|
ImGui::SetCursorPos(ImVec2(xCPos, yCPos));
|
||||||
|
if(ImGui::Button((S + "/").c_str()))
|
||||||
|
while(num != Path.size())
|
||||||
|
Path.pop_back();
|
||||||
|
xCPos += ImGui::CalcTextSize((S + "/").c_str()).x + 8;
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
ImGui::EndGroupPanel();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::SameLine();
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetWindowWidth()-ImGui::CalcTextSize(ICON_FA_MAGNIFYING_GLASS).x - 15);
|
||||||
|
|
||||||
|
if(ImGui::Button(ICON_FA_MAGNIFYING_GLASS))
|
||||||
|
ImGui::OpenPopup((std::string("Search##") + GetName().c_str()).c_str());
|
||||||
|
|
||||||
|
if(ImGui::BeginPopup((std::string("Search##") + GetName().c_str()).c_str())){
|
||||||
|
ImGui::Text("Search:");
|
||||||
|
ImGui::InputText((std::string("##SearchInput") + GetName().c_str()).c_str(),&Filter);
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int yPrev = ImGui::GetCursorPosY();
|
||||||
|
#ifdef WIN32
|
||||||
|
ImGui::BeginGroupPanel("Drives", ImVec2(0.0f, 0.0f));
|
||||||
|
DWORD DriveBitBuf = GetLogicalDrives();
|
||||||
|
char DriveLetter = 'A';
|
||||||
|
while(DriveBitBuf != 0)
|
||||||
|
{
|
||||||
|
if(DriveBitBuf & 1){
|
||||||
|
if(ImGui::Button(std::string(":/").insert(0,1,DriveLetter).c_str())){
|
||||||
|
Path.clear();
|
||||||
|
Path.push_back(( std::string(1, DriveLetter) + ":/"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(DriveLetter == 'Y')
|
||||||
|
break;
|
||||||
|
|
||||||
|
DriveBitBuf = DriveBitBuf >> 1;
|
||||||
|
DriveLetter++;
|
||||||
|
}
|
||||||
|
ImGui::EndGroupPanel();
|
||||||
|
|
||||||
|
ImGui::SetCursorPosY(yPrev);
|
||||||
|
ImGui::SetCursorPosX(ImGui::CalcTextSize(" Drives").x+30);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ImGui::BeginGroupPanel("Files");
|
||||||
|
ImGui::BeginChild("Files",ImVec2(-1.0,ImGui::GetContentRegionMax().y-ImGui::GetCursorPosY()-35));
|
||||||
|
boost::filesystem::directory_iterator end_iter;
|
||||||
|
int num = 0;
|
||||||
|
for (boost::filesystem::directory_iterator itr(GetPath()); itr != end_iter; ++itr) {
|
||||||
|
|
||||||
|
std::string Text = itr->path().filename().string();
|
||||||
|
boost::algorithm::to_lower(Text);
|
||||||
|
boost::algorithm::to_lower(Filter);
|
||||||
|
if(!boost::algorithm::contains(Text,Filter))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
bool isfile = true;
|
||||||
|
if (boost::filesystem::is_regular_file(itr->path())) {
|
||||||
|
bool IsValidFiletype = false;
|
||||||
|
for(std::string ext : Extension)
|
||||||
|
if(itr->path().extension() == ext)
|
||||||
|
IsValidFiletype = true;
|
||||||
|
if(!IsValidFiletype)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ImGui::Text(ICON_FA_FILE " ");
|
||||||
|
ImGui::SameLine();
|
||||||
|
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0, 1.0, 1.0, 1.0));
|
||||||
|
}
|
||||||
|
else if (boost::filesystem::is_directory(itr->path()))
|
||||||
|
{
|
||||||
|
ImGui::Text(ICON_FA_FOLDER);
|
||||||
|
ImGui::SameLine();
|
||||||
|
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0, 0.5, 0.0, 1.0));
|
||||||
|
if(num == SelectedFile)
|
||||||
|
CurrentFileIsFolder = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
isfile = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(1.0, 0.0, 0.0, 1.0));
|
||||||
|
|
||||||
|
if(ImGui::Selectable(itr->path().filename().string().c_str(),num == SelectedFile)) {
|
||||||
|
strcpy(Filename,itr->path().filename().string().c_str());
|
||||||
|
SelectedFile = num;
|
||||||
|
}
|
||||||
|
if(num == SelectedFile)
|
||||||
|
CurrentSelectedFile = itr->path();
|
||||||
|
|
||||||
|
|
||||||
|
if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(0)){
|
||||||
|
Filter = "";
|
||||||
|
|
||||||
|
if(!isfile)
|
||||||
|
Path.push_back(itr->path().filename().string());
|
||||||
|
else {
|
||||||
|
if(fileSelectMode == Open)
|
||||||
|
OnOpen(itr->path());
|
||||||
|
else
|
||||||
|
OnSave(itr->path());
|
||||||
|
Active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
ImGui::EndChild();
|
||||||
|
ImGui::EndGroupPanel();
|
||||||
|
yPrev = ImGui::GetCursorPosY();
|
||||||
|
|
||||||
|
if(fileSelectMode == Open) {
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetContentRegionMax().x - ImGui::CalcTextSize("Open").x - 10);
|
||||||
|
if (ImGui::Button("Open")) {
|
||||||
|
if (CurrentFileIsFolder) {
|
||||||
|
Path.push_back(CurrentSelectedFile.filename().string());
|
||||||
|
} else {
|
||||||
|
OnOpen(CurrentSelectedFile);
|
||||||
|
Active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
bool Done = ImGui::InputText("File Name",Filename,256,ImGuiInputTextFlags_EnterReturnsTrue);
|
||||||
|
ImGui::SetCursorPosY(yPrev);
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetContentRegionMax().x - ImGui::CalcTextSize("Open").x - 10);
|
||||||
|
|
||||||
|
Done |= ImGui::Button("Save");
|
||||||
|
if (Done) {
|
||||||
|
OnSave(GetPath() / std::string(Filename));
|
||||||
|
Active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::SetCursorPosY(yPrev);
|
||||||
|
ImGui::SetCursorPosX(ImGui::GetContentRegionMax().x - ImGui::CalcTextSize("Open").x - ImGui::CalcTextSize("Close").x - 30);
|
||||||
|
if(ImGui::Button("Close")){
|
||||||
|
Active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::filesystem::path FileSelectDialog::GetPath() {
|
||||||
|
boost::filesystem::path path = boost::filesystem::path();
|
||||||
|
|
||||||
|
for(std::string S: Path){
|
||||||
|
path.append(S + "/");
|
||||||
|
}
|
||||||
|
return path;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileSelectDialog::~FileSelectDialog() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
54
deps/vgcore/src/Graphics.cpp
vendored
Normal file
54
deps/vgcore/src/Graphics.cpp
vendored
Normal file
|
|
@ -0,0 +1,54 @@
|
||||||
|
#include<virintox/gcore/Graphics.h>
|
||||||
|
#include<virintox/gcore/Window.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
#include<GLFW/glfw3.h>
|
||||||
|
#include<imgui.h>
|
||||||
|
#include<backends/imgui_impl_opengl3.h>
|
||||||
|
#include<backends/imgui_impl_glfw.h>
|
||||||
|
#include<stdexcept>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
void ErrorCallback(GLenum source, GLenum type, GLuint id,
|
||||||
|
GLenum severity, GLsizei length, const GLchar* message, const void* userParam){
|
||||||
|
std::cout << "an opengl error occured";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Graphics::Init() {
|
||||||
|
Running = true;
|
||||||
|
if (!glfwInit())
|
||||||
|
{
|
||||||
|
throw std::runtime_error("Could not Initialize glfw");
|
||||||
|
}
|
||||||
|
|
||||||
|
MWheel = 1.0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::BeginLoop() {
|
||||||
|
while(Running){
|
||||||
|
ImGui_ImplOpenGL3_NewFrame();
|
||||||
|
ImGui_ImplGlfw_NewFrame();
|
||||||
|
ImGui::NewFrame();
|
||||||
|
window->Update();
|
||||||
|
window->Draw();
|
||||||
|
|
||||||
|
|
||||||
|
ImGui::UpdatePlatformWindows();
|
||||||
|
ImGui::RenderPlatformWindowsDefault();
|
||||||
|
glfwMakeContextCurrent(window->GetGlfwWindow());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::Terminate() {
|
||||||
|
ImGui_ImplOpenGL3_Shutdown();
|
||||||
|
ImGui_ImplGlfw_Shutdown();
|
||||||
|
ImGui::DestroyContext();
|
||||||
|
glfwTerminate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::EnableVsync() {
|
||||||
|
glfwSwapInterval(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
163
deps/vgcore/src/Mesh.cpp
vendored
Normal file
163
deps/vgcore/src/Mesh.cpp
vendored
Normal file
|
|
@ -0,0 +1,163 @@
|
||||||
|
#include<virintox/gcore/Mesh.h>
|
||||||
|
#include<glm/mat4x4.hpp>
|
||||||
|
|
||||||
|
#include<assimp/Importer.hpp>
|
||||||
|
#include "assimp/postprocess.h"
|
||||||
|
#include "glm/ext/matrix_transform.hpp"
|
||||||
|
#include <assimp/scene.h>
|
||||||
|
#include <virintox/gcore/Graphics.h>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
|
||||||
|
//Mesh::Mesh(boost::filesystem::path PathToModel, Shader &ShaderToUse): shader(ShaderToUse){
|
||||||
|
|
||||||
|
//}
|
||||||
|
|
||||||
|
Mesh::Mesh(const std::vector<glm::vec2> &Points,const std::vector<GLuint> &Indices, const std::vector<glm::vec2> &TexCoords, Shader &ShaderToUse) : shader(ShaderToUse){
|
||||||
|
glGenVertexArrays(1, &VAO);
|
||||||
|
glGenBuffers(1, &VBO);
|
||||||
|
glGenBuffers(1, &EBO);
|
||||||
|
glCullFace(GL_BACK);
|
||||||
|
|
||||||
|
VCount = Indices.size();
|
||||||
|
|
||||||
|
std::vector<float> VertexData{};
|
||||||
|
for(int x = 0; x < Points.size() || x < TexCoords.size(); x++){
|
||||||
|
VertexData.push_back(Points[x].x);
|
||||||
|
VertexData.push_back(Points[x].y);
|
||||||
|
VertexData.push_back(TexCoords[x].x);
|
||||||
|
VertexData.push_back(TexCoords[x].y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, VertexData.size() * sizeof(float), VertexData.data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, Indices.size() * sizeof(int), Indices.data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Mesh::Mesh(const std::vector<glm::vec3> &Points, const std::vector<GLuint> &Indices,
|
||||||
|
const std::vector<glm::vec2> &TexCoords, Shader &Shader) : shader(Shader) {
|
||||||
|
glGenVertexArrays(1, &VAO);
|
||||||
|
glGenBuffers(1, &VBO);
|
||||||
|
glGenBuffers(1, &EBO);
|
||||||
|
glCullFace(GL_BACK);
|
||||||
|
|
||||||
|
VCount = Indices.size();
|
||||||
|
|
||||||
|
assert(Indices.size() % 3 == 0 && "Indices must always come in pairs of three since a face consists of 3 points!");
|
||||||
|
|
||||||
|
std::vector<float> VertexData{};
|
||||||
|
for(int x = 0; x < Points.size() || x < TexCoords.size(); x++){
|
||||||
|
VertexData.push_back(Points[x].x);
|
||||||
|
VertexData.push_back(Points[x].y);
|
||||||
|
VertexData.push_back(Points[x].z);
|
||||||
|
|
||||||
|
VertexData.push_back(TexCoords[x].x);
|
||||||
|
VertexData.push_back(TexCoords[x].y);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, VertexData.size() * sizeof(float), VertexData.data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, Indices.size() * sizeof(unsigned int), Indices.data(), GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mesh::Draw(const Texture &Tex,const glm::vec3 &Pos, const glm::vec3 &Scale, const glm::vec3 &Rot) const{
|
||||||
|
glm::mat4 translationMatrix = glm::translate(glm::mat4(1),glm::vec3(Pos.x,-Pos.y,Pos.z));
|
||||||
|
glm::mat4 translationNoYInvertMatrix = glm::translate(glm::mat4(1),glm::vec3(Pos.x,Pos.y,Pos.z));
|
||||||
|
glm::mat4 rotationMatrixZ = glm::rotate(glm::mat4(1),glm::radians(Rot.z), glm::vec3(0,0,1));
|
||||||
|
glm::mat4 rotationMatrixY = glm::rotate(rotationMatrixZ,glm::radians(Rot.y), glm::vec3(0,1,0));
|
||||||
|
glm::mat4 rotationMatrix = glm::rotate(rotationMatrixY,glm::radians(Rot.x), glm::vec3(1,0,0));
|
||||||
|
glm::mat4 scaleMatrix = glm::scale(glm::mat4(1),Scale);
|
||||||
|
|
||||||
|
glm::mat4 matrix = translationMatrix * rotationMatrix * scaleMatrix;
|
||||||
|
glm::mat4 noYInvertMatrix = translationNoYInvertMatrix * rotationMatrix * scaleMatrix;
|
||||||
|
|
||||||
|
GLuint MatrixID = glGetUniformLocation(shader.ShaderId, "TransformationMatrix");
|
||||||
|
glUniformMatrix4fv(MatrixID,1,GL_FALSE,&matrix[0][0]);
|
||||||
|
|
||||||
|
GLuint MatrixNoYInvID = glGetUniformLocation(shader.ShaderId, "TransformationMatrixNoYInv");
|
||||||
|
glUniformMatrix4fv(MatrixNoYInvID,1,GL_FALSE,&noYInvertMatrix[0][0]);
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
shader.Use();
|
||||||
|
Tex.SetActive();
|
||||||
|
|
||||||
|
const GLenum buffers[] = {GL_NONE, GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2};
|
||||||
|
glDrawBuffers(4, buffers);
|
||||||
|
|
||||||
|
|
||||||
|
glDrawElements(
|
||||||
|
GL_TRIANGLES, // mode
|
||||||
|
VCount, // count
|
||||||
|
GL_UNSIGNED_INT, // type
|
||||||
|
(void*)0 // element array buffer offset
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Mesh::Draw(const Texture &Tex,const glm::vec2 &Pos) const{
|
||||||
|
glm::mat4x4 matrix{{1,0,0,Pos.x},
|
||||||
|
{0,1,0,Pos.y},
|
||||||
|
{0,0,1,0},
|
||||||
|
{0,0,0,1}};
|
||||||
|
GLuint MatrixID = glGetUniformLocation(shader.ShaderId, "TransformationMatrix");
|
||||||
|
glUniformMatrix4fv(MatrixID,1,GL_FALSE,&matrix[0][0]);
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
shader.Use();
|
||||||
|
Tex.SetActive();
|
||||||
|
|
||||||
|
glEnable(GL_DEPTH_TEST);
|
||||||
|
glDepthFunc(GL_LESS);
|
||||||
|
|
||||||
|
glEnable(GL_CULL_FACE);
|
||||||
|
glCullFace(GL_FRONT);
|
||||||
|
|
||||||
|
const GLenum buffers[] = {GL_NONE, GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2};
|
||||||
|
glDrawBuffers(4, buffers);
|
||||||
|
|
||||||
|
|
||||||
|
glDrawElements(
|
||||||
|
GL_TRIANGLES, // mode
|
||||||
|
VCount, // count
|
||||||
|
GL_UNSIGNED_INT, // type
|
||||||
|
(void*)0 // element array buffer offset
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
49
deps/vgcore/src/MessageBox.cpp
vendored
Normal file
49
deps/vgcore/src/MessageBox.cpp
vendored
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
#include<virintox/gcore/Graphics.h>
|
||||||
|
#include<virintox/gcore/MessageBox.h>
|
||||||
|
#include <imgui.h>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int errorcount = 0;
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
const char * MSGBoxException::what() const noexcept {
|
||||||
|
return whattext.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageBox::MessageBox(std::string Text, ErrorSeverity Severity): Widget(std::to_string(errorcount)), text(Text),severity(Severity){
|
||||||
|
errorcount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessageBox::Draw(){
|
||||||
|
switch(severity){
|
||||||
|
case Fault:
|
||||||
|
ImGui::Text("Fault:");
|
||||||
|
break;
|
||||||
|
case Error:
|
||||||
|
ImGui::Text("Error:");
|
||||||
|
break;
|
||||||
|
case Warning:
|
||||||
|
ImGui::Text("Warning:");
|
||||||
|
break;
|
||||||
|
case Info:
|
||||||
|
ImGui::Text("Info:");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Text(text.c_str());
|
||||||
|
|
||||||
|
if(ImGui::Button("Close"))
|
||||||
|
Deactivate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MessageBox::PostDraw(){
|
||||||
|
Widget::PostDraw();
|
||||||
|
if(Deactivate)
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageBox::~MessageBox(){
|
||||||
|
window->msgBoxes.remove(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
106
deps/vgcore/src/Outliner.cpp
vendored
Normal file
106
deps/vgcore/src/Outliner.cpp
vendored
Normal file
|
|
@ -0,0 +1,106 @@
|
||||||
|
#include<virintox/gcore/Outliner.h>
|
||||||
|
#include<imgui.h>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
namespace Graphics {
|
||||||
|
|
||||||
|
Outliner::Outliner() : Widget("Outliner",true){
|
||||||
|
// NameEdit = NameEditor();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Outliner::Draw() {
|
||||||
|
if(MainItem == nullptr)
|
||||||
|
return;
|
||||||
|
DrawNode(MainItem);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Outliner::DrawNode(ITreeSerializable* Node) {
|
||||||
|
if(Node->GetObjectType() == Folder) {
|
||||||
|
if (ImGui::TreeNodeEx(Node->GetName().c_str(), ImGuiTreeNodeFlags_SpanFullWidth)) {
|
||||||
|
if(ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Left) || ImGui::IsMouseClicked(ImGuiMouseButton_Middle)) {
|
||||||
|
if(LastSelectedNode != nullptr)
|
||||||
|
LastSelectedNode->CurrentlySelected = false;
|
||||||
|
LastSelectedNode = Node;
|
||||||
|
Node->CurrentlySelected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Right) ) {
|
||||||
|
NameEdit.Activate(Node);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto item: Node->GetSubItems())
|
||||||
|
DrawNode(item);
|
||||||
|
ImGui::TreePop();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Left) || ImGui::IsMouseClicked(ImGuiMouseButton_Middle)) {
|
||||||
|
if(LastSelectedNode != nullptr)
|
||||||
|
LastSelectedNode->CurrentlySelected = false;
|
||||||
|
LastSelectedNode = Node;
|
||||||
|
Node->CurrentlySelected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Right)) {
|
||||||
|
NameEdit.Activate(Node);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ImGui::TreeNodeEx(Node->GetName().c_str(), ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_Bullet | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_SpanFullWidth)) {
|
||||||
|
|
||||||
|
if(ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Left) || ImGui::IsMouseClicked(ImGuiMouseButton_Middle)) {
|
||||||
|
if(LastSelectedNode != nullptr)
|
||||||
|
LastSelectedNode->CurrentlySelected = false;
|
||||||
|
LastSelectedNode = Node;
|
||||||
|
Node->CurrentlySelected = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ImGui::IsItemHovered() && ImGui::IsMouseClicked(ImGuiMouseButton_Right)) {
|
||||||
|
NameEdit.Activate(Node);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Outliner::PostDraw() {
|
||||||
|
Widget::PostDraw();
|
||||||
|
if(NameEdit.Active) {
|
||||||
|
NameEdit.PreDraw();
|
||||||
|
NameEdit.Draw();
|
||||||
|
NameEdit.PostDraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
NameEditorOld::NameEditorOld() : Widget("Outliner Name Editor") {
|
||||||
|
std::cout << "Initializing Name Editor";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NameEditorOld::PreDraw() {
|
||||||
|
ImGui::Begin(Name.c_str(),&Active,ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NameEditorOld::Draw() {
|
||||||
|
ImGui::Text("Change Name of Node to:");
|
||||||
|
|
||||||
|
bool Done = ImGui::InputText("##",NewName,256,ImGuiInputTextFlags_EnterReturnsTrue);
|
||||||
|
ImVec2 PrevPos = ImGui::GetCursorPos();
|
||||||
|
Done |= ImGui::Button("Done",ImVec2(140.0f,30.0f));
|
||||||
|
|
||||||
|
PrevPos.x += 145.0f;
|
||||||
|
ImGui::SetCursorPos(PrevPos);
|
||||||
|
Active &= !ImGui::Button("Cancel",ImVec2(140.0f,30.0f));
|
||||||
|
if(Done){
|
||||||
|
EditingNode->SetName(std::string(NewName));
|
||||||
|
Active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
173
deps/vgcore/src/Shader.cpp
vendored
Normal file
173
deps/vgcore/src/Shader.cpp
vendored
Normal file
|
|
@ -0,0 +1,173 @@
|
||||||
|
|
||||||
|
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
#include<boost/dll.hpp>
|
||||||
|
#include<iostream>
|
||||||
|
#include<mutex>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
|
||||||
|
|
||||||
|
bool initd = false;
|
||||||
|
|
||||||
|
const GLchar *VertShaderSrc2D = "#version 460\n"
|
||||||
|
"layout (location = 0) in vec2 aPos;"
|
||||||
|
"layout (location = 1) in vec2 aTexCoord;\n"
|
||||||
|
"uniform mat4 ProjectionMatrix;\n"
|
||||||
|
"uniform mat4 TransformationMatrix;\n"
|
||||||
|
"out vec2 TexCoord;\n"
|
||||||
|
"void main(){\n"
|
||||||
|
"gl_Position = ProjectionMatrix * (vec4(aPos.x,aPos.y,1.0,1.0) * TransformationMatrix);"
|
||||||
|
"TexCoord = aTexCoord;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
const GLchar *FragShaderSrc2D = "#version 460\n"
|
||||||
|
"in vec2 TexCoord;\n"
|
||||||
|
"out vec4 FragColor;\n"
|
||||||
|
"uniform sampler2D tex;\n"
|
||||||
|
"void main(){\n"
|
||||||
|
"FragColor = texture(tex,TexCoord);//vec4(1.0f,1.0f,1.0f,1.0f);\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
const GLchar *VertShaderSrc3D = "#version 460\n"
|
||||||
|
"layout (location = 0) in vec2 aPos;"
|
||||||
|
"layout (location = 1) in vec2 aTexCoord;\n"
|
||||||
|
"uniform mat4 ProjectionMatrix;\n"
|
||||||
|
"out vec2 TexCoord;\n"
|
||||||
|
"void main(){\n"
|
||||||
|
"gl_Position = ProjectionMatrix * vec4(aPos.x,-aPos.y,1.0,1.0);"
|
||||||
|
"TexCoord = aTexCoord;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
const GLchar *FragShaderSrc3D = "#version 460\n"
|
||||||
|
"in vec2 TexCoord;\n"
|
||||||
|
"out vec4 FragColor;\n"
|
||||||
|
"uniform sampler2D tex;\n"
|
||||||
|
"void main(){\n"
|
||||||
|
"FragColor = texture(tex,TexCoord);//vec4(1.0f,1.0f,1.0f,1.0f);\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
Shader::Shader(const GLchar* VertexSrc, const GLchar* FragmentSrc){
|
||||||
|
GLuint VShader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
|
glShaderSource(VShader, 1, &VertexSrc, 0);
|
||||||
|
|
||||||
|
glCompileShader(VShader);
|
||||||
|
|
||||||
|
GLint isCompiled = 0;
|
||||||
|
glGetShaderiv(VShader, GL_COMPILE_STATUS, &isCompiled);
|
||||||
|
|
||||||
|
if(isCompiled == GL_FALSE)
|
||||||
|
{
|
||||||
|
GLint maxLength = 0;
|
||||||
|
glGetShaderiv(VShader, GL_INFO_LOG_LENGTH, &maxLength);
|
||||||
|
|
||||||
|
// The maxLength includes the NULL character
|
||||||
|
std::vector<GLchar> infoLog(maxLength);
|
||||||
|
glGetShaderInfoLog(VShader, maxLength, &maxLength, &infoLog[0]);
|
||||||
|
|
||||||
|
// We don't need the shader anymore.
|
||||||
|
glDeleteShader(VShader);
|
||||||
|
|
||||||
|
// Use the infoLog as you see fit.
|
||||||
|
|
||||||
|
for(GLchar c: infoLog)
|
||||||
|
std::cout << c;
|
||||||
|
std::cout << std::endl;
|
||||||
|
throw 1;
|
||||||
|
|
||||||
|
// In this simple program, we'll just leave
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create an empty fragment shader handle
|
||||||
|
GLuint FShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
|
|
||||||
|
// Send the fragment shader source code to GL
|
||||||
|
// Note that std::string's .c_str is NULL character terminated.
|
||||||
|
glShaderSource(FShader, 1, &FragmentSrc, 0);
|
||||||
|
|
||||||
|
// Compile the fragment shader
|
||||||
|
glCompileShader(FShader);
|
||||||
|
|
||||||
|
glGetShaderiv(FShader, GL_COMPILE_STATUS, &isCompiled);
|
||||||
|
if (isCompiled == GL_FALSE)
|
||||||
|
{
|
||||||
|
GLint maxLength = 0;
|
||||||
|
glGetShaderiv(FShader, GL_INFO_LOG_LENGTH, &maxLength);
|
||||||
|
|
||||||
|
// The maxLength includes the NULL character
|
||||||
|
std::vector<GLchar> infoLog(maxLength);
|
||||||
|
glGetShaderInfoLog(FShader, maxLength, &maxLength, &infoLog[0]);
|
||||||
|
|
||||||
|
for(GLchar c: infoLog)
|
||||||
|
std::cout << c;
|
||||||
|
std::cout << std::endl;
|
||||||
|
throw 1;
|
||||||
|
// We don't need the shader anymore.
|
||||||
|
glDeleteShader(FShader);
|
||||||
|
// Either of them. Don't leak shaders.
|
||||||
|
glDeleteShader(VShader);
|
||||||
|
|
||||||
|
// Use the infoLog as you see fit.
|
||||||
|
|
||||||
|
// In this simple program, we'll just leave
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ShaderId = glCreateProgram();
|
||||||
|
glAttachShader(ShaderId,VShader);
|
||||||
|
glAttachShader(ShaderId,FShader);
|
||||||
|
glLinkProgram(ShaderId);
|
||||||
|
|
||||||
|
GLint isLinked = 0;
|
||||||
|
glGetProgramiv(ShaderId, GL_LINK_STATUS, (int *)&isLinked);
|
||||||
|
if (isLinked == GL_FALSE)
|
||||||
|
{
|
||||||
|
GLint maxLength = 0;
|
||||||
|
glGetProgramiv(ShaderId, GL_INFO_LOG_LENGTH, &maxLength);
|
||||||
|
|
||||||
|
// The maxLength includes the NULL character
|
||||||
|
std::vector<GLchar> infoLog(maxLength);
|
||||||
|
glGetProgramInfoLog(ShaderId, maxLength, &maxLength, &infoLog[0]);
|
||||||
|
|
||||||
|
for(GLchar c: infoLog)
|
||||||
|
std::cout << c;
|
||||||
|
std::cout << std::endl;
|
||||||
|
throw 1;
|
||||||
|
// We don't need the program anymore.
|
||||||
|
glDeleteProgram(ShaderId);
|
||||||
|
// Don't leak shaders either.
|
||||||
|
glDeleteShader(VShader);
|
||||||
|
glDeleteShader(FShader);
|
||||||
|
|
||||||
|
// Use the infoLog as you see fit.
|
||||||
|
|
||||||
|
// In this simple program, we'll just leave
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLuint texture = glGetUniformLocation(Shader::ShaderId, "tex");
|
||||||
|
|
||||||
|
glUniform1i(texture,0);
|
||||||
|
|
||||||
|
glDetachShader(ShaderId, VShader);
|
||||||
|
glDetachShader(ShaderId, FShader);
|
||||||
|
std::cout << "successfully compiled shader\n";
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Shader::Use() {
|
||||||
|
glUseProgram(ShaderId);
|
||||||
|
}
|
||||||
|
|
||||||
|
Shader &GetDefaultShader2D(){
|
||||||
|
static Shader DefaultShader2D = Shader(VertShaderSrc2D, FragShaderSrc2D);
|
||||||
|
return DefaultShader2D;
|
||||||
|
}
|
||||||
|
|
||||||
|
Shader &GetDefaultShader3D(){
|
||||||
|
static Shader DefaultShader3D = Shader(VertShaderSrc3D, FragShaderSrc3D);
|
||||||
|
return DefaultShader3D;
|
||||||
|
}
|
||||||
|
}
|
||||||
161
deps/vgcore/src/Sprite.cpp
vendored
Normal file
161
deps/vgcore/src/Sprite.cpp
vendored
Normal file
|
|
@ -0,0 +1,161 @@
|
||||||
|
#include<virintox/gcore/Sprite.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Graphics::Sprite::Sprite(){}
|
||||||
|
|
||||||
|
Graphics::Sprite::Sprite(const glm::vec2 &Pos, float scale, Texture* Tex) {
|
||||||
|
TexPtr = Tex;
|
||||||
|
VCount = 6;
|
||||||
|
glGenVertexArrays(1, &VAO);
|
||||||
|
glGenBuffers(1, &VBO);
|
||||||
|
glGenBuffers(1, &EBO);
|
||||||
|
std::vector<float> vertices{
|
||||||
|
Pos.x ,Pos.y,
|
||||||
|
0.0f ,0.0f,
|
||||||
|
Pos.x + TexPtr->size.x * scale,Pos.y,
|
||||||
|
1.0f ,0.0f,
|
||||||
|
Pos.x ,Pos.y + TexPtr->size.y * scale,
|
||||||
|
0.0f ,1.0f,
|
||||||
|
|
||||||
|
Pos.x + TexPtr->size.x * scale,Pos.y,
|
||||||
|
1.0f ,0.0f,
|
||||||
|
Pos.x + TexPtr->size.x * scale,Pos.y + TexPtr->size.y * scale,
|
||||||
|
1.0f ,1.0f,
|
||||||
|
Pos.x ,Pos.y + TexPtr->size.y * scale,
|
||||||
|
0.0f ,1.0f
|
||||||
|
};
|
||||||
|
unsigned int indices[] = {
|
||||||
|
0,1,2,
|
||||||
|
3,4,5
|
||||||
|
};
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
|
||||||
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Graphics::Sprite::Sprite(const glm::mat3x2 &Veticies, const glm::mat3x2 &TexCoords, Texture* Tex) {
|
||||||
|
TexPtr = Tex;
|
||||||
|
VCount = 3;
|
||||||
|
glGenVertexArrays(1, &VAO);
|
||||||
|
glGenBuffers(1, &VBO);
|
||||||
|
glGenBuffers(1, &EBO);
|
||||||
|
std::vector<float> vertices{
|
||||||
|
Veticies[0].x,Veticies[0].y,TexCoords[0].x / TexPtr->size.x,TexCoords[0].y / TexPtr->size.y,
|
||||||
|
Veticies[1].x,Veticies[1].y,TexCoords[1].x / TexPtr->size.x,TexCoords[1].y / TexPtr->size.y,
|
||||||
|
Veticies[2].x,Veticies[2].y,TexCoords[2].x / TexPtr->size.x,TexCoords[2].y / TexPtr->size.y
|
||||||
|
};
|
||||||
|
unsigned int indices[] = {
|
||||||
|
0,1,2
|
||||||
|
};
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
|
||||||
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
|
||||||
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::Sprite::Draw() {
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
Graphics::GetDefaultShader2D().Use();
|
||||||
|
TexPtr->SetActive();
|
||||||
|
|
||||||
|
glDrawElements(GL_TRIANGLES, VCount, GL_UNSIGNED_INT, 0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::Sprite::Update(const glm::vec2 &Pos, float scale) const{
|
||||||
|
std::vector<float> vertices{
|
||||||
|
Pos.x ,Pos.y,
|
||||||
|
0.0f ,0.0f,
|
||||||
|
Pos.x + TexPtr->size.x * scale,Pos.y,
|
||||||
|
1.0f ,0.0f,
|
||||||
|
Pos.x ,Pos.y + TexPtr->size.y * scale,
|
||||||
|
0.0f ,1.0f,
|
||||||
|
|
||||||
|
Pos.x + TexPtr->size.x * scale,Pos.y,
|
||||||
|
1.0f ,0.0f,
|
||||||
|
Pos.x + TexPtr->size.x * scale,Pos.y + TexPtr->size.y * scale,
|
||||||
|
1.0f ,1.0f,
|
||||||
|
Pos.x ,Pos.y + TexPtr->size.y * scale,
|
||||||
|
0.0f ,1.0f
|
||||||
|
};
|
||||||
|
unsigned int indices[] = {
|
||||||
|
0,1,2,
|
||||||
|
3,4,5
|
||||||
|
};
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::Sprite::Update(const glm::mat3x2 &Veticies, const glm::mat3x2 &TexCoords) const{
|
||||||
|
std::vector<float> vertices{
|
||||||
|
Veticies[0].x,Veticies[0].y,TexCoords[0].x / TexPtr->size.x,TexCoords[0].y / TexPtr->size.y,
|
||||||
|
Veticies[1].x,Veticies[1].y,TexCoords[1].x / TexPtr->size.x,TexCoords[1].y / TexPtr->size.y,
|
||||||
|
Veticies[2].x,Veticies[2].y,TexCoords[2].x / TexPtr->size.x,TexCoords[2].y / TexPtr->size.y
|
||||||
|
};
|
||||||
|
unsigned int indices[] = {
|
||||||
|
0,1,2
|
||||||
|
};
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_DYNAMIC_DRAW);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
||||||
|
}
|
||||||
123
deps/vgcore/src/Texture.cpp
vendored
Normal file
123
deps/vgcore/src/Texture.cpp
vendored
Normal file
|
|
@ -0,0 +1,123 @@
|
||||||
|
#include "virintox/gcore/Mesh.h"
|
||||||
|
#include<virintox/gcore/Texture.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#include<virintox/gcore/stb_image.h>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
namespace Graphics {
|
||||||
|
Texture::Texture(boost::filesystem::path PngFile,bool Normalized) {
|
||||||
|
glGenTextures(1, &TexID);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, TexID);
|
||||||
|
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glPixelStoref(GL_UNPACK_ALIGNMENT,1);
|
||||||
|
glPixelStoref(GL_PACK_ALIGNMENT,1);
|
||||||
|
|
||||||
|
int width, height, nrChannels;
|
||||||
|
unsigned char *data = stbi_load(PngFile.string().c_str(), &width, &height, &nrChannels, 0);
|
||||||
|
if (data)
|
||||||
|
{
|
||||||
|
if(nrChannels == 4)
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
||||||
|
if(nrChannels == 3)
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
std::cout << "Failed to load texture" << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
stbi_image_free(data);
|
||||||
|
if(!Normalized)
|
||||||
|
size = glm::vec2(width,height);
|
||||||
|
else
|
||||||
|
size = glm::vec2(1.0,1.0);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER,0);
|
||||||
|
glBindVertexArray(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
Texture::~Texture() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Texture::Draw(glm::vec2 pos, float scale) {
|
||||||
|
static Mesh quadmesh = [](){
|
||||||
|
glm::vec2 P1(0,0);
|
||||||
|
glm::vec2 P2(1, 0);
|
||||||
|
glm::vec2 P3(0,1);
|
||||||
|
glm::vec2 P4(1,1);
|
||||||
|
|
||||||
|
glm::vec2 TP1(0, 0);
|
||||||
|
glm::vec2 TP2(1, 0);
|
||||||
|
glm::vec2 TP3(0, 1);
|
||||||
|
glm::vec2 TP4(1,1);
|
||||||
|
|
||||||
|
return Mesh({P1,P2,P3,P2,P4,P3},{1,2,3,4,5,6},{TP1,TP2,TP3,TP2,TP4,TP3});
|
||||||
|
}();
|
||||||
|
|
||||||
|
quadmesh.Draw(*this, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Texture::DrawC(glm::vec2 pos, float scale) {
|
||||||
|
Draw(pos - size * (scale / 2), scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Texture::DrawTri(glm::tmat3x2<float> Tri, glm::tmat3x2<float> TexCoords) {
|
||||||
|
|
||||||
|
GetDefaultShader2D().Use();
|
||||||
|
glPolygonMode( GL_FRONT_AND_BACK, GL_FILL);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
|
||||||
|
std::vector<float> vertices{
|
||||||
|
Tri[0].x,Tri[0].y,TexCoords[0].x / size.x,TexCoords[0].y / size.y,
|
||||||
|
Tri[1].x,Tri[1].y,TexCoords[1].x / size.x,TexCoords[1].y / size.y,
|
||||||
|
Tri[2].x,Tri[2].y,TexCoords[2].x / size.x,TexCoords[2].y / size.y
|
||||||
|
};
|
||||||
|
unsigned int indices[] = {
|
||||||
|
0,1,2
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned int VBO, VAO, EBO;
|
||||||
|
glGenVertexArrays(1, &VAO);
|
||||||
|
glGenBuffers(1, &VBO);
|
||||||
|
glGenBuffers(1, &EBO);
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ARRAY_BUFFER, VBO);
|
||||||
|
glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(float), &vertices[0], GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
|
||||||
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
|
||||||
|
|
||||||
|
// position attribute
|
||||||
|
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)0);
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
// color attribute
|
||||||
|
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), (void*)(2 * sizeof(float)));
|
||||||
|
glEnableVertexAttribArray(1);
|
||||||
|
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, TexID);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
glBindVertexArray(VAO);
|
||||||
|
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, 0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
glDeleteVertexArrays(1, &VAO);
|
||||||
|
glDeleteBuffers(1, &VBO);
|
||||||
|
glDeleteBuffers(1, &EBO);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Texture::SetActive() const{
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, TexID);
|
||||||
|
}
|
||||||
|
}
|
||||||
80
deps/vgcore/src/Viewport.cpp
vendored
Normal file
80
deps/vgcore/src/Viewport.cpp
vendored
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
#define GLEW_STATIC
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<virintox/gcore/Viewport.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
#include<imgui.h>
|
||||||
|
#include<glm/gtc/matrix_transform.hpp>
|
||||||
|
#include<glm/gtx/string_cast.hpp>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
Graphics::Viewport::Viewport(){
|
||||||
|
framewidth = 0;
|
||||||
|
frameheight = 0;
|
||||||
|
|
||||||
|
glGenFramebuffers(1, &Framebuffer);
|
||||||
|
glGenTextures(1, &FramebufferTex);
|
||||||
|
glGenTextures(1, &FramebufferDepthTex);
|
||||||
|
glGenTextures(1, &FramebufferMatIdTex);
|
||||||
|
glGenTextures(1, &FramebufferWorldPosTex);
|
||||||
|
RecreateFramebuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Graphics::Viewport::HandleInput(InputEvent) {/* Not a pure virtual */}
|
||||||
|
|
||||||
|
void Graphics::Viewport::RecreateFramebuffer() {
|
||||||
|
|
||||||
|
/*glDeleteFramebuffers(1,&Framebuffer);
|
||||||
|
glDeleteTextures(1,&Framebuffer);
|
||||||
|
glDeleteTextures(1,&FramebufferDepthTex);
|
||||||
|
glDeleteTextures(1,&FramebufferMatIdTex);
|
||||||
|
glDeleteTextures(1,&FramebufferWorldPosTex);
|
||||||
|
|
||||||
|
glGenFramebuffers(1, &Framebuffer);
|
||||||
|
glGenTextures(1, &FramebufferTex);
|
||||||
|
glGenTextures(1, &FramebufferDepthTex);
|
||||||
|
glGenTextures(1, &FramebufferMatIdTex);
|
||||||
|
glGenTextures(1, &FramebufferWorldPosTex);*/
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, Framebuffer);
|
||||||
|
glBindTexture(GL_TEXTURE_2D, FramebufferTex);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, framewidth, frameheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, FramebufferTex, 0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, FramebufferMatIdTex);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32UI , framewidth, frameheight, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, NULL);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, FramebufferMatIdTex, 0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, FramebufferWorldPosTex);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, framewidth, frameheight, 0, GL_RGBA, GL_FLOAT, NULL);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, FramebufferWorldPosTex, 0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, FramebufferDepthTex);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, framewidth, frameheight, 0, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, NULL);
|
||||||
|
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, FramebufferDepthTex, 0);
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D,0);
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
|
|
||||||
|
lastframeheight = frameheight;
|
||||||
|
lastframewidth = framewidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Graphics::Viewport::ChangeView(const glm::vec2 &pos, float scale) const{
|
||||||
|
auto matrix = glm::ortho(pos.x,pos.x+framewidth*scale,pos.y+frameheight*scale,pos.y);
|
||||||
|
GLuint MatrixID = glGetUniformLocation(GetDefaultShader2D().ShaderId, "ProjectionMatrix");
|
||||||
|
glUniformMatrix4fv(MatrixID,1,GL_FALSE,&matrix[0][0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Graphics::Viewport::ChangeView(float x,float y, float scale) const{
|
||||||
|
auto matrix = glm::ortho(x,x+framewidth*scale,y,y+frameheight*scale);
|
||||||
|
GLuint MatrixID = glGetUniformLocation(GetDefaultShader2D().ShaderId, "ProjectionMatrix");
|
||||||
|
glUniformMatrix4fv(MatrixID,1,GL_FALSE,&matrix[0][0]);
|
||||||
|
|
||||||
|
}
|
||||||
122
deps/vgcore/src/ViewportWidget.cpp
vendored
Normal file
122
deps/vgcore/src/ViewportWidget.cpp
vendored
Normal file
|
|
@ -0,0 +1,122 @@
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<virintox/gcore/ViewportWidget.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
#include<virintox/gcore/Viewport.h>
|
||||||
|
#include<imgui.h>
|
||||||
|
#include<glm/gtc/matrix_transform.hpp>
|
||||||
|
#include<glm/gtx/string_cast.hpp>
|
||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
namespace Graphics{
|
||||||
|
ViewportWidget::ViewportWidget(std::string name,bool active) : Widget(name,active) , Viewport(){
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ViewportWidget::PreDraw() {
|
||||||
|
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding,ImVec2(0,0));
|
||||||
|
ImGui::Begin(Name.c_str(),&Active,ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
|
||||||
|
|
||||||
|
ImVec2 windsize = ImGui::GetWindowSize();
|
||||||
|
|
||||||
|
framewidth = windsize.x;
|
||||||
|
frameheight = windsize.y - 23;
|
||||||
|
|
||||||
|
if((framewidth != lastframewidth) || (frameheight != lastframeheight))
|
||||||
|
RecreateFramebuffer();
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER,Framebuffer);
|
||||||
|
glViewport(0,0,framewidth,frameheight);
|
||||||
|
glClearColor(.2,.2,.2,1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ViewportWidget::PostDraw() {
|
||||||
|
|
||||||
|
auto preimgcpos = ImGui::GetCursorPos();
|
||||||
|
|
||||||
|
ImVec2 windsize = ImGui::GetWindowSize();
|
||||||
|
windsize.y -= 23;
|
||||||
|
|
||||||
|
//glFinish();
|
||||||
|
|
||||||
|
ImGui::SetCursorPos(ImVec2(0,23));
|
||||||
|
ImGui::Image(reinterpret_cast<ImTextureID>(FramebufferTex),windsize);
|
||||||
|
|
||||||
|
if(ImGui::IsItemHovered()){
|
||||||
|
|
||||||
|
std::vector<InputEvent> Events;
|
||||||
|
ImGui::SetCursorPos(ImVec2(0,23));
|
||||||
|
|
||||||
|
ImVec2 ScreenPos = ImGui::GetMousePos();
|
||||||
|
ImVec2 PosRel = ImGui::GetCursorScreenPos();
|
||||||
|
|
||||||
|
float X = ScreenPos.x - PosRel.x;
|
||||||
|
float Y = ScreenPos.y - PosRel.y;
|
||||||
|
|
||||||
|
X /= windsize.x;
|
||||||
|
Y /= windsize.y;
|
||||||
|
|
||||||
|
InputEvent Event = InputEvent {X,Y,MouseHover};
|
||||||
|
Events.push_back(Event);
|
||||||
|
ImGuiIO& IO = ImGui::GetIO();
|
||||||
|
|
||||||
|
if(ImGui::IsMouseClicked(ImGuiMouseButton_Right)){
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MouseDownR;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
if(ImGui::IsMouseClicked(ImGuiMouseButton_Left)){
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MouseDownL;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(ImGui::IsMouseReleased(ImGuiMouseButton_Right)){
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MouseUpR;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
if(ImGui::IsMouseReleased(ImGuiMouseButton_Left)){
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MouseUpL;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ImGui::IsMouseDragging(ImGuiMouseButton_Right)) {
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MouseHoldR;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
if (ImGui::IsMouseDragging(ImGuiMouseButton_Left)){
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MouseHoldL;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(IO.MouseWheel != 0){
|
||||||
|
InputEvent NEvent = Event;
|
||||||
|
NEvent.EventType = MWheel;
|
||||||
|
NEvent.MWheel = IO.MouseWheel;
|
||||||
|
Events.push_back(NEvent);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(InputEvent e: Events) {
|
||||||
|
HandleInput(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindFramebuffer(GL_FRAMEBUFFER,0);
|
||||||
|
ImGui::PopStyleVar();
|
||||||
|
|
||||||
|
ImGui::SetCursorPos(preimgcpos);
|
||||||
|
DrawOver();
|
||||||
|
|
||||||
|
ImGui::End();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void ViewportWidget::DrawOver() {}
|
||||||
|
}
|
||||||
28
deps/vgcore/src/Widget.cpp
vendored
Normal file
28
deps/vgcore/src/Widget.cpp
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include<virintox/gcore/Graphics.h>
|
||||||
|
#include<virintox/gcore/Widget.h>
|
||||||
|
#include<imgui.h>
|
||||||
|
namespace Graphics{
|
||||||
|
|
||||||
|
Widget::Widget(std::string name, bool active) {
|
||||||
|
Name = name;
|
||||||
|
Active = active;
|
||||||
|
Elements = std::vector<std::unique_ptr<WidgetElement>>();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::Update() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::PreDraw() {
|
||||||
|
ImGui::Begin(Name.c_str(),&Active);
|
||||||
|
}
|
||||||
|
void Widget::Draw() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Widget::PostDraw() {
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
168
deps/vgcore/src/Window.cpp
vendored
Normal file
168
deps/vgcore/src/Window.cpp
vendored
Normal file
|
|
@ -0,0 +1,168 @@
|
||||||
|
#include<GL/glew.h>
|
||||||
|
#include<virintox/gcore/Window.h>
|
||||||
|
#include<virintox/gcore/MessageBox.h>
|
||||||
|
#include<virintox/gcore/Graphics.h>
|
||||||
|
#include<virintox/gcore/Shader.h>
|
||||||
|
#include <exception>
|
||||||
|
#include<imgui.h>
|
||||||
|
#include<backends/imgui_impl_glfw.h>
|
||||||
|
#include<backends/imgui_impl_opengl3.h>
|
||||||
|
#include<stdexcept>
|
||||||
|
#include<iostream>
|
||||||
|
#include "IconsFontAwesome6.h"
|
||||||
|
|
||||||
|
|
||||||
|
void ScrollCallback(GLFWwindow* window, double xoffset, double yoffset){
|
||||||
|
Graphics::MWheel -= yoffset * Graphics::MWheel / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
void drop_callback(GLFWwindow* window, int count, const char** paths)
|
||||||
|
{
|
||||||
|
std::vector<std::string> Files = std::vector<std::string>();
|
||||||
|
for (int x = 0; x < count; x++)
|
||||||
|
Files.push_back(std::string(paths[x]));
|
||||||
|
Graphics::window->DropCallback(Files);
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Graphics {
|
||||||
|
Window::Window(const std::string &name) {
|
||||||
|
Widgets = std::vector<std::unique_ptr<Widget>>();
|
||||||
|
|
||||||
|
glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 4 );
|
||||||
|
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 6 );
|
||||||
|
glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE );
|
||||||
|
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );
|
||||||
|
|
||||||
|
window = glfwCreateWindow(900,900,name.c_str(),NULL,NULL);
|
||||||
|
glfwMakeContextCurrent(window);
|
||||||
|
glfwSetScrollCallback(window,ScrollCallback);
|
||||||
|
glfwSetDropCallback(window, drop_callback);
|
||||||
|
glewExperimental = true;
|
||||||
|
if(GLEW_OK != glewInit())
|
||||||
|
throw std::runtime_error("Could not Initialize glew");
|
||||||
|
|
||||||
|
glfwSwapInterval(0);
|
||||||
|
IMGUI_CHECKVERSION();
|
||||||
|
ImGui::CreateContext();
|
||||||
|
ImGuiIO &io = ImGui::GetIO();
|
||||||
|
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_ViewportsEnable;
|
||||||
|
io.ConfigFlags |= ImGuiConfigFlags_DockingEnable;
|
||||||
|
//io.ConfigWindowsMoveFromTitleBarOnly = true;
|
||||||
|
io.WantCaptureKeyboard = false;
|
||||||
|
io.WantCaptureMouse = false;
|
||||||
|
io.WantCaptureMouseUnlessPopupClose = false;
|
||||||
|
|
||||||
|
io.Fonts->AddFontFromFileTTF("Roboto-Regular.ttf",16);
|
||||||
|
|
||||||
|
float baseFontSize = 16.0f;
|
||||||
|
float iconFontSize = baseFontSize * 2.0f / 3.0f;
|
||||||
|
|
||||||
|
static const ImWchar icons_ranges[] = { ICON_MIN_FA, ICON_MAX_16_FA, 0 };
|
||||||
|
ImFontConfig icons_config;
|
||||||
|
icons_config.MergeMode = true;
|
||||||
|
icons_config.PixelSnapH = true;
|
||||||
|
icons_config.GlyphMinAdvanceX = iconFontSize;
|
||||||
|
io.Fonts->AddFontFromFileTTF( FONT_ICON_FILE_NAME_FAS, iconFontSize, &icons_config, icons_ranges );
|
||||||
|
|
||||||
|
ImGuiStyle &style = ImGui::GetStyle();
|
||||||
|
style.FrameRounding = 4;
|
||||||
|
style.WindowRounding = 12;
|
||||||
|
style.ChildBorderSize = 1.0f;
|
||||||
|
style.WindowTitleAlign = ImVec2(0.5f,0.5f);
|
||||||
|
ImGui_ImplGlfw_InitForOpenGL(window, true);
|
||||||
|
ImGui_ImplOpenGL3_Init();
|
||||||
|
|
||||||
|
ImGui::StyleColorsDark();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::Update() {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::Draw() {
|
||||||
|
if(glfwWindowShouldClose(window)) {
|
||||||
|
glfwSetWindowShouldClose(window,GLFW_FALSE);
|
||||||
|
ImGui::OpenPopup("Are you sure?##QuitModal");
|
||||||
|
}
|
||||||
|
DrawBG();
|
||||||
|
|
||||||
|
ImGui::DockSpaceOverViewport(ImGui::GetMainViewport(),ImGuiDockNodeFlags_PassthruCentralNode);
|
||||||
|
|
||||||
|
ImGui::BeginMainMenuBar();
|
||||||
|
for(auto &M: Menus) {
|
||||||
|
if(ImGui::BeginMenu(M.first.c_str())) {
|
||||||
|
for (auto &I: M.second) {
|
||||||
|
bool pressed = false;
|
||||||
|
ImGui::MenuItem(I.Name.c_str(),I.Shortcut.c_str() ,&pressed);
|
||||||
|
if(pressed || (glfwGetKey(window,GLFW_KEY_LEFT_CONTROL) && glfwGetKey(window,I.ShortcutKey)))
|
||||||
|
I.Func();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::EndMenu();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ImGui::EndMainMenuBar();
|
||||||
|
|
||||||
|
|
||||||
|
for(auto& widget: Widgets) {
|
||||||
|
if(widget->Active) {
|
||||||
|
#ifdef NDEBUG
|
||||||
|
try{
|
||||||
|
#endif
|
||||||
|
widget->PreDraw();
|
||||||
|
widget->Draw();
|
||||||
|
widget->PostDraw();
|
||||||
|
#ifdef NDEBUG
|
||||||
|
} catch(const MSGBoxException& msgexc){
|
||||||
|
std::cout << msgexc.what() << std::endl;
|
||||||
|
msgBoxes.push_back(new MessageBox(msgexc.whattext,msgexc.Severity));
|
||||||
|
ImGui::End();
|
||||||
|
} catch(const std::exception& exc){
|
||||||
|
std::cout << exc.what() << std::endl;
|
||||||
|
msgBoxes.push_back(new MessageBox(exc.what(),Fault));
|
||||||
|
ImGui::End();
|
||||||
|
} catch(...){
|
||||||
|
std::cout << "Something happend .-." << std::endl;
|
||||||
|
msgBoxes.push_back(new MessageBox("An unknown error occured",Fault));
|
||||||
|
ImGui::End();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(auto box :msgBoxes){
|
||||||
|
bool brk;
|
||||||
|
box->PreDraw();
|
||||||
|
box->Draw();
|
||||||
|
brk = box->Deactivate;
|
||||||
|
box->PostDraw();
|
||||||
|
if(brk) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ImGui::BeginPopupModal("Are you sure?##QuitModal",NULL,ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize)){
|
||||||
|
ImGui::Text("Are you sure that you wish to quit?");
|
||||||
|
ImGui::SetCursorPosX(ImGui::CalcTextSize("Are you sure that you wish to quit?").x - ImGui::CalcTextSize(" Yes No ").x);
|
||||||
|
if(ImGui::Button("Yes"))
|
||||||
|
Graphics::Quit();
|
||||||
|
ImGui::SameLine();
|
||||||
|
if(ImGui::Button("No"))
|
||||||
|
ImGui::CloseCurrentPopup();
|
||||||
|
ImGui::EndPopup();
|
||||||
|
}
|
||||||
|
|
||||||
|
ImGui::Render();
|
||||||
|
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
glfwPollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Window::DropCallback(const std::vector<std::string> &paths) {return;}
|
||||||
|
|
||||||
|
void Window::DrawBG() {
|
||||||
|
glClearColor(.2,.2,.2,1);
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
res/blank.png
Normal file
BIN
res/blank.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 720 B |
12
res/untitled.mtl
Normal file
12
res/untitled.mtl
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
# Blender 3.5.1 MTL File: 'None'
|
||||||
|
# www.blender.org
|
||||||
|
|
||||||
|
newmtl Material
|
||||||
|
Ns 250.000000
|
||||||
|
Ka 1.000000 1.000000 1.000000
|
||||||
|
Kd 0.800000 0.800000 0.800000
|
||||||
|
Ks 0.500000 0.500000 0.500000
|
||||||
|
Ke 0.000000 0.000000 0.000000
|
||||||
|
Ni 1.450000
|
||||||
|
d 1.000000
|
||||||
|
illum 2
|
||||||
40
res/untitled.obj
Normal file
40
res/untitled.obj
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Blender 3.5.1
|
||||||
|
# www.blender.org
|
||||||
|
mtllib untitled.mtl
|
||||||
|
o Cube
|
||||||
|
v 1.000000 1.000000 -1.000000
|
||||||
|
v 1.000000 -1.000000 -1.000000
|
||||||
|
v 1.000000 1.000000 1.000000
|
||||||
|
v 1.000000 -1.000000 1.000000
|
||||||
|
v -1.000000 1.000000 -1.000000
|
||||||
|
v -1.000000 -1.000000 -1.000000
|
||||||
|
v -1.000000 1.000000 1.000000
|
||||||
|
v -1.000000 -1.000000 1.000000
|
||||||
|
vn -0.0000 1.0000 -0.0000
|
||||||
|
vn -0.0000 -0.0000 1.0000
|
||||||
|
vn -1.0000 -0.0000 -0.0000
|
||||||
|
vn -0.0000 -1.0000 -0.0000
|
||||||
|
vn 1.0000 -0.0000 -0.0000
|
||||||
|
vn -0.0000 -0.0000 -1.0000
|
||||||
|
vt 0.625000 0.500000
|
||||||
|
vt 0.375000 0.500000
|
||||||
|
vt 0.625000 0.750000
|
||||||
|
vt 0.375000 0.750000
|
||||||
|
vt 0.875000 0.500000
|
||||||
|
vt 0.625000 0.250000
|
||||||
|
vt 0.125000 0.500000
|
||||||
|
vt 0.375000 0.250000
|
||||||
|
vt 0.875000 0.750000
|
||||||
|
vt 0.625000 1.000000
|
||||||
|
vt 0.625000 0.000000
|
||||||
|
vt 0.375000 1.000000
|
||||||
|
vt 0.375000 0.000000
|
||||||
|
vt 0.125000 0.750000
|
||||||
|
s 0
|
||||||
|
usemtl Material
|
||||||
|
f 1/1/1 5/5/1 7/9/1 3/3/1
|
||||||
|
f 4/4/2 3/3/2 7/10/2 8/12/2
|
||||||
|
f 8/13/3 7/11/3 5/6/3 6/8/3
|
||||||
|
f 6/7/4 2/2/4 4/4/4 8/14/4
|
||||||
|
f 2/2/5 1/1/5 3/3/5 4/4/5
|
||||||
|
f 6/8/6 5/6/6 1/1/6 2/2/6
|
||||||
Loading…
Reference in a new issue