Added backbone to the BGFX renderer, with comments on what to do next.

This commit is contained in:
tleety
2015-09-09 16:00:18 +02:00
parent 17a00fef85
commit 3ab3286413
4 changed files with 151 additions and 55 deletions
+18 -53
View File
@@ -7,6 +7,7 @@
#include "Util/Rectangle.h"
#include "Core/Camera.h"
#include "Core/RenderQueue.h"
#include "Core/ShaderProgram.h"
namespace dd
{
@@ -33,59 +34,8 @@ public:
}
}
void Initialize()
{
// Initialize GLFW
if (!glfwInit()) {
LOG_ERROR("GLFW: Initialization failed");
exit(EXIT_FAILURE);
}
// Create a window
GLFWmonitor* monitor = nullptr;
if (m_Fullscreen) {
monitor = glfwGetPrimaryMonitor();
}
glfwWindowHint(GLFW_SAMPLES, 8);
m_Window = glfwCreateWindow(m_Resolution.Width, m_Resolution.Height, "daydream", monitor, nullptr);
if (!m_Window) {
LOG_ERROR("GLFW: Failed to create window");
exit(EXIT_FAILURE);
}
//glfwMakeContextCurrent(m_Window);
// Initialize GLEW
// if (glewInit() != GLEW_OK) {
// LOG_ERROR("GLEW: Initialization failed");
// exit(EXIT_FAILURE);
// }
//LOG_ERROR("STUFF");
// Initialize bgfx
bgfx::glfwSetWindow(m_Window);
bgfx::init(bgfx::RendererType::OpenGL, BGFX_PCI_ID_NONE, 0, nullptr, nullptr);
bgfx::reset(m_Resolution.Width, m_Resolution.Height, BGFX_RESET_NONE);
bgfx::setDebug(BGFX_DEBUG_TEXT);
bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
std::stringstream ss;
ss << bgfx::getRendererName(bgfx::getRendererType());
#ifdef DEBUG
ss << " DEBUG";
#endif
LOG_INFO(ss.str().c_str());
glfwSetWindowTitle(m_Window, ss.str().c_str());
}
void Draw(RenderQueueCollection& rq)
{
bgfx::touch(0);
bgfx::dbgTextClear();
bgfx::dbgTextPrintf(0, 1, 0x4f, "daydream");
bgfx::frame();
}
void Initialize();
void Draw(RenderQueueCollection& rq);
private:
Rectangle m_Resolution = Rectangle(1280, 720);
@@ -95,6 +45,21 @@ private:
const dd::Camera* m_Camera = nullptr;
GLFWwindow* m_Window = nullptr;
void DrawForward();
void DrawDeferred(RenderQueue &objects, RenderQueue &lights);
void DrawScene(RenderQueue &objects, ShaderProgram &program);
void DrawLightScene(RenderQueue &objects, ShaderProgram &program);
void LoadShaders();
void CreateBuffers();
void debugKeys();
ShaderProgram* m_spDeferred1;
ShaderProgram* m_spDeferred2;
ShaderProgram* m_spDeferred3;
ShaderProgram* m_spForward;
ShaderProgram* m_spScreen;
//TODO: Shaders, CreateBuffers, Draw forward, drawdeferred, drawscene, drawlights.
};
}
Regular → Executable
-2
View File
@@ -30,8 +30,6 @@ namespace dd
class Renderer
{
public:
//Render();
GLFWwindow* Window() const { return m_Window; }
Rectangle Resolution() const { return m_Resolution; }
void SetResolution(const Rectangle& resolution) { m_Resolution = resolution; }
Regular → Executable
+131
View File
@@ -1,3 +1,134 @@
#include "PrecompiledHeader.h"
#include "Core/BGFXRenderer.h"
void dd::BGFXRenderer::Initialize() {
// Initialize GLFW
if (!glfwInit()) {
LOG_ERROR("GLFW: Initialization failed");
exit(EXIT_FAILURE);
}
// Create a window
GLFWmonitor* monitor = nullptr;
if (m_Fullscreen) {
monitor = glfwGetPrimaryMonitor();
}
glfwWindowHint(GLFW_SAMPLES, 8);
m_Window = glfwCreateWindow(m_Resolution.Width, m_Resolution.Height, "daydream", monitor, nullptr);
if (!m_Window) {
LOG_ERROR("GLFW: Failed to create window");
exit(EXIT_FAILURE);
}
//intiialize BGFX
bgfx::glfwSetWindow(m_Window);
bgfx::init();
bgfx::reset(m_Resolution.Width, m_Resolution.Height, BGFX_RESET_NONE);
//Enable debug text
bgfx::setDebug(BGFX_DEBUG_TEXT);
//Set view 0 clear state
bgfx::setViewClear(0, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
std::stringstream ss;
ss << bgfx::getRendererName(bgfx::getRendererType());
#ifdef DEBUG
ss << " DEBUG";
#endif
LOG_INFO(ss.str().c_str());
glfwSetWindowTitle(m_Window, ss.str().c_str());
//LoadShaders
//CreateBuffers
}
void dd::BGFXRenderer::Draw(RenderQueueCollection& rq) {
//TODO: Fix this shit.
//Draw the different passes.
DrawDeferred(rq.Deferred, rq.Lights);
//DrawForward(); //For alpha things
//Settings for the last combination of images.
//Clear
//bind textures
//Draw array
//Swapbuffer?
//DEbugKeys.
// bgfx::touch(0);
// bgfx::dbgTextClear();
// bgfx::dbgTextPrintf(0, 1, 0x4f, "DayDream");
// bgfx::frame();
}
void dd::BGFXRenderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights) {
//Pass 1: Fill g-buffers
//Make sure the settings are correct, like Backface culling and depthmask and shit.
//Clear
//Bind The first shaders with the remade shaderprogram class.
//Draw the scene by calling DrawScene() and putting in objects and the shaderprogram used.
//Pass 2: Lighting
//Make sure the settings are correct, like backface culling and depthmask and shit.
//clear
//bind shaders with remade shaderProgram class.
//Draw by calling DrawLightSpheres() and sending in the Renderqueue with lights.
//Pass 3: Combine into final image.
//Make sure settings are correct.
//clear
//Bind shaderprograms
//Bind light and gbuffer textures to uniforms so the shader can use them.
}
void dd::BGFXRenderer::DrawScene(RenderQueue &objects, ShaderProgram &program) {
//Init shaderprogram
//Fix the camera matrises
//Loop throught jobs and modeljobs, make sure the uniform/texture variables are set.
}
void dd::BGFXRenderer::DrawLightScene(RenderQueue &objects, ShaderProgram &program) {
//Init shaderProgram
//Bind textures
//Fix matrises
//Loop through the jobs and draw them with the right uniforms and shit.
}
void dd::BGFXRenderer::debugKeys() {
//TODO: Insert keys to debug rendering.
}
void dd::BGFXRenderer::LoadShaders() {
//Remake shaderprogram so the loadshader function can work with bgfx
}
void dd::BGFXRenderer::CreateBuffers() {
//Quad and sphere for what?
//Depth buffer
//Generate G-Buffer(first pass) textures
//Create first pass frame buffer
//Generate Lighting(second pass) texture
//Generate second pass framebuffer
//Generate final texture
//Generate third pass buffer
}
Regular → Executable
+2
View File
@@ -256,6 +256,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights)
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred2);
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
m_spDeferred2->Bind();
DrawLightSpheres(lights);
@@ -265,6 +266,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights)
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
glClearColor(0, 0, 0, 1);
glClear(GL_COLOR_BUFFER_BIT);
m_spDeferred3->Bind();
glUniform3fv(glGetUniformLocation(*m_spDeferred3, "La"), 1, glm::value_ptr(glm::vec3(0.3f)));
glActiveTexture(GL_TEXTURE0);