LightPrepass: start porting object_ref
This commit is contained in:
parent
9ddfa9261a
commit
2609e5c709
13
data/shaders/objectref_pass1.frag
Normal file
13
data/shaders/objectref_pass1.frag
Normal file
@ -0,0 +1,13 @@
|
||||
#version 130
|
||||
uniform sampler2D tex;
|
||||
|
||||
noperspective in vec3 nor;
|
||||
in vec2 uv;
|
||||
|
||||
void main() {
|
||||
vec4 col = texture2D(tex, uv);
|
||||
if (col.a < 0.5)
|
||||
discard;
|
||||
gl_FragColor = vec4(0.5 * normalize(nor) + 0.5, gl_FragCoord.z);
|
||||
}
|
||||
|
16
data/shaders/objectref_pass1.vert
Normal file
16
data/shaders/objectref_pass1.vert
Normal file
@ -0,0 +1,16 @@
|
||||
#version 130
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TransposeInverseModelView;
|
||||
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec2 Texcoord;
|
||||
noperspective out vec3 nor;
|
||||
out vec2 uv;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
uv = Texcoord;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
nor = (TransposeInverseModelView * vec4(Normal, 0.)).xyz;
|
||||
}
|
20
data/shaders/objectref_pass2.frag
Normal file
20
data/shaders/objectref_pass2.frag
Normal file
@ -0,0 +1,20 @@
|
||||
#version 130
|
||||
uniform sampler2D Albedo;
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
in vec2 uv;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 color = texture2D(Albedo, uv);
|
||||
if (color.a < 0.5) discard;
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec3 DiffuseComponent = texture2D(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture2D(SpecularMap, tc).xyz;
|
||||
float ao = texture2D(SSAO, tc).x;
|
||||
vec3 LightFactor = ao * ambient + DiffuseComponent + SpecularComponent * (1. - color.a);
|
||||
gl_FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
@ -242,7 +242,9 @@ void Shaders::loadShaders()
|
||||
MeshShader::ColorizeShader::init();
|
||||
MeshShader::NormalMapShader::init();
|
||||
MeshShader::ObjectPass1Shader::init();
|
||||
MeshShader::ObjectRefPass1Shader::init();
|
||||
MeshShader::ObjectPass2Shader::init();
|
||||
MeshShader::ObjectRefPass2Shader::init();
|
||||
MeshShader::SphereMapShader::init();
|
||||
MeshShader::SplattingShader::init();
|
||||
}
|
||||
@ -297,6 +299,31 @@ namespace MeshShader
|
||||
glUniformMatrix4fv(uniform_TIMV, 1, GL_FALSE, TransposeInverseModelView.pointer());
|
||||
}
|
||||
|
||||
GLuint ObjectRefPass1Shader::Program;
|
||||
GLuint ObjectRefPass1Shader::attrib_position;
|
||||
GLuint ObjectRefPass1Shader::attrib_normal;
|
||||
GLuint ObjectRefPass1Shader::uniform_MVP;
|
||||
GLuint ObjectRefPass1Shader::uniform_TIMV;
|
||||
GLuint ObjectRefPass1Shader::uniform_tex;
|
||||
|
||||
void ObjectRefPass1Shader::init()
|
||||
{
|
||||
initGL();
|
||||
Program = LoadProgram(file_manager->getAsset("shaders/objectref_pass1.vert").c_str(), file_manager->getAsset("shaders/objectref_pass1.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||
uniform_TIMV = glGetUniformLocation(Program, "TransposeInverseModelView");
|
||||
uniform_tex = glGetUniformLocation(Program, "tex");
|
||||
}
|
||||
|
||||
void ObjectRefPass1Shader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TransposeInverseModelView, unsigned TU_tex)
|
||||
{
|
||||
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
||||
glUniformMatrix4fv(uniform_TIMV, 1, GL_FALSE, TransposeInverseModelView.pointer());
|
||||
glUniform1i(uniform_tex, TU_tex);
|
||||
}
|
||||
|
||||
GLuint ObjectPass2Shader::Program;
|
||||
GLuint ObjectPass2Shader::attrib_position;
|
||||
GLuint ObjectPass2Shader::attrib_texcoord;
|
||||
@ -336,6 +363,45 @@ namespace MeshShader
|
||||
glUniform3f(uniform_ambient, s.r, s.g, s.b);
|
||||
}
|
||||
|
||||
GLuint ObjectRefPass2Shader::Program;
|
||||
GLuint ObjectRefPass2Shader::attrib_position;
|
||||
GLuint ObjectRefPass2Shader::attrib_texcoord;
|
||||
GLuint ObjectRefPass2Shader::uniform_MVP;
|
||||
GLuint ObjectRefPass2Shader::uniform_TIMV;
|
||||
GLuint ObjectRefPass2Shader::uniform_Albedo;
|
||||
GLuint ObjectRefPass2Shader::uniform_DiffuseMap;
|
||||
GLuint ObjectRefPass2Shader::uniform_SpecularMap;
|
||||
GLuint ObjectRefPass2Shader::uniform_SSAO;
|
||||
GLuint ObjectRefPass2Shader::uniform_screen;
|
||||
GLuint ObjectRefPass2Shader::uniform_ambient;
|
||||
|
||||
void ObjectRefPass2Shader::init()
|
||||
{
|
||||
initGL();
|
||||
Program = LoadProgram(file_manager->getAsset("shaders/object_pass2.vert").c_str(), file_manager->getAsset("shaders/objectref_pass2.frag").c_str());
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
uniform_MVP = glGetUniformLocation(Program, "ModelViewProjectionMatrix");
|
||||
uniform_Albedo = glGetUniformLocation(Program, "Albedo");
|
||||
uniform_DiffuseMap = glGetUniformLocation(Program, "DiffuseMap");
|
||||
uniform_SpecularMap = glGetUniformLocation(Program, "SpecularMap");
|
||||
uniform_SSAO = glGetUniformLocation(Program, "SSAO");
|
||||
uniform_screen = glGetUniformLocation(Program, "screen");
|
||||
uniform_ambient = glGetUniformLocation(Program, "ambient");
|
||||
}
|
||||
|
||||
void ObjectRefPass2Shader::setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_Albedo, unsigned TU_DiffuseMap, unsigned TU_SpecularMap, unsigned TU_SSAO)
|
||||
{
|
||||
glUniformMatrix4fv(uniform_MVP, 1, GL_FALSE, ModelViewProjectionMatrix.pointer());
|
||||
glUniform1i(uniform_Albedo, TU_Albedo);
|
||||
glUniform1i(uniform_DiffuseMap, TU_DiffuseMap);
|
||||
glUniform1i(uniform_SpecularMap, TU_SpecularMap);
|
||||
glUniform1i(uniform_SSAO, TU_SSAO);
|
||||
glUniform2f(uniform_screen, UserConfigParams::m_width, UserConfigParams::m_height);
|
||||
const video::SColorf s = irr_driver->getSceneManager()->getAmbientLight();
|
||||
glUniform3f(uniform_ambient, s.r, s.g, s.b);
|
||||
}
|
||||
|
||||
GLuint NormalMapShader::Program;
|
||||
GLuint NormalMapShader::attrib_position;
|
||||
GLuint NormalMapShader::attrib_texcoord;
|
||||
|
@ -37,6 +37,17 @@ public:
|
||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TransposeInverseModelView);
|
||||
};
|
||||
|
||||
class ObjectRefPass1Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_normal;
|
||||
static GLuint uniform_MVP, uniform_TIMV, uniform_tex;
|
||||
|
||||
static void init();
|
||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, const core::matrix4 &TransposeInverseModelView, unsigned TU_texture);
|
||||
};
|
||||
|
||||
class ObjectPass2Shader
|
||||
{
|
||||
public:
|
||||
@ -48,6 +59,17 @@ public:
|
||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_Albedo, unsigned TU_DiffuseMap, unsigned TU_SpecularMap, unsigned TU_SSAO);
|
||||
};
|
||||
|
||||
class ObjectRefPass2Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord;
|
||||
static GLuint uniform_MVP, uniform_TIMV, uniform_Albedo, uniform_DiffuseMap, uniform_SpecularMap, uniform_SSAO, uniform_screen, uniform_ambient;
|
||||
|
||||
static void init();
|
||||
static void setUniforms(const core::matrix4 &ModelViewProjectionMatrix, unsigned TU_Albedo, unsigned TU_DiffuseMap, unsigned TU_SpecularMap, unsigned TU_SSAO);
|
||||
};
|
||||
|
||||
class NormalMapShader
|
||||
{
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user