1
0
Fork 0

Graphics/BatchRenderer2D: use GfxDriver/ShaderProgram instead of Graphics/ShaderProgram

This commit is contained in:
Henrik Hautakoski 2022-09-18 13:54:32 +02:00
parent cc1f287a3a
commit 9bea188686
2 changed files with 26 additions and 21 deletions

View file

@ -67,8 +67,8 @@ protected :
unsigned short m_size; unsigned short m_size;
ShaderProgram m_textShader; ShaderProgram* m_textShader;
ShaderProgram m_spriteShader; ShaderProgram* m_spriteShader;
}; };
} // namespace } // namespace

View file

@ -2,10 +2,10 @@
#include <Spectre/System/Log.h> #include <Spectre/System/Log.h>
#include <Spectre/Graphics/Renderable.h> #include <Spectre/Graphics/Renderable.h>
#include <Spectre/Graphics/RenderState.h> #include <Spectre/Graphics/RenderState.h>
#include <Spectre/Graphics/ShaderProgram.h>
#include <Spectre/Graphics/Texture.h> #include <Spectre/Graphics/Texture.h>
#include <Spectre/Graphics/BatchRenderer2D.h> #include <Spectre/Graphics/BatchRenderer2D.h>
#include <Spectre/Math/Math.h> #include <Spectre/Math/Math.h>
#include <GfxDriver/OpenGL/OpenGLShaderProgram.h>
#include <Graphics/GL/gl.h> #include <Graphics/GL/gl.h>
#include <algorithm> #include <algorithm>
@ -49,22 +49,24 @@ BatchRenderer2D::BatchRenderer2D()
glEnableVertexAttribArray(VertexAttribTexCoord0); glEnableVertexAttribArray(VertexAttribTexCoord0);
glVertexAttribPointer(VertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2D), (void*)24); glVertexAttribPointer(VertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex2D), (void*)24);
m_textShader.create(); m_textShader = new OpenGLShaderProgram();
if (!m_textShader.loadFromFile("assets/shaders/text.shader.glsl")) {
std::cout << "Failed to load shader: " << m_textShader.getLastError() << std::endl; if (!m_textShader->loadFromFile("assets/shaders/text.shader.glsl")) {
std::cout << "Failed to load shader: " << m_textShader->getLastError() << std::endl;
} }
if (!m_textShader.link()) { if (!m_textShader->link()) {
std::cout << "Failed to link shader: " << m_textShader.getLastError() << std::endl; std::cout << "Failed to link shader: " << m_textShader->getLastError() << std::endl;
} }
m_spriteShader.create(); m_spriteShader = new OpenGLShaderProgram();
if (!m_spriteShader.loadFromFile("assets/shaders/standard.shader.glsl")) {
std::cout << "Failed to load shader: " << m_spriteShader.getLastError() << std::endl; if (!m_spriteShader->loadFromFile("assets/shaders/standard.shader.glsl")) {
std::cout << "Failed to load shader: " << m_spriteShader->getLastError() << std::endl;
} }
if (!m_spriteShader.link()) { if (!m_spriteShader->link()) {
std::cout << "Failed to link shader: " << m_spriteShader.getLastError() << std::endl; std::cout << "Failed to link shader: " << m_spriteShader->getLastError() << std::endl;
} }
} }
@ -73,6 +75,9 @@ BatchRenderer2D::~BatchRenderer2D()
glDeleteBuffers(1, &m_VBO); glDeleteBuffers(1, &m_VBO);
glDeleteBuffers(1, &m_IBO); glDeleteBuffers(1, &m_IBO);
glDeleteVertexArrays(1, &m_VAO); glDeleteVertexArrays(1, &m_VAO);
delete m_textShader;
delete m_spriteShader;
} }
void BatchRenderer2D::setBatchSize(unsigned short size) void BatchRenderer2D::setBatchSize(unsigned short size)
@ -146,13 +151,13 @@ void BatchRenderer2D::render()
glBindVertexArray(m_VAO); glBindVertexArray(m_VAO);
// Set shader uniforms. // Set shader uniforms.
m_textShader.enable(); m_textShader->enable();
m_textShader.setUniform("u_MVP", MVP); m_textShader->setUniform("u_MVP", MVP);
m_textShader.disable(); m_textShader->disable();
m_spriteShader.enable(); m_spriteShader->enable();
m_spriteShader.setUniform("u_MVP", MVP); m_spriteShader->setUniform("u_MVP", MVP);
m_spriteShader.disable(); m_spriteShader->disable();
prepareQueue(); prepareQueue();
@ -242,9 +247,9 @@ void BatchRenderer2D::drawBatch(Batch& batch)
glEnable(GL_BLEND); glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
shader = &m_textShader; shader = m_textShader;
} else { } else {
shader = &m_spriteShader; shader = m_spriteShader;
} }
// enable shader. // enable shader.