Added License Brief to Source Files

This commit is contained in:
Maddie Slockbower 2024-07-19 14:43:18 -04:00
parent ac317f1213
commit 80b428ad14
31 changed files with 651 additions and 72 deletions

View File

@ -33,8 +33,6 @@ endif()
include_directories(Include)
include_directories(External)
add_subdirectory(External/imnodes-master)
add_executable(OpenShaderDesigner
Source/Entry.cpp
@ -67,8 +65,7 @@ add_executable(OpenShaderDesigner
External/imgui-docking/backends/imgui_impl_opengl3.cpp
External/imgui-docking/misc/cpp/imgui_stdlib.cpp
External/imgui-docking/misc/freetype/imgui_freetype.cpp
Include/Utility/DirectedGraph.h
Include/Utility/Optional.h
Include/OpenGL/BufferObject.h
)
@ -77,5 +74,4 @@ target_link_libraries(OpenShaderDesigner PRIVATE
GLEW::GLEW
OpenGL::GL
${SDL2_LIBRARIES}
imnodes
)

View File

@ -1,6 +1,18 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef CONSOLE_H
#define CONSOLE_H

View File

@ -1,6 +1,18 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef ENGINE_H
#define ENGINE_H

View File

@ -1,6 +1,18 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/1/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef RENDERER_H
#define RENDERER_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef WINDOW_H
#define WINDOW_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/21/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef CONSOLEWINDOW_H
#define CONSOLEWINDOW_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef EDITORSYSTEM_H
#define EDITORSYSTEM_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef EDITORWINDOW_H
#define EDITORWINDOW_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/1/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef PROFILER_H
#define PROFILER_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/11/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef MATH_H
#define MATH_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/1/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef SHADERGRAPH_H
#define SHADERGRAPH_H
@ -183,8 +194,9 @@ namespace OpenShaderDesigner
static void Register(const std::filesystem::path& path, ConstructorPtr constructor);
private:
std::unordered_set<NodeId> Selected;
std::vector<Node*> Nodes;
std::unordered_set<PinId> Erased;
ConnectionMap Connections;
@ -250,6 +262,7 @@ namespace OpenShaderDesigner
std::unordered_set<NodeId> DragSelect;
bool LocksDragged, NodeHovered;
Optional<PinPtr> NewConnection;
std::unordered_set<NodeId> Selected;
} Mouse;
struct

View File

@ -0,0 +1,164 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef BUFFEROBJECT_H
#define BUFFEROBJECT_H
#ifndef NULL
#define NULL 0
#endif
#include <algorithm>
#include "Enum.h"
#include "Type.h"
namespace GLW
{
// Definition ==========================================================================================================
template<BufferType T, BufferUsage U, BufferStorage S = GPU>
class BufferObject
{
public:
static constexpr BufferType Type = T;
static constexpr BufferUsage Usage = U;
static constexpr BufferStorage Storage = S;
/**
* \brief BufferObject constructor
* \param size Size in bytes of the Buffer
* \param data Data to be used as the initial contents of the Buffer
*/
BufferObject(SizeT size, void* data = nullptr);
/**
* \brief Move Constructor
*/
BufferObject(BufferObject&& other);
/**
* \brief Copy Constructor
*/
BufferObject(const BufferObject& other);
/**
* \brief Destructor
*/
~BufferObject();
/**
* \brief Validity test
*/
[[nodiscard]] operator bool() const { return Handle != 0; }
/**
* \brief Copy Assignment
*/
BufferObject& operator=(const BufferObject& other);
/**
* \brief Move Assignment
*/
BufferObject& operator=(BufferObject&& other) noexcept;
[[nodiscard]] SizeT Size() const { return Size; }
void Resize(SizeT size);
private:
HandleT Handle;
SizeT Size;
void* Mapping;
};
// Constructors ========================================================================================================
template <BufferType T, BufferUsage U, BufferStorage S>
BufferObject<T, U, S>::BufferObject(SizeT size, void* data)
: Handle(NULL)
, Size(size)
, Mapping(nullptr)
{
glGenBuffers(1, &Handle);
if(!*this) return;
glBindBuffer(Type, Handle);
glBufferStorage(Type, Size, data, Usage);
glBindBuffer(Type, 0);
}
template <BufferType T, BufferUsage U, BufferStorage S>
BufferObject<T, U, S>::BufferObject(BufferObject&& other)
: Handle(other.Handle)
, Size(other.Size)
, Mapping(other.Size)
{
other.Handle = NULL;
other.Size = 0;
other.Mapping = nullptr;
}
template <BufferType T, BufferUsage U, BufferStorage S>
BufferObject<T, U, S>::BufferObject(const BufferObject& other)
: BufferObject(other.Size)
{
if(Handle == NULL) return;
if(other.Handle == NULL) return;
glCopyNamedBufferSubData(other.Handle, Handle, 0, 0, Size);
}
template <BufferType T, BufferUsage U, BufferStorage S>
BufferObject<T, U, S>::~BufferObject()
{
glDeleteBuffers(1, &Handle);
}
// Assignment Operators ================================================================================================
template <BufferType T, BufferUsage U, BufferStorage S>
BufferObject<T, U, S>& BufferObject<T, U, S>::operator=(const BufferObject& other)
{
BufferObject temp(other);
return (*this = std::move(temp)); // NOLINT(*-unconventional-assign-operator)
}
template <BufferType T, BufferUsage U, BufferStorage S>
BufferObject<T, U, S>& BufferObject<T, U, S>::operator=(BufferObject&& other) noexcept
{
glDeleteBuffers(1, &Handle);
Handle = other.Handle;
Size = other.Size;
Mapping = other.Mapping;
other.Handle = NULL;
other.Size = 0;
other.Mapping = nullptr;
return *this;
}
template <BufferType T, BufferUsage U, BufferStorage S>
void BufferObject<T, U, S>::Resize(SizeT size)
{
BufferObject temp(size);
glCopyNamedBufferSubData(Handle, temp.Handle, 0, 0, Size);
*this = std::move(temp);
}
}
#endif //BUFFEROBJECT_H

