Port Bloom shaders.

This commit is contained in:
Vlj 2014-08-12 23:45:56 +02:00
parent d8e4a352ba
commit c3cead9f9c
3 changed files with 28 additions and 51 deletions

View File

@ -207,11 +207,11 @@ void PostProcessing::update(float dt)
static
void renderBloom(GLuint in)
{
glUseProgram(FullScreenShader::BloomShader::Program);
glBindVertexArray(FullScreenShader::BloomShader::vao);
glUseProgram(FullScreenShader::BloomShader::getInstance()->Program);
glBindVertexArray(FullScreenShader::BloomShader::getInstance()->vao);
setTexture(0, in, GL_NEAREST, GL_NEAREST);
FullScreenShader::BloomShader::setUniforms(0);
setTexture(FullScreenShader::BloomShader::getInstance()->TU_tex, in, GL_NEAREST, GL_NEAREST);
FullScreenShader::BloomShader::getInstance()->setUniforms();
glDrawArrays(GL_TRIANGLES, 0, 3);
}
@ -814,12 +814,12 @@ FrameBuffer *PostProcessing::render(scene::ICameraSceneNode * const camnode, boo
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
glBlendEquation(GL_FUNC_ADD);
setTexture(0, irr_driver->getRenderTargetTexture(RTT_BLOOM_128), GL_LINEAR, GL_LINEAR);
setTexture(1, irr_driver->getRenderTargetTexture(RTT_BLOOM_256), GL_LINEAR, GL_LINEAR);
setTexture(2, irr_driver->getRenderTargetTexture(RTT_BLOOM_512), GL_LINEAR, GL_LINEAR);
glUseProgram(FullScreenShader::BloomBlendShader::Program);
FullScreenShader::BloomBlendShader::setUniforms(0, 1, 2);
glBindVertexArray(FullScreenShader::BloomBlendShader::vao);
setTexture(FullScreenShader::BloomBlendShader::getInstance()->TU_tex_128, irr_driver->getRenderTargetTexture(RTT_BLOOM_128), GL_LINEAR, GL_LINEAR);
setTexture(FullScreenShader::BloomBlendShader::getInstance()->TU_tex_256, irr_driver->getRenderTargetTexture(RTT_BLOOM_256), GL_LINEAR, GL_LINEAR);
setTexture(FullScreenShader::BloomBlendShader::getInstance()->TU_tex_512, irr_driver->getRenderTargetTexture(RTT_BLOOM_512), GL_LINEAR, GL_LINEAR);
glUseProgram(FullScreenShader::BloomBlendShader::getInstance()->Program);
FullScreenShader::BloomBlendShader::getInstance()->setUniforms();
glBindVertexArray(FullScreenShader::BloomBlendShader::getInstance()->vao);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisable(GL_BLEND);

View File

@ -373,8 +373,6 @@ void Shaders::loadShaders()
initCubeVBO();
initFrustrumVBO();
initShadowVPMUBO();
FullScreenShader::BloomBlendShader::init();
FullScreenShader::BloomShader::init();
FullScreenShader::GlowShader::init();
FullScreenShader::PassThroughShader::init();
FullScreenShader::LayerPassThroughShader::init();
@ -1549,48 +1547,31 @@ static GLuint createVAO(GLuint Program)
namespace FullScreenShader
{
GLuint BloomShader::Program;
GLuint BloomShader::uniform_texture;
GLuint BloomShader::vao;
void BloomShader::init()
BloomShader::BloomShader()
{
Program = LoadProgram(
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getCIEXYZ.frag").c_str(),
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bloom.frag").c_str());
uniform_texture = glGetUniformLocation(Program, "tex");
AssignUniforms();
TU_tex = 0;
AssignTextureUnit(Program, TexUnit(TU_tex, "tex"));
vao = createFullScreenVAO(Program);
}
void BloomShader::setUniforms(unsigned TU_tex)
{
glUniform1i(FullScreenShader::BloomShader::uniform_texture, TU_tex);
}
GLuint BloomBlendShader::Program;
GLuint BloomBlendShader::uniform_tex_128;
GLuint BloomBlendShader::uniform_tex_256;
GLuint BloomBlendShader::uniform_tex_512;
GLuint BloomBlendShader::vao;
void BloomBlendShader::init()
BloomBlendShader::BloomBlendShader()
{
Program = LoadProgram(
GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(),
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/bloomblend.frag").c_str());
uniform_tex_128 = glGetUniformLocation(Program, "tex_128");
uniform_tex_256 = glGetUniformLocation(Program, "tex_256");
uniform_tex_512 = glGetUniformLocation(Program, "tex_512");
AssignUniforms();
TU_tex_128 = 0;
TU_tex_256 = 1;
TU_tex_512 = 2;
AssignTextureUnit(Program, TexUnit(TU_tex_128, "tex_128"), TexUnit(TU_tex_256, "tex_256"), TexUnit(TU_tex_512, "tex_512"));
vao = createFullScreenVAO(Program);
}
void BloomBlendShader::setUniforms(unsigned TU_tex_128, unsigned TU_tex_256, unsigned TU_tex_512)
{
glUniform1i(uniform_tex_128, TU_tex_128);
glUniform1i(uniform_tex_256, TU_tex_256);
glUniform1i(uniform_tex_512, TU_tex_512);
}
ToneMapShader::ToneMapShader()
{
Program = LoadProgram(

View File

@ -519,26 +519,22 @@ public:
namespace FullScreenShader
{
class BloomShader
class BloomShader : public ShaderHelperSingleton<BloomShader>
{
public:
static GLuint Program;
static GLuint uniform_texture;
static GLuint vao;
GLuint TU_tex;
GLuint vao;
static void init();
static void setUniforms(unsigned TU_tex);
BloomShader();
};
class BloomBlendShader
class BloomBlendShader : public ShaderHelperSingleton<BloomBlendShader>
{
public:
static GLuint Program;
static GLuint uniform_tex_128, uniform_tex_256, uniform_tex_512;
static GLuint vao;
GLuint TU_tex_128, TU_tex_256, TU_tex_512;
GLuint vao;
static void init();
static void setUniforms(unsigned TU_tex_128, unsigned TU_tex_256, unsigned TU_tex_512);
BloomBlendShader();
};
class ToneMapShader : public ShaderHelperSingleton<ToneMapShader>