diff --git a/BarinkEngine/Include/BarinkEngine.h b/BarinkEngine/Include/BarinkEngine.h index 4f520c6..701a187 100644 --- a/BarinkEngine/Include/BarinkEngine.h +++ b/BarinkEngine/Include/BarinkEngine.h @@ -16,6 +16,8 @@ #include "Scene.h" #include "PerfCounter.h" + +extern BarinkEngine::Renderer renderer; extern void Start(); extern void Update(); extern void ImmediateGraphicsDraw(); diff --git a/BarinkEngine/Include/Graphics/GPUBucket.h b/BarinkEngine/Include/Graphics/GPUBucket.h index 74f6840..e5abdd9 100644 --- a/BarinkEngine/Include/Graphics/GPUBucket.h +++ b/BarinkEngine/Include/Graphics/GPUBucket.h @@ -3,6 +3,7 @@ #include "Buffer.h" #include "Mesh.h" #include "Material.h" +#include namespace BarinkEngine { @@ -17,6 +18,7 @@ namespace BarinkEngine { GpuBuffer vertexBuffer; GpuBuffer elementBuffer; VertexArray vertexarray; + const Mesh* mesh; const Material* material; diff --git a/BarinkEngine/src/BarinkEngine.cpp b/BarinkEngine/src/BarinkEngine.cpp index f9b5580..e09deae 100644 --- a/BarinkEngine/src/BarinkEngine.cpp +++ b/BarinkEngine/src/BarinkEngine.cpp @@ -1,7 +1,7 @@ #include "BarinkEngine.h" EngineStatistics* ES; - +BarinkEngine::Renderer renderer; int main(int argc, char* argv[]) { // Setup performance sampler PerfomanceSamplerInit(); @@ -10,7 +10,7 @@ int main(int argc, char* argv[]) { // Startup services BarinkWindow MainWindow = BarinkWindow(800, 600); - BarinkEngine::Renderer renderer = BarinkEngine::Renderer(); + renderer = BarinkEngine::Renderer(); InputSystem = BarinkEngine::InputManager(); InputSystem.attach(&MainWindow); @@ -44,9 +44,9 @@ int main(int argc, char* argv[]) { GUISystem.Render(); - - MainWindow.SwapBuffers(); + + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } diff --git a/BarinkEngine/src/Graphics/GPUBucket.cpp b/BarinkEngine/src/Graphics/GPUBucket.cpp index 3f0a725..8c5c689 100644 --- a/BarinkEngine/src/Graphics/GPUBucket.cpp +++ b/BarinkEngine/src/Graphics/GPUBucket.cpp @@ -19,15 +19,14 @@ void BarinkEngine::GPU_Bucket::Upload(const Mesh& renderable) { vertexBuffer.Bind(false); vertexBuffer.setBufferData((void*)&renderable.vertices[0], renderable.vertices.size() * sizeof(BarinkEngine::Vertex), false); - if (renderable.elements.empty() == false) { - elementBuffer.createBuffer(); - elementBuffer.Bind(true); - elementBuffer.setBufferData((void*)&renderable.elements[0], renderable.elements.size() * sizeof(unsigned int), true); - } + elementBuffer.createBuffer(); + elementBuffer.Bind(true); + elementBuffer.setBufferData((void*)&renderable.elements[0], renderable.elements.size() * sizeof(unsigned int), true); vertexarray.AttachAttribute(0, 3, sizeof(Vertex)); - glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(BarinkEngine::Vertex), (void*)offsetof(BarinkEngine::Vertex, vertices)); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(BarinkEngine::Vertex), (void*)0); + glEnableVertexAttribArray(0); glEnableVertexAttribArray(1); vertexBuffer.Unbind(false); diff --git a/BarinkEngine/src/Graphics/ModelImporter.cpp b/BarinkEngine/src/Graphics/ModelImporter.cpp index e693933..6b16cf2 100644 --- a/BarinkEngine/src/Graphics/ModelImporter.cpp +++ b/BarinkEngine/src/Graphics/ModelImporter.cpp @@ -14,10 +14,9 @@ BarinkEngine::SceneObject* BarinkEngine::ModelImporter::Import(const std::string std::cout << "[DEBUG]: Loaded "<< meshes.size() << " meshes!" << std::endl; - // create a renderable (per mesh ?? ) root->renderable = new Renderable(); - root->renderable->mesh = &(meshes[0]); + root->renderable->mesh = new Mesh(meshes[0]); return root; diff --git a/BarinkEngine/src/Graphics/Renderer.cpp b/BarinkEngine/src/Graphics/Renderer.cpp index 8498f1b..ca640f3 100644 --- a/BarinkEngine/src/Graphics/Renderer.cpp +++ b/BarinkEngine/src/Graphics/Renderer.cpp @@ -1,12 +1,8 @@ #include "Graphics/Renderer.h" - BarinkEngine::Renderer::Renderer() { models = std::vector(); - - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - } BarinkEngine::Renderer::~Renderer() @@ -25,38 +21,46 @@ BarinkEngine::Renderer::~Renderer() void BarinkEngine::Renderer::Render() { // This creation of the projection and camera is somewhat wastefull - Camera cam = Camera(glm::vec3(0.0f, 1.5f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), 90.0f); + Camera cam = Camera(glm::vec3(8.0f, 0.0f, 0.0f), glm::vec3(0.0f, 0.0f, 0.0f), 90.0f); glm::mat4 projection = glm::perspective(glm::radians(cam.Zoom), (800.0f / 600.0f), 0.001f, 100.0f); for (auto model : models) { - // Push matrices etc .... - model->vertexarray.Bind(); - - model->elementBuffer.Bind(true); + // Push matrices etc .... + model->vertexarray.Bind(); + model->elementBuffer.Bind(true); - if (model->material == nullptr) { - std::cout << "No material attached!" << std::endl; - } - else { - model->material->Apply(); - } - - // Update perf counters - ES->verts = model->mesh->vertices.size(); - ES->DC++; - - glDrawElements( GL_TRIANGLES, - static_cast(model->mesh->elements.size()), - GL_UNSIGNED_INT, - NULL - ); - model->vertexarray.Unbind(); + + if (model->material == nullptr) { + std::cout << "No material attached!" << std::endl; + } + else { + model->material->shader.Use(); + model->material->Apply(); + + model->material->shader.setUniformVec3("Color", model->material->Color); + model->material->shader.setUniformMat4("M", glm::mat4()); + 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(model->mesh->elements.size()), + GL_UNSIGNED_INT, + NULL + ); + model->vertexarray.Unbind(); + + } - - + } @@ -72,6 +76,6 @@ void BarinkEngine::Renderer::Submit(Renderable* model) bucket->Upload(*model->mesh); - models.push_back(bucket); // Maybe push a GPU packet or something instead + models.push_back(bucket); } diff --git a/SandboxApplication/src/Sandbox.cpp b/SandboxApplication/src/Sandbox.cpp index accf8ef..c055f91 100644 --- a/SandboxApplication/src/Sandbox.cpp +++ b/SandboxApplication/src/Sandbox.cpp @@ -20,7 +20,6 @@ const std::string fragmentShaderSource = "../build/SandboxApplication/Debug/test BarinkEngine::ModelImporter* MI = new BarinkEngine::ModelImporter(); Scene* Level1; -BarinkEngine::Renderer* renderer; BarinkEngine::SceneObject* cube; /* * Runs once at startup @@ -51,9 +50,8 @@ void Start() { memset(code, '\0', 254); // TODO: Move to runtime/ Engine - renderer = new BarinkEngine::Renderer(); // NOTE: Submits should later be done through walking the sceneTree - renderer->Submit(cube->renderable); + renderer.Submit(cube->renderable); } @@ -67,16 +65,16 @@ void ImmediateGraphicsDraw() { // Show ImGui demo such that I can easily look // at possible GUI elements to use - ImGui::ShowDemoWindow(); + // ImGui::ShowDemoWindow(); // Show internal BarinkEngine stats ShowStats(); // Show different tooling for this specific sandbox // CameraTool(cam); - ScriptingTool(code); + //ScriptingTool(code); - SceneExplorer(*Level1, "Scene Explorer"); + //SceneExplorer(*Level1, "Scene Explorer"); } @@ -86,8 +84,6 @@ void ImmediateGraphicsDraw() { */ void Update() { - - renderer->Render(); } @@ -97,6 +93,5 @@ void Update() */ void Stop() { delete MI; - delete renderer; delete shader; } \ No newline at end of file