Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4243d84796 | |||
| d92d67c993 | |||
| b9354b173c | |||
| 3ab3286413 |
+24
-53
@@ -7,6 +7,7 @@
|
|||||||
#include "Util/Rectangle.h"
|
#include "Util/Rectangle.h"
|
||||||
#include "Core/Camera.h"
|
#include "Core/Camera.h"
|
||||||
#include "Core/RenderQueue.h"
|
#include "Core/RenderQueue.h"
|
||||||
|
#include "Core/ShaderProgram.h"
|
||||||
|
|
||||||
namespace dd
|
namespace dd
|
||||||
{
|
{
|
||||||
@@ -33,59 +34,8 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Initialize()
|
void Initialize();
|
||||||
{
|
void Draw(RenderQueueCollection& rq);
|
||||||
// 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();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Rectangle m_Resolution = Rectangle(1280, 720);
|
Rectangle m_Resolution = Rectangle(1280, 720);
|
||||||
@@ -95,6 +45,27 @@ private:
|
|||||||
const dd::Camera* m_Camera = nullptr;
|
const dd::Camera* m_Camera = nullptr;
|
||||||
|
|
||||||
GLFWwindow* m_Window = nullptr;
|
GLFWwindow* m_Window = nullptr;
|
||||||
|
|
||||||
|
void DrawForward(RenderQueue &objects);
|
||||||
|
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;
|
||||||
|
|
||||||
|
bgfx::UniformHandle s_diffTexture;
|
||||||
|
bgfx::VertexBufferHandle m_vbh;
|
||||||
|
bgfx::IndexBufferHandle m_ibh;
|
||||||
|
bgfx::ProgramHandle m_spForward;
|
||||||
|
|
||||||
|
//TODO: Shaders, CreateBuffers, Draw forward, drawdeferred, drawscene, drawlights.
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Regular → Executable
-2
@@ -30,8 +30,6 @@ namespace dd
|
|||||||
class Renderer
|
class Renderer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//Render();
|
|
||||||
|
|
||||||
GLFWwindow* Window() const { return m_Window; }
|
GLFWwindow* Window() const { return m_Window; }
|
||||||
Rectangle Resolution() const { return m_Resolution; }
|
Rectangle Resolution() const { return m_Resolution; }
|
||||||
void SetResolution(const Rectangle& resolution) { m_Resolution = resolution; }
|
void SetResolution(const Rectangle& resolution) { m_Resolution = resolution; }
|
||||||
|
|||||||
Regular → Executable
+168
@@ -1,3 +1,171 @@
|
|||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
#include "Core/BGFXRenderer.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(rq.Forward);
|
||||||
|
|
||||||
|
//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::DrawForward(RenderQueue &objects){
|
||||||
|
//set view 0 clear state.
|
||||||
|
bgfx::setViewClear(0, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH, 0x303030ff, 1.0f, 0);
|
||||||
|
|
||||||
|
//loadshaders
|
||||||
|
DrawScene(objects, *m_spForward); //Need to load/set this shader program
|
||||||
|
}
|
||||||
|
|
||||||
|
void dd::BGFXRenderer::DrawScene(RenderQueue &objects, ShaderProgram &program) {
|
||||||
|
|
||||||
|
GLuint shaderProgramHandle = program;
|
||||||
|
|
||||||
|
glm::mat4 viewMatrix = m_Camera->ViewMatrix();
|
||||||
|
glm::mat4 PV = m_Camera->ProjectionMatrix() * viewMatrix;
|
||||||
|
glm::mat4 MVP;
|
||||||
|
|
||||||
|
s_diffTexture = bgfx::createUniform("s_diffTexture", bgfx::UniformType::Int1);
|
||||||
|
m_spForward =
|
||||||
|
|
||||||
|
for (auto &job : objects) {
|
||||||
|
auto spriteJob = std::dynamic_pointer_cast<SpriteJob>(job);
|
||||||
|
if(spriteJob) {
|
||||||
|
glm::mat4 modelMatrix = spriteJob->ModelMatrix;
|
||||||
|
MVP = PV * modelMatrix;
|
||||||
|
|
||||||
|
//Bind uniforms
|
||||||
|
|
||||||
|
|
||||||
|
bgfx::setVertexBuffer(m_vbh);
|
||||||
|
bgfx::setIndexBuffer(m_ibh);
|
||||||
|
|
||||||
|
bgfx::setTexture(0, s_diffTexture, spriteJob->Texture);
|
||||||
|
//BindVertexArray
|
||||||
|
//DrawArrays
|
||||||
|
|
||||||
|
bgfx::submit(0, program);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//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
@@ -256,6 +256,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights)
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred2);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred2);
|
||||||
glClearColor(0, 0, 0, 1);
|
glClearColor(0, 0, 0, 1);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
m_spDeferred2->Bind();
|
m_spDeferred2->Bind();
|
||||||
DrawLightSpheres(lights);
|
DrawLightSpheres(lights);
|
||||||
|
|
||||||
@@ -265,6 +266,7 @@ void dd::Renderer::DrawDeferred(RenderQueue &objects, RenderQueue &lights)
|
|||||||
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
glBindFramebuffer(GL_FRAMEBUFFER, m_fbDeferred3);
|
||||||
glClearColor(0, 0, 0, 1);
|
glClearColor(0, 0, 0, 1);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
|
||||||
m_spDeferred3->Bind();
|
m_spDeferred3->Bind();
|
||||||
glUniform3fv(glGetUniformLocation(*m_spDeferred3, "La"), 1, glm::value_ptr(glm::vec3(0.3f)));
|
glUniform3fv(glGetUniformLocation(*m_spDeferred3, "La"), 1, glm::value_ptr(glm::vec3(0.3f)));
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
|||||||
Executable
+7
@@ -0,0 +1,7 @@
|
|||||||
|
$output v_Position, v_TextureCoord
|
||||||
|
|
||||||
|
SAMPLER2D(DiffuseTexture, 0);
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_FragColor = texture2D(DiffuseTexture, v_TextureCoord);
|
||||||
|
}
|
||||||
Executable
+9
@@ -0,0 +1,9 @@
|
|||||||
|
$input Position, TextureCoord
|
||||||
|
$output v_Position, v_TextureCoord
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = u_modelViewProj * vec4(Position, 1.0);
|
||||||
|
|
||||||
|
v_Position = Position;
|
||||||
|
v_TextureCoord = TextureCoord;
|
||||||
|
}
|
||||||
Executable
+5
@@ -0,0 +1,5 @@
|
|||||||
|
vec2 v_TextureCoord : TEXCOORD0 = vec2(0.0, 0.0);
|
||||||
|
vec3 v_Position : TEXCOORD1 = vec3(0.0, 0.0, 0.0);
|
||||||
|
|
||||||
|
vec3 Position : POSITION;
|
||||||
|
vec2 TextureCoord : TEXCOORD0;
|
||||||
Reference in New Issue
Block a user