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;
ShaderProgram m_textShader;
ShaderProgram m_spriteShader;
ShaderProgram* m_textShader;
ShaderProgram* m_spriteShader;
};
} // namespace

View file

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