Merge branch 'master' of github.com:teamfisk/AgileBreakOut

This commit is contained in:
viktorljung
2015-09-10 21:27:39 +01:00
5 changed files with 101 additions and 49 deletions
Regular → Executable
+69 -39
View File
@@ -25,12 +25,13 @@
#include "Texture.h"
#include "EventBroker.h"
#include "RenderQueue.h"
#include "BGFXRenderer.h"
#include "Renderer.h"
#include "InputManager.h"
//TODO: Remove includes that are only here for the temporary draw solution.
#include "World.h"
#include "CTransform.h"
#include "Rendering/CModel.h"
#include "Rendering/CSprite.h"
#include "CTemplate.h"
#include "Transform/TransformSystem.h"
@@ -42,31 +43,33 @@ class Engine
public:
Engine(int argc, char* argv[])
{
// m_EventBroker = std::make_shared<EventBroker>();
m_EventBroker = std::make_shared<EventBroker>();
m_Renderer = std::make_shared<BGFXRenderer>();
m_Renderer = std::make_shared<Renderer>();
m_Renderer->SetFullscreen(false);
m_Renderer->SetResolution(Rectangle(0, 0, 1280, 720));
m_Renderer->SetResolution(Rectangle(0, 0, 1920, 1080));
m_Renderer->Initialize();
// m_InputManager = std::make_shared<InputManager>(m_Renderer->Window(), m_EventBroker);
//
// m_World = std::make_shared<World>(m_EventBroker);
//
// //TODO: Move this out of engine.h
// m_World->ComponentFactory.Register<Components::Transform>();
// m_World->SystemFactory.Register<Systems::TransformSystem>([this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); });
// m_World->AddSystem<Systems::TransformSystem>();
// m_World->ComponentFactory.Register<Components::Model>();
// m_World->ComponentFactory.Register<Components::Template>();
// m_World->Initialize();
m_InputManager = std::make_shared<InputManager>(m_Renderer->Window(), m_EventBroker);
// auto ent = m_World->CreateEntity();
// std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
// transform->Position = glm::vec3(0.f, 0.f, -10.f);
// std::shared_ptr<Components::Model> model = m_World->AddComponent<Components::Model>(ent);
// model->ModelFile = "Models/Core/UnitSphere.obj";
m_World = std::make_shared<World>(m_EventBroker);
//TODO: Move this out of engine.h
m_World->ComponentFactory.Register<Components::Transform>();
m_World->SystemFactory.Register<Systems::TransformSystem>([this]() { return new Systems::TransformSystem(m_World.get(), m_EventBroker); });
m_World->AddSystem<Systems::TransformSystem>();
m_World->ComponentFactory.Register<Components::Model>();
m_World->ComponentFactory.Register<Components::Sprite>();
m_World->ComponentFactory.Register<Components::Template>();
m_World->Initialize();
{
auto ent = m_World->CreateEntity();
std::shared_ptr<Components::Transform> transform = m_World->AddComponent<Components::Transform>(ent);
transform->Position = glm::vec3(0.f, 0.f, -10.f);
auto sprite = m_World->AddComponent<Components::Sprite>(ent);
sprite->SpriteFile = "Textures/Core/ErrorTexture.png";
}
m_LastTime = glfwGetTime();
}
@@ -79,26 +82,26 @@ public:
double dt = currentTime - m_LastTime;
m_LastTime = currentTime;
// ResourceManager::Update();
//
// // Update input
// m_InputManager->Update(dt);
//
// m_World->Update(dt);
//
// if (glfwGetKey(m_Renderer->Window(), GLFW_KEY_R)) {
// ResourceManager::Reload("Shaders/Deferred/3/Fragment.glsl");
// }
//
// //TODO Fill up the renderQueue with models (Temp fix)
// TEMPAddToRenderQueue();
//
// // Render scene
// //TODO send renderqueue to draw.
ResourceManager::Update();
// Update input
m_InputManager->Update(dt);
m_World->Update(dt);
if (glfwGetKey(m_Renderer->Window(), GLFW_KEY_R)) {
ResourceManager::Reload("Shaders/Deferred/3/Fragment.glsl");
}
//TODO Fill up the renderQueue with models (Temp fix)
TEMPAddToRenderQueue();
// Render scene
//TODO send renderqueue to draw.
m_Renderer->Draw(m_RendererQueue);
// Swap event queues
// m_EventBroker->Clear();
m_EventBroker->Clear();
glfwPollEvents();
}
@@ -141,6 +144,21 @@ public:
EnqueueModel(modelAsset, modelMatrix, modelComponent->Transparent, modelComponent->Color);
}
}
auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity);
if (spriteComponent)
{
auto textureAsset = ResourceManager::Load<Texture>(spriteComponent->SpriteFile);
if (textureAsset)
{
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(absoluteTransform.Orientation).z, glm::vec3(0, 0, -1));
glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position)
* glm::toMat4(orientation2D)
* glm::scale(absoluteTransform.Scale);
EnqueueSprite(textureAsset, modelMatrix, spriteComponent->Color);
}
}
}
m_RendererQueue.Sort();
@@ -167,10 +185,22 @@ public:
}
}
// TODO: Get this out of engine.h
void EnqueueSprite(Texture* texture, glm::mat4 modelMatrix, glm::vec4 color)
{
SpriteJob job;
job.TextureID = texture->ResourceID;
job.Texture = *texture;
job.ModelMatrix = modelMatrix;
job.Color = color;
m_RendererQueue.Forward.Add(job);
}
private:
//std::shared_ptr<ResourceManager> m_ResourceManager;
std::shared_ptr<ResourceManager> m_ResourceManager;
std::shared_ptr<EventBroker> m_EventBroker;
std::shared_ptr<BGFXRenderer> m_Renderer;
std::shared_ptr<Renderer> m_Renderer;
RenderQueueCollection m_RendererQueue;
std::shared_ptr<InputManager> m_InputManager;
std::shared_ptr<World> m_World;
Regular → Executable
+1 -1
View File
@@ -73,7 +73,7 @@ private:
ShaderProgram* m_spForward;
ShaderProgram* m_spScreen;
GLuint m_UnitQuad = 0;
GLuint m_ScreenQuad = 0;
Model* m_UnitSphere = nullptr;
GLuint m_rbDepthBuffer = 0;
Regular → Executable
+26 -7
View File
@@ -98,21 +98,19 @@ void dd::Renderer::LoadShaders()
/*
Forward rendering
*/
m_spForward = ResourceManager::Load<ShaderProgram>("Shaders/Forward/");
m_spForward->Link();
/*
Screen draw
*/
m_spScreen = ResourceManager::Load<ShaderProgram>("Shaders/Screen/");
m_spScreen->Link();
}
void dd::Renderer::CreateBuffers()
{
m_UnitQuad = CreateQuad();
m_ScreenQuad = CreateQuad();
m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");
glGenRenderbuffers(1, &m_rbDepthBuffer);
@@ -222,7 +220,7 @@ void dd::Renderer::Draw(RenderQueueCollection& rq)
m_spScreen->Bind();
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_CurrentScreenBuffer);
glBindVertexArray(m_UnitQuad);
glBindVertexArray(m_ScreenQuad);
glDrawArrays(GL_TRIANGLES, 0, 6);
glfwSwapBuffers(m_Window);
@@ -271,7 +269,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights)
glBindTexture(GL_TEXTURE_2D, m_GDiffuse);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_tLighting);
glBindVertexArray(m_UnitQuad);
glBindVertexArray(m_ScreenQuad);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
@@ -322,6 +320,27 @@ void dd::Renderer::DrawScene(RenderQueue &objects, ShaderProgram &program)
glBindVertexArray(modelJob->VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->ElementBuffer);
glDrawElementsBaseVertex(GL_TRIANGLES, modelJob->EndIndex - modelJob->StartIndex + 1, GL_UNSIGNED_INT, 0, modelJob->StartIndex);
continue;
}
auto spriteJob = std::dynamic_pointer_cast<SpriteJob>(job);
if (spriteJob)
{
glm::mat4 modelMatrix = spriteJob->ModelMatrix;
modelMatrix = modelMatrix * glm::scale(glm::vec3(0.5f));
MVP = PV * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
glUniformMatrix4fv(glGetUniformLocation(shaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(viewMatrix));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, spriteJob->Texture);
glBindVertexArray(m_ScreenQuad);
glDrawArrays(GL_TRIANGLES, 0, 6);
continue;
}
}
}
@@ -396,9 +415,9 @@ GLuint dd::Renderer::CreateQuad()
glBindBuffer(GL_ARRAY_BUFFER, vbo[0]);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, vbo[1]);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 0, 0);
glVertexAttribPointer(4, 2, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(2);
glEnableVertexAttribArray(4);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
+2 -1
View File
@@ -37,6 +37,7 @@ void main()
vec4 LightingTexel = texture(LightingTexture, Input.TextureCoord);
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) * (vec4(LightingTexel.rgb, 0.0) + vec4(LightingTexel.a, LightingTexel.a, LightingTexel.a, 0.0)));
frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel);
//frag_Diffuse = DiffuseTexel * (vec4(La, 0.0) + LightingTexel);
frag_Diffuse = DiffuseTexel;
//frag_Diffuse = vec4(LightingTexel.r, LightingTexel.g, LightingTexel.b, 1.0);
}
+3 -1
View File
@@ -65,8 +65,10 @@ void main()
+ BoneWeights2[3] * Bones[int(BoneIndices2[3])];
}
gl_Position = MVP * boneTransform * vec4(Position, 1.0);
//gl_Position = MVP * boneTransform * vec4(Position, 1.0);
gl_Position = MVP * vec4(Position, 1.0);
//TODO: Make sure that boneTransform works here.
Output.Position = (V * M * boneTransform * vec4(Position, 1.0)).xyz;
Output.Normal = (inverse(transpose(V * M)) * boneTransform * vec4(Normal, 0.0)).xyz;
Output.Tangent = Tangent;