Compare commits

...

2 Commits

21 changed files with 293 additions and 77 deletions

5
.gitignore vendored
View File

@ -1,12 +1,11 @@
build/ **/build/
intermediates/ **/intermediates/
tools/ tools/
*.make *.make
Makefile Makefile
.vscode/ .vscode/
libs/lua libs/lua
libs/glad libs/glad
Debug/
*.sln *.sln
*.vcxproj *.vcxproj
*.vcxproj.filters *.vcxproj.filters

View File

@ -34,7 +34,7 @@ project "BarinkEngine"
"assimp-vc143-mtd", "assimp-vc143-mtd",
"glfw3", "glfw3",
"ImGUI_Opengl3", "ImGui",
} }
@ -55,26 +55,9 @@ project "BarinkEngine"
"./src/**/*.h" "./src/**/*.h"
} }
prebuildcommands
{
filter { "system:windows"} ok,err = os.copyfile("BarinkEngine/src/Graphics/shaders/*" ,"SandboxApp/build/Debug/")
prebuildcommands { }
-- Copy shaders
"copy src\\graphics\\shaders\\fragment.shader ..\\build\\SandboxApplication\\Debug\\test.fs",
"copy src\\graphics\\shaders\\vertex.shader ..\\build\\SandboxApplication\\Debug\\test.vs",
"copy src\\graphics\\shaders\\RenderSurfaceFrag.shader ..\\build\\SandboxApplication\\Debug\\RenderSurface.fs",
"copy src\\graphics\\shaders\\RenderSurfaceVert.shader ..\\build\\SandboxApplication\\Debug\\RenderSurface.vs"
}
filter { "system:linux" }
prebuildcommands {
-- Copy shaders
"cp src/graphics/shaders/fragment.shader ../build/SandboxApplication/Debug/test.fs",
"cp src/graphics/shaders/vertex.shader ../build/SandboxApplication/Debug/test.vs",
"cp src/graphics/shaders/RenderSurfaceFrag.shader ../build/SandboxApplication/Debug/RenderSurface.fs",
"cp src/graphics/shaders/RenderSurfaceVert.shader ../build/SandboxApplication/Debug/RenderSurface.vs"
}
include('../ImGui') include('../ImGui')

View File

@ -35,28 +35,7 @@ void GUIManager::Render()
ImGui::NewFrame(); ImGui::NewFrame();
ImGui::DockSpaceOverViewport(ImGui::GetMainViewport());
ImGui::Begin("##App"); ImGui::Begin("##App");
// Show a menu bar
ImGui::BeginMainMenuBar();
if (ImGui::BeginMenu("Application")) {
if (ImGui::MenuItem("Exit")) {
// TODO: Exit application
}
ImGui::EndMenu();
}
ImGui::EndMainMenuBar();
ImmediateGraphicsDraw(); ImmediateGraphicsDraw();
ImGui::End(); ImGui::End();

View File