88
Include/OpenGL/Enum.h Normal file
View File

@ -0,0 +1,88 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef ENUM_H
#define ENUM_H
#include <gl/glew.h>
namespace GLW
{
enum Primitive : GLenum
{
TRIANGLES = GL_TRIANGLES
, LINES = GL_LINES
, POINTS = GL_POINTS
};
enum BufferType : GLenum
{
AtomicCounter = GL_ATOMIC_COUNTER_BUFFER
, ElementArray = GL_ELEMENT_ARRAY_BUFFER
, IndirectCompute = GL_DISPATCH_INDIRECT_BUFFER
, IndirectDraw = GL_DRAW_INDIRECT_BUFFER
, PixelPack = GL_PIXEL_PACK_BUFFER
, PixelUnpack = GL_PIXEL_UNPACK_BUFFER
, ShaderStorage = GL_SHADER_STORAGE_BUFFER
, TransformFeedback = GL_TRANSFORM_FEEDBACK
, Uniform = GL_UNIFORM_BUFFER
, VertexArray = GL_ARRAY_BUFFER
};
enum BufferUsage : GLenum
{
/**
* \brief Buffer cannot be read or modified by the CPU after creation
*/
STATIC = GL_NONE
/**
* \brief Buffer can be mapped for Read, Write, or Both
*/
, READ = GL_MAP_READ_BIT
, WRITE = GL_MAP_WRITE_BIT
, READ_WRITE = READ | WRITE
/**
* \brief Buffer can be written to using glBufferSubData
*/
, DYNAMIC = GL_DYNAMIC_STORAGE_BIT
/**
* \brief Buffer may be used while mapped
*/
, PERSISTENT = GL_MAP_PERSISTENT_BIT
/**
* \brief Allows buffer to remain coherent without an explicit barrier
*/
, COHERENT = GL_MAP_PERSISTENT_BIT | PERSISTENT
};
enum BufferStorage : GLenum
{
/**
* \brief Buffer memory will come from the GPU
*/
GPU = GL_NONE
/**
* \brief Buffer memory will come from the CPU
*/
, CPU = GL_CLIENT_STORAGE_BIT
};
}
#endif //ENUM_H

30
Include/OpenGL/Type.h Normal file
View File

@ -0,0 +1,30 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef TYPE_H
#define TYPE_H
#include <gl/glew.h>
namespace GLW
{
using OffsetT = GLintptr;
using SizeT = GLsizeiptr;
using IndexT = GLuint;
using FlagT = GLbitfield;
using HandleT = GLuint;
}
#endif //TYPE_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/11/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef DIRECTEDGRAPH_H
#define DIRECTEDGRAPH_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/12/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef OPTIONAL_H
#define OPTIONAL_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/21/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef STARTUP_H
#define STARTUP_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef TIMER_H
#define TIMER_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#ifndef ENGINE_UNIQUEID_H
#define ENGINE_UNIQUEID_H

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/Console.h>
#include <imgui-docking/misc/cpp/imgui_stdlib.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/Console.h>
#include <Core/Engine.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/EventSystem.h>
#include <Core/Console.h>

View File

@ -1,5 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/1/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/Renderer.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/Window.h>
#include <Core/Console.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/21/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/Console.h>
#include <Editor/ConsoleWindow.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Core/Console.h>
#include <Editor/EditorSystem.h>
@ -10,8 +21,6 @@
#include <imgui-docking/backends/imgui_impl_opengl3.h>
#include <imgui-docking/misc/freetype/imgui_freetype.h>
#include <imnodes-master/imnodes.h>
using namespace OpenShaderDesigner;
void EditorSystem::Initialize()
@ -21,7 +30,6 @@ void EditorSystem::Initialize()
Console::Log(Console::Severity::ALERT, "Initializing Dear ImGUI");
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImNodes::CreateContext();
// https://github.com/ocornut/imgui/issues/707#issuecomment-917151020
@ -162,7 +170,6 @@ void EditorSystem::Shutdown()
// Shutdown ImGui
ImGui_ImplSDL2_Shutdown();
ImGui::DestroyContext();
ImNodes::DestroyContext();
}
void EditorSystem::HandleEvents(SDL_Event* event)

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/20/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Editor/EditorWindow.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/1/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Editor/Profiler.h>

View File

@ -1,6 +1,18 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 6/18/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <iostream>
#include <Core/Engine.h>

View File

@ -1,6 +1,17 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/11/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <Graph/Nodes/Math.h>

View File

@ -1,6 +1,18 @@
// =====================================================================================================================
// Copyright 2024 Medusa Slockbower
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// Created by Maddie on 7/1/2024.
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// =====================================================================================================================
#include <filesystem>
#include <stack>
@ -195,7 +207,7 @@ void ShaderGraph::DrawWindow()
{
if(Drag.x == 0 && Drag.y == 0 && !Mouse.NodeHovered && !(Ctrl || Shift))
{
Selected.clear();
Mouse.Selected.clear();
}
Mouse.Locks.clear();
@ -373,7 +385,7 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
Mouse.FocusedNode = id;
Mouse.LocksDragged = false;
for(NodeId selected : Selected)
for(NodeId selected : Mouse.Selected)
{
Mouse.Locks.emplace(selected, Mouse.Location - Nodes[selected]->Position);
}
@ -385,22 +397,22 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
if(ImGui::IsMouseDragging(ImGuiMouseButton_Left) && !Mouse.NewConnection() && Focused)
{
// Reset When Dragging a New Node
if(Mouse.FocusedNode() && Mouse.FocusedNode == id && !Selected.contains(id))
if(Mouse.FocusedNode() && Mouse.FocusedNode == id && !Mouse.Selected.contains(id))
{
if(!(Ctrl || Shift))
{
Selected.clear();
Mouse.Selected.clear();
Mouse.Locks.clear();
}
Selected.insert(id);
Mouse.Selected.insert(id);
}
// Begin selection
if(Mouse.FocusedNode() && Selected.contains(id) && !(Ctrl || Shift))
if(Mouse.FocusedNode() && Mouse.Selected.contains(id) && !(Ctrl || Shift))
{
Mouse.LocksDragged = true;
for(NodeId selected : Selected)
for(NodeId selected : Mouse.Selected)
{
Mouse.Locks.emplace(selected, Mouse.Location - Nodes[selected]->Position);
}
@ -420,7 +432,7 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
// Clear selection for new selection
if(Mouse.DragSelect.empty() && !Shift && !Ctrl && !Mouse.FocusedNode())
{
Selected.clear();
Mouse.Selected.clear();
}
// Select nodes
@ -428,16 +440,16 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
{
if(!Ctrl)
{
if(!Selected.contains(id))
if(!Mouse.Selected.contains(id))
{
Selected.insert(id);
Mouse.Selected.insert(id);
Mouse.DragSelect.insert(id);
}
}
else
{
if(Selected.contains(id)) Selected.erase(id);
else Selected.insert(id);
if(Mouse.Selected.contains(id)) Mouse.Selected.erase(id);
else Mouse.Selected.insert(id);
Mouse.DragSelect.insert(id);
}
@ -450,12 +462,12 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
if(!Ctrl)
{
Selected.erase(id);
Mouse.Selected.erase(id);
}
else
{
if(Selected.contains(id)) Selected.erase(id);
else Selected.insert(id);
if(Mouse.Selected.contains(id)) Mouse.Selected.erase(id);
else Mouse.Selected.insert(id);
}
}
}
@ -463,20 +475,20 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
if(ImGui::IsMouseReleased(ImGuiMouseButton_Left) && HeaderHovered)
{
if(Selected.contains(id))
if(Mouse.Selected.contains(id))
{
if(Ctrl) Selected.erase(id);
if(Ctrl) Mouse.Selected.erase(id);
else if(!Shift && !Mouse.LocksDragged)
{
Selected.clear();
Selected.insert(id);
Mouse.Selected.clear();
Mouse.Selected.insert(id);
}
}
else
{
if(!(Ctrl || Shift))
Selected.clear();
Selected.insert(id);
Mouse.Selected.clear();
Mouse.Selected.insert(id);
}
}
@ -504,7 +516,7 @@ void ShaderGraph::DrawNode(Node& node, NodeId id)
// Border ==========================================================================================================
if(Selected.contains(id)) DrawList.AddRect(NodeRoot, NodeEdge, Style.Nodes.SelectedBorder.Color, Rounding, 0, Style.Nodes.SelectedBorder.Thickness / Camera.Zoom);
if(Mouse.Selected.contains(id)) DrawList.AddRect(NodeRoot, NodeEdge, Style.Nodes.SelectedBorder.Color, Rounding, 0, Style.Nodes.SelectedBorder.Thickness / Camera.Zoom);
else DrawList.AddRect(NodeRoot, NodeEdge, Style.Nodes.Border.Color, Rounding, 0, BorderThickness);
// Pins ============================================================================================================
@ -587,8 +599,8 @@ void ShaderGraph::DrawContextMenu()
if(ImGui::BeginPopupContextWindow())
{
if(ImGui::MenuItem("Copy", "Ctrl+C", false, !Selected.empty())) Copy();
if(ImGui::MenuItem("Cut", "Ctrl+X", false, !Selected.empty()))
if(ImGui::MenuItem("Copy", "Ctrl+C", false, !Mouse.Selected.empty())) Copy();
if(ImGui::MenuItem("Cut", "Ctrl+X", false, !Mouse.Selected.empty()))
{
Copy();
EraseSelection();
@ -849,7 +861,7 @@ NodeId ShaderGraph::AddNode(Node* node)
if(Erased.empty())
{
Nodes.push_back(node);
return Nodes.size() - 1;
return static_cast<NodeId>(Nodes.size() - 1);
}
NodeId id = *Erased.begin();
@ -883,21 +895,21 @@ void ShaderGraph::ClearClipboard()
void ShaderGraph::Copy()
{
if(Selected.empty()) return;
if(Mouse.Selected.empty()) return;
// Helper for connections
std::unordered_map<NodeId, NodeId> clipboardTransform;
ImVec2 min = Nodes[*Selected.begin()]->Position;
ImVec2 min = Nodes[*Mouse.Selected.begin()]->Position;
// Reset Clipboard
ClearClipboard();
Clipboard.Nodes.reserve(Selected.size());
Clipboard.Nodes.reserve(Mouse.Selected.size());
// Copy nodes
for(auto id : Selected)
for(auto id : Mouse.Selected)
{
Node* node = Nodes[id];
clipboardTransform[id] = Clipboard.Nodes.size();
clipboardTransform[id] = static_cast<NodeId>(Clipboard.Nodes.size());
Clipboard.Nodes.push_back(node->Copy(*this));
min = ImMin(node->Position, min);
}
@ -911,7 +923,7 @@ void ShaderGraph::Copy()
// Copy connections
for(const Connection& connection : Connections)
{
if(!(Selected.contains(connection.first.Node) && Selected.contains(connection.second.Node))) continue;
if(!(Mouse.Selected.contains(connection.first.Node) && Mouse.Selected.contains(connection.second.Node))) continue;
Connection copy = {
{ clipboardTransform[connection.first.Node], connection.first.Pin, connection.first.Input }
@ -928,7 +940,7 @@ void ShaderGraph::Paste(const ImVec2& location)
const float GridSize = (Style.FontSize + Style.Grid.Lines.Padding);
std::unordered_map<NodeId, NodeId> clipboardTransform;
ImVec2 root = ImFloor(location / GridSize + ImVec2(0.5f, 0.5f)) * GridSize;
Selected.clear();
Mouse.Selected.clear();
// Paste the nodes
NodeId id = 0;
@ -936,7 +948,7 @@ void ShaderGraph::Paste(const ImVec2& location)
{
NodeId index = clipboardTransform[id++] = AddNode(node->Copy(*this));
Nodes[index]->Position += root;
Selected.insert(index);
Mouse.Selected.insert(index);
}
// Paste the connections
@ -951,11 +963,11 @@ void ShaderGraph::Paste(const ImVec2& location)
void ShaderGraph::EraseSelection()
{
for(auto node : Selected)
for(auto node : Mouse.Selected)
{
RemoveNode(node);
}
Selected.clear();
Mouse.Selected.clear();
}
float ShaderGraph::BezierOffset(const ImVec2& out, const ImVec2& in)