Port PointLight shader
This commit is contained in:
parent
cee48821d3
commit
547018f0ab
@ -1,6 +1,5 @@
|
|||||||
uniform sampler2D ntex;
|
uniform sampler2D ntex;
|
||||||
uniform sampler2D dtex;
|
uniform sampler2D dtex;
|
||||||
uniform float spec;
|
|
||||||
|
|
||||||
flat in vec3 center;
|
flat in vec3 center;
|
||||||
flat in float energy;
|
flat in float energy;
|
||||||
|
@ -45,17 +45,14 @@ static void renderPointLights(unsigned count)
|
|||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
|
|
||||||
glUseProgram(LightShader::PointLightShader::Program);
|
glUseProgram(LightShader::PointLightShader::getInstance()->Program);
|
||||||
glBindVertexArray(LightShader::PointLightShader::vao);
|
glBindVertexArray(LightShader::PointLightShader::getInstance()->vao);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, LightShader::PointLightShader::vbo);
|
glBindBuffer(GL_ARRAY_BUFFER, LightShader::PointLightShader::getInstance()->vbo);
|
||||||
glBufferSubData(GL_ARRAY_BUFFER, 0, count * sizeof(LightShader::PointLightInfo), PointLightsInfo);
|
glBufferSubData(GL_ARRAY_BUFFER, 0, count * sizeof(LightShader::PointLightInfo), PointLightsInfo);
|
||||||
|
|
||||||
setTexture(0, irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), GL_NEAREST, GL_NEAREST);
|
setTexture(0, irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), GL_NEAREST, GL_NEAREST);
|
||||||
setTexture(1, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
setTexture(1, irr_driver->getDepthStencilTexture(), GL_NEAREST, GL_NEAREST);
|
||||||
LightShader::PointLightShader
|
LightShader::PointLightShader::getInstance()->setUniforms();
|
||||||
::setUniforms(core::vector2df(float(UserConfigParams::m_width),
|
|
||||||
float(UserConfigParams::m_height)),
|
|
||||||
200, 0, 1);
|
|
||||||
|
|
||||||
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, count);
|
glDrawArraysInstanced(GL_TRIANGLE_STRIP, 0, 4, count);
|
||||||
}
|
}
|
||||||
|
@ -408,7 +408,6 @@ void Shaders::loadShaders()
|
|||||||
initShadowVPMUBO();
|
initShadowVPMUBO();
|
||||||
initParticleQuadVBO();
|
initParticleQuadVBO();
|
||||||
MeshShader::BubbleShader::init();
|
MeshShader::BubbleShader::init();
|
||||||
LightShader::PointLightShader::init();
|
|
||||||
MeshShader::SkyboxShader::init();
|
MeshShader::SkyboxShader::init();
|
||||||
MeshShader::ViewFrustrumShader::init();
|
MeshShader::ViewFrustrumShader::init();
|
||||||
UtilShader::ColoredLine::init();
|
UtilShader::ColoredLine::init();
|
||||||
@ -1421,19 +1420,7 @@ namespace MeshShader
|
|||||||
|
|
||||||
namespace LightShader
|
namespace LightShader
|
||||||
{
|
{
|
||||||
|
PointLightShader::PointLightShader()
|
||||||
GLuint PointLightShader::Program;
|
|
||||||
GLuint PointLightShader::attrib_Position;
|
|
||||||
GLuint PointLightShader::attrib_Color;
|
|
||||||
GLuint PointLightShader::attrib_Energy;
|
|
||||||
GLuint PointLightShader::attrib_Radius;
|
|
||||||
GLuint PointLightShader::uniform_ntex;
|
|
||||||
GLuint PointLightShader::uniform_dtex;
|
|
||||||
GLuint PointLightShader::uniform_spec;
|
|
||||||
GLuint PointLightShader::vbo;
|
|
||||||
GLuint PointLightShader::vao;
|
|
||||||
|
|
||||||
void PointLightShader::init()
|
|
||||||
{
|
{
|
||||||
Program = LoadProgram(
|
Program = LoadProgram(
|
||||||
GL_VERTEX_SHADER, file_manager->getAsset("shaders/pointlight.vert").c_str(),
|
GL_VERTEX_SHADER, file_manager->getAsset("shaders/pointlight.vert").c_str(),
|
||||||
@ -1441,13 +1428,9 @@ namespace LightShader
|
|||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getSpecular.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(),
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(),
|
||||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/pointlight.frag").c_str());
|
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/pointlight.frag").c_str());
|
||||||
attrib_Position = glGetAttribLocation(Program, "Position");
|
|
||||||
attrib_Color = glGetAttribLocation(Program, "Color");
|
AssignUniforms();
|
||||||
attrib_Energy = glGetAttribLocation(Program, "Energy");
|
AssignSamplerNames(Program, 0, "ntex", 1, "dtex");
|
||||||
attrib_Radius = glGetAttribLocation(Program, "Radius");
|
|
||||||
uniform_ntex = glGetUniformLocation(Program, "ntex");
|
|
||||||
uniform_dtex = glGetUniformLocation(Program, "dtex");
|
|
||||||
uniform_spec = glGetUniformLocation(Program, "spec");
|
|
||||||
|
|
||||||
glGenVertexArrays(1, &vao);
|
glGenVertexArrays(1, &vao);
|
||||||
glBindVertexArray(vao);
|
glBindVertexArray(vao);
|
||||||
@ -1456,6 +1439,11 @@ namespace LightShader
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
||||||
glBufferData(GL_ARRAY_BUFFER, MAXLIGHT * sizeof(PointLightInfo), 0, GL_DYNAMIC_DRAW);
|
glBufferData(GL_ARRAY_BUFFER, MAXLIGHT * sizeof(PointLightInfo), 0, GL_DYNAMIC_DRAW);
|
||||||
|
|
||||||
|
GLuint attrib_Position = glGetAttribLocation(Program, "Position");
|
||||||
|
GLuint attrib_Color = glGetAttribLocation(Program, "Color");
|
||||||
|
GLuint attrib_Energy = glGetAttribLocation(Program, "Energy");
|
||||||
|
GLuint attrib_Radius = glGetAttribLocation(Program, "Radius");
|
||||||
|
|
||||||
glEnableVertexAttribArray(attrib_Position);
|
glEnableVertexAttribArray(attrib_Position);
|
||||||
glVertexAttribPointer(attrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(PointLightInfo), 0);
|
glVertexAttribPointer(attrib_Position, 3, GL_FLOAT, GL_FALSE, sizeof(PointLightInfo), 0);
|
||||||
glEnableVertexAttribArray(attrib_Energy);
|
glEnableVertexAttribArray(attrib_Energy);
|
||||||
@ -1470,17 +1458,6 @@ namespace LightShader
|
|||||||
glVertexAttribDivisor(attrib_Color, 1);
|
glVertexAttribDivisor(attrib_Color, 1);
|
||||||
glVertexAttribDivisor(attrib_Radius, 1);
|
glVertexAttribDivisor(attrib_Radius, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PointLightShader::setUniforms(const core::vector2df &screen, unsigned spec, unsigned TU_ntex, unsigned TU_dtex)
|
|
||||||
{
|
|
||||||
if (irr_driver->needUBOWorkaround())
|
|
||||||
bypassUBO(Program);
|
|
||||||
glUniform1f(uniform_spec, 200);
|
|
||||||
|
|
||||||
glUniform1i(uniform_ntex, TU_ntex);
|
|
||||||
glUniform1i(uniform_dtex, TU_dtex);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -691,17 +691,12 @@ namespace LightShader
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
class PointLightShader
|
class PointLightShader : public ShaderHelperSingleton<PointLightShader>, TextureRead<Nearest_Filtered, Nearest_Filtered>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
static GLuint Program;
|
GLuint vbo;
|
||||||
static GLuint attrib_Position, attrib_Energy, attrib_Color, attrib_Radius;
|
GLuint vao;
|
||||||
static GLuint uniform_ntex, uniform_dtex, uniform_spec;
|
PointLightShader();
|
||||||
static GLuint vbo;
|
|
||||||
static GLuint vao;
|
|
||||||
|
|
||||||
static void init();
|
|
||||||
static void setUniforms(const core::vector2df &screen, unsigned spec, unsigned TU_ntex, unsigned TU_dtex);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user