@ -22,6 +22,49 @@ BarinkEngine::Renderer::~Renderer()
// glDeleteBuffers(1, &UV_id); // glDeleteBuffers(1, &UV_id);
} }
void BarinkEngine::Renderer::Render()
{
Angle += 0.0001f;
for (auto model : models) {
// Push matrices etc ....
model->vertexarray.Bind();
model->elementBuffer.Bind(true);
if (model->material == nullptr) {
std::cout << "No material attached!" << std::endl;
// continue; //NOTE: Or use some default Material
}
else {
model->material->shader.Use();
model->material->Apply();
model->material->shader.setUniformVec3("Color", model->material->Color);
model->material->shader.setUniformMat4("M", glm::rotate(glm::mat4(), Angle, glm::vec3(0.5f, 0.5f, 0.0f)));
model->material->shader.setUniformMat4("V", cam.GetViewMatrix());
model->material->shader.setUniformMat4("P", projection);
// Update perf counters
ES.verts = model->mesh->vertices.size();
ES.DC++;
glDrawElements(GL_TRIANGLES,
static_cast<unsigned int>(model->mesh->elements.size()),
GL_UNSIGNED_INT,
NULL
);
}
model->vertexarray.Unbind();
}
}
void BarinkEngine::Renderer::Render(Framebuffer& framebuffer) void BarinkEngine::Renderer::Render(Framebuffer& framebuffer)
{ {
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.GetId()); glBindFramebuffer(GL_FRAMEBUFFER, framebuffer.GetId());

View File

@ -19,6 +19,8 @@ namespace BarinkEngine {
Renderer(); Renderer();
~Renderer(); ~Renderer();
void Render();
void Render(Framebuffer& framebuffer); void Render(Framebuffer& framebuffer);
void Submit(Renderable* model); void Submit(Renderable* model);

View File

@ -1,7 +1,7 @@
project "SandboxApplication" project "Editor"
kind "ConsoleApp" kind "ConsoleApp"
buildmessage "Building Sandbox ..." buildmessage "Building editor ..."
links{ links{
"BarinkEngine" "BarinkEngine"

138
Editor/src/main.cpp Normal file
View File

@ -0,0 +1,138 @@
#include "../../BarinkEngine/src/BarinkEngine.h"
#include "../../BarinkEngine/src/Scene/SceneManager.h"
#include "../../BarinkEngine/src/Scene/SceneNodeTypes.h"
#include "../../BarinkEngine/src/AssetManager/ModelImporter.h"
#include "../../BarinkEngine/src/Graphics/Framebuffer.h"
#include <imgui.h>
/*
* Define globals
*/
Shader* shader;
char* code = new char[254];
const std::string vertexShaderSource = "build/Debug/test.vs";
const std::string fragmentShaderSource = "build/Debug/test.fs";
BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter();
Framebuffer* framebuffer;
Scene* Level1;
BarinkEngine::SceneObject* cube;
/*
* Runs once at startup
* - USe to initialize the game/sandbox/demo
*/
void Start() {
// Build a basic test scene
// NOTE: This will later be done through an editor
// Create a level and load it as the current level
std::string levelName("Test Level");
Level1 = SceneManager::CreateScene(levelName);
SceneManager::LoadScene(*Level1);
shader = new Shader(vertexShaderSource, fragmentShaderSource);
// Create a cube node
cube = MI->Import("build/Debug/Models/cube.obj");
cube->renderable->material = new Material(*shader);
cube->renderable->material->Color = glm::vec3(1.0f, 0.0f, 0.0f);
// What is in cube now ??
std::cout << "mesh vertices: " << cube->renderable->mesh->vertices.size() << std::endl;
std::cout << "mesh elements: " << cube->renderable->mesh->elements.size() << std::endl;
Level1->GetRoot().addChild(*cube);
memset(code, '\0', 254);
framebuffer = new Framebuffer();
std::cout << "Colour attachment id; " << framebuffer->GetColourAttachment() << std::endl;
// TODO: Move to runtime/ Engine
// NOTE: Submits should later be done through walking the sceneTree
renderer.Submit(cube->renderable);
}
/*
* Runs every frame
* - Use to draw Immediate mode graphics (Not meant for HUD's )
*/
void ImmediateGraphicsDraw()
{
ImGui::DockSpaceOverViewport(ImGui::GetMainViewport());
// Show a menu bar
ImGui::BeginMainMenuBar();
if (ImGui::BeginMenu("Application")) {
if (ImGui::MenuItem("Exit")) {
// TODO: Exit application
}
ImGui::EndMenu();
}
ImGui::EndMainMenuBar();
// Show internal BarinkEngine stats
ShowStats();
ImGui::Begin("Viewport");
ImGui::Image((void*)(intptr_t)framebuffer->GetColourAttachment(), ImVec2{ 800,600 });
ImGui::End();
static float Zoom = 90;
static glm::vec3 Position = glm::vec3(0.0f, 0.0f, 0.0f);
static glm::vec3 Rotation = glm::vec3(0.0f, 0.0f, 0.0f);
ImGui::Begin("Camera");
ImGui::SliderFloat("Zoom", &Zoom, 10, 190);
ImGui::InputFloat3("Position:", &Position[0]);
ImGui::InputFloat3("Rotation:", &Rotation[0]);
ImGui::End();
ImGui::Begin("Scripting");
ImGui::Text("Lua Code");
ImGui::InputTextMultiline("##", code, 255);
bool runCode = ImGui::Button("Run");
ImGui::End();
ImGui::Begin("Scene Explorer");
ImGui::End();
}
/*
* Runs every frame
* - Meant for game logic ( non-physics related)
*/
void Update()
{
// glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->GetId());
renderer.Render(*framebuffer);
// glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
/*
* Runs at the end of the program
* - Meant for cleanup
*/
void Stop()
{
delete framebuffer;
delete MI;
delete shader;
}

View File

@ -1,4 +1,4 @@
project "ImGUI_Opengl3" project "ImGui"
kind "StaticLib" kind "StaticLib"
includedirs { includedirs {

39
Runtime/premake5.lua Normal file
View File

@ -0,0 +1,39 @@
project "Runtime"
kind "ConsoleApp"
buildmessage "Building the runtime ..."
links{
"BarinkEngine"
}
includedirs{
"./../BarinkEngine/src",
-- I'd prefer if didn't need these..
-- We'll figure that out some time later
"./../libs/lua/include",
"./../libs/spdlog/include",
"./../libs/glm",
"./../libs/GorillaAudio/include",
"./../libs/assimp/include",
"./../libs/glad/include",
"./../libs/glfw/include",
"./../libs/tinygltf",
"./../libs/glew/include",
"./../libs/glm",
"./../libs/ImGui",
"./include"
}
libdirs {
'./../build/BarinkEngine/Debug'
}
files {
"./src/*.h",
"./src/*.cpp"
}

6
Runtime/src/main.cpp Normal file
View File

@ -0,0 +1,6 @@
#include <iostream>
int main()
{
std::cout << "Welcome to the runtime!" << std::endl;
}

40
SandboxApp/premake5.lua Normal file
View File

@ -0,0 +1,40 @@
project "SandboxApp"
kind "ConsoleApp"
buildmessage "Building SandboxApp ..."
links{
"BarinkEngine"
}
includedirs{
"./../BarinkEngine/Include",
-- I'd prefer if didn't need these..
-- We'll figure that out some time later
"./../libs/lua/include",
"./../libs/spdlog/include",
"./../libs/glm",
"./../libs/GorillaAudio/include",
"./../libs/assimp/include",
"./../libs/glad/include",
"./../libs/glfw/include",
"./../libs/tinygltf",
"./../libs/glew/include",
"./../libs/glm",
"./../libs/ImGui",
"./include"
}
libdirs {
'./../build/BarinkEngine/Debug'
}
files {
"./include/*.h",
"./src/*.cpp"
}

View File

@ -3,7 +3,7 @@
#include "../../BarinkEngine/src/Scene/SceneNodeTypes.h" #include "../../BarinkEngine/src/Scene/SceneNodeTypes.h"
#include "../../BarinkEngine/src/AssetManager/ModelImporter.h" #include "../../BarinkEngine/src/AssetManager/ModelImporter.h"
#include "../../BarinkEngine/src/Graphics/Framebuffer.h" #include "../../BarinkEngine/src/Graphics/Framebuffer.h"
#include "imgui.h" #include <imgui.h>
#include "GUI.h" #include "GUI.h"
#include "Util.h" #include "Util.h"
@ -14,11 +14,10 @@ Shader* shader;
char* code = new char[254]; char* code = new char[254];
const std::string vertexShaderSource = "../build/SandboxApplication/Debug/test.vs"; const std::string vertexShaderSource = "build/Debug/test.vs";
const std::string fragmentShaderSource = "../build/SandboxApplication/Debug/test.fs"; const std::string fragmentShaderSource = "build/Debug/test.fs";
BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter(); BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter();
Framebuffer* framebuffer;
Scene* Level1; Scene* Level1;
BarinkEngine::SceneObject* cube; BarinkEngine::SceneObject* cube;
/* /*
@ -26,8 +25,6 @@ BarinkEngine::SceneObject* cube;
* - USe to initialize the game/sandbox/demo * - USe to initialize the game/sandbox/demo
*/ */
void Start() { void Start() {
// Build a basic test scene
// NOTE: This will later be done through an editor
// Create a level and load it as the current level // Create a level and load it as the current level
std::string levelName("Test Level"); std::string levelName("Test Level");
@ -38,7 +35,7 @@ void Start() {
// Create a cube node // Create a cube node
cube = MI->Import("../build/SandboxApplication/Debug/Models/cube.obj"); cube = MI->Import("build/Debug/Models/cube.obj");
cube->renderable->material = new Material(*shader); cube->renderable->material = new Material(*shader);
cube->renderable->material->Color = glm::vec3(1.0f, 0.0f, 0.0f); cube->renderable->material->Color = glm::vec3(1.0f, 0.0f, 0.0f);
@ -49,9 +46,7 @@ void Start() {
Level1->GetRoot().addChild(*cube); Level1->GetRoot().addChild(*cube);
memset(code, '\0', 254); memset(code, '\0', 254);
framebuffer = new Framebuffer();
std::cout << "Colour attachment id; "<< framebuffer->GetColourAttachment() << std::endl;
// TODO: Move to runtime/ Engine // TODO: Move to runtime/ Engine
// NOTE: Submits should later be done through walking the sceneTree // NOTE: Submits should later be done through walking the sceneTree
@ -67,14 +62,6 @@ void ImmediateGraphicsDraw()
{ {
// Show internal BarinkEngine stats // Show internal BarinkEngine stats
ShowStats(); ShowStats();
SceneView(*framebuffer);
// Show different tooling for this specific sandbox
CameraTool();
ScriptingTool(code);
SceneExplorer( "Scene Explorer");
} }
/* /*
@ -83,11 +70,9 @@ void ImmediateGraphicsDraw()
*/ */
void Update() void Update()
{ {
// glBindFramebuffer(GL_FRAMEBUFFER, framebuffer->GetId());
renderer.Render(*framebuffer); renderer.Render();
// glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
/* /*
@ -96,7 +81,6 @@ void Update()
*/ */
void Stop() void Stop()
{ {
delete framebuffer;
delete MI; delete MI;
delete shader; delete shader;
} }

View File

@ -3,12 +3,13 @@ workspace "BarinkEngine"
language "C++" language "C++"
cppdialect "C++17" cppdialect "C++17"
targetdir "./build/%{prj.name}/%{cfg.buildcfg}"
objdir "./intermediates/%{prj.name}/%{cfg.buildcfg}"
architecture "x86_64" architecture "x86_64"
targetdir "./%{prj.name}/build/%{cfg.buildcfg}"
objdir "./%{prj.name}/intermediates/%{cfg.buildcfg}"
startproject("SandboxApp")
filter "configurations:Debug" filter "configurations:Debug"
defines {"DEBUG"} defines {"DEBUG"}
symbols "On" symbols "On"
@ -17,6 +18,8 @@ workspace "BarinkEngine"
defines {"NDEBUG"} defines {"NDEBUG"}
optimize "On" optimize "On"
include("./SandboxApplication")
include("./BarinkEngine") include("./BarinkEngine")
include("./Runtime")
include ("./Editor")
include("./SandboxApp")