PointLight: Use depthbuffer
This commit is contained in:
parent
ac25b2b8b7
commit
5e68334ce9
@ -1,5 +1,6 @@
|
||||
#version 130
|
||||
uniform sampler2D ntex;
|
||||
uniform sampler2D dtex;
|
||||
|
||||
uniform vec4 center[16];
|
||||
uniform vec4 col[16];
|
||||
@ -14,7 +15,7 @@ out vec4 Specular;
|
||||
|
||||
void main() {
|
||||
vec2 texc = uv;
|
||||
float z = texture(ntex, texc).a;
|
||||
float z = texture(dtex, texc).x;
|
||||
vec3 norm = texture(ntex, texc).xyz;
|
||||
norm = (norm - 0.5) * 2.0;
|
||||
|
||||
|
@ -313,7 +313,8 @@ void PostProcessing::renderPointlight(const std::vector<float> &positions, const
|
||||
glBindVertexArray(FullScreenShader::PointLightShader::vao);
|
||||
|
||||
setTexture(0, static_cast<irr::video::COpenGLTexture*>(irr_driver->getRTT(RTT_NORMAL_AND_DEPTH))->getOpenGLTextureName(), GL_NEAREST, GL_NEAREST);
|
||||
FullScreenShader::PointLightShader::setUniforms(irr_driver->getInvProjMatrix(), irr_driver->getViewMatrix(), positions, colors, energy, 200, 0);
|
||||
setTexture(1, static_cast<irr::video::COpenGLFBOTexture*>(irr_driver->getRTT(RTT_NORMAL_AND_DEPTH))->DepthBufferTexture, GL_NEAREST, GL_NEAREST);
|
||||
FullScreenShader::PointLightShader::setUniforms(irr_driver->getInvProjMatrix(), irr_driver->getViewMatrix(), positions, colors, energy, 200, 0, 1);
|
||||
|
||||
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
|
||||
glBindVertexArray(0);
|
||||
|
@ -1108,6 +1108,7 @@ namespace FullScreenShader
|
||||
|
||||
GLuint PointLightShader::Program;
|
||||
GLuint PointLightShader::uniform_ntex;
|
||||
GLuint PointLightShader::uniform_dtex;
|
||||
GLuint PointLightShader::uniform_center;
|
||||
GLuint PointLightShader::uniform_col;
|
||||
GLuint PointLightShader::uniform_energy;
|
||||
@ -1120,6 +1121,7 @@ namespace FullScreenShader
|
||||
{
|
||||
Program = LoadProgram(file_manager->getAsset("shaders/screenquad.vert").c_str(), file_manager->getAsset("shaders/pointlight.frag").c_str());
|
||||
uniform_ntex = glGetUniformLocation(Program, "ntex");
|
||||
uniform_dtex = glGetUniformLocation(Program, "dtex");
|
||||
uniform_center = glGetUniformLocation(Program, "center[0]");
|
||||
uniform_col = glGetUniformLocation(Program, "col[0]");
|
||||
uniform_energy = glGetUniformLocation(Program, "energy[0]");
|
||||
@ -1129,7 +1131,7 @@ namespace FullScreenShader
|
||||
vao = createVAO(Program);
|
||||
}
|
||||
|
||||
void PointLightShader::setUniforms(const core::matrix4 &InvProjMatrix, const core::matrix4 &ViewMatrix, const std::vector<float> &positions, const std::vector<float> &colors, const std::vector<float> &energy, unsigned spec, unsigned TU_ntex)
|
||||
void PointLightShader::setUniforms(const core::matrix4 &InvProjMatrix, const core::matrix4 &ViewMatrix, const std::vector<float> &positions, const std::vector<float> &colors, const std::vector<float> &energy, unsigned spec, unsigned TU_ntex, unsigned TU_dtex)
|
||||
{
|
||||
glUniform4fv(FullScreenShader::PointLightShader::uniform_center, 16, positions.data());
|
||||
glUniform4fv(FullScreenShader::PointLightShader::uniform_col, 16, colors.data());
|
||||
@ -1139,6 +1141,7 @@ namespace FullScreenShader
|
||||
glUniformMatrix4fv(FullScreenShader::PointLightShader::uniform_viewm, 1, GL_FALSE, ViewMatrix.pointer());
|
||||
|
||||
glUniform1i(FullScreenShader::PointLightShader::uniform_ntex, TU_ntex);
|
||||
glUniform1i(FullScreenShader::PointLightShader::uniform_dtex, TU_dtex);
|
||||
}
|
||||
|
||||
GLuint SunLightShader::Program;
|
||||
|
@ -323,11 +323,11 @@ class PointLightShader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint uniform_ntex, uniform_center, uniform_col, uniform_energy, uniform_spec, uniform_invproj, uniform_viewm;
|
||||
static GLuint uniform_ntex, uniform_dtex, uniform_center, uniform_col, uniform_energy, uniform_spec, uniform_invproj, uniform_viewm;
|
||||
static GLuint vao;
|
||||
|
||||
static void init();
|
||||
static void setUniforms(const core::matrix4 &InvProjMatrix, const core::matrix4 &ViewMatrix, const std::vector<float> &positions, const std::vector<float> &colors, const std::vector<float> &energy, unsigned spec, unsigned TU_ntex);
|
||||
static void setUniforms(const core::matrix4 &InvProjMatrix, const core::matrix4 &ViewMatrix, const std::vector<float> &positions, const std::vector<float> &colors, const std::vector<float> &energy, unsigned spec, unsigned TU_ntex, unsigned TU_dtex);
|
||||
};
|
||||
|
||||
class SunLightShader
|
||||
|
Loading…
x
Reference in New Issue
Block a user