mirror of
https://github.com/overte-org/overte.git
synced 2025-08-10 13:07:04 +02:00
Apply the new shadow distances to the models, too.
This commit is contained in:
parent
0b4484a153
commit
12beef7fec
2 changed files with 27 additions and 11 deletions
|
@ -96,6 +96,11 @@ int Model::_shadowNormalSpecularMapTangentLocation;
|
||||||
int Model::_cascadedShadowNormalMapTangentLocation;
|
int Model::_cascadedShadowNormalMapTangentLocation;
|
||||||
int Model::_cascadedShadowNormalSpecularMapTangentLocation;
|
int Model::_cascadedShadowNormalSpecularMapTangentLocation;
|
||||||
|
|
||||||
|
int Model::_cascadedShadowMapDistancesLocation;
|
||||||
|
int Model::_cascadedShadowNormalMapDistancesLocation;
|
||||||
|
int Model::_cascadedShadowSpecularMapDistancesLocation;
|
||||||
|
int Model::_cascadedShadowNormalSpecularMapDistancesLocation;
|
||||||
|
|
||||||
Model::SkinLocations Model::_skinLocations;
|
Model::SkinLocations Model::_skinLocations;
|
||||||
Model::SkinLocations Model::_skinNormalMapLocations;
|
Model::SkinLocations Model::_skinNormalMapLocations;
|
||||||
Model::SkinLocations Model::_skinSpecularMapLocations;
|
Model::SkinLocations Model::_skinSpecularMapLocations;
|
||||||
|
@ -144,12 +149,11 @@ void Model::initSkinProgram(ProgramObject& program, Model::SkinLocations& locati
|
||||||
locations.clusterIndices = program.attributeLocation("clusterIndices");
|
locations.clusterIndices = program.attributeLocation("clusterIndices");
|
||||||
locations.clusterWeights = program.attributeLocation("clusterWeights");
|
locations.clusterWeights = program.attributeLocation("clusterWeights");
|
||||||
locations.tangent = program.attributeLocation("tangent");
|
locations.tangent = program.attributeLocation("tangent");
|
||||||
|
locations.shadowDistances = program.uniformLocation("shadowDistances");
|
||||||
program.setUniformValue("diffuseMap", 0);
|
program.setUniformValue("diffuseMap", 0);
|
||||||
program.setUniformValue("normalMap", 1);
|
program.setUniformValue("normalMap", 1);
|
||||||
program.setUniformValue("specularMap", specularTextureUnit);
|
program.setUniformValue("specularMap", specularTextureUnit);
|
||||||
program.setUniformValue("shadowMap", shadowTextureUnit);
|
program.setUniformValue("shadowMap", shadowTextureUnit);
|
||||||
program.setUniformValue("shadowDistances", -SHADOW_MATRIX_DISTANCES[1],
|
|
||||||
-SHADOW_MATRIX_DISTANCES[2], -SHADOW_MATRIX_DISTANCES[3]);
|
|
||||||
program.release();
|
program.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,8 +314,7 @@ void Model::init() {
|
||||||
_cascadedShadowMapProgram.bind();
|
_cascadedShadowMapProgram.bind();
|
||||||
_cascadedShadowMapProgram.setUniformValue("diffuseMap", 0);
|
_cascadedShadowMapProgram.setUniformValue("diffuseMap", 0);
|
||||||
_cascadedShadowMapProgram.setUniformValue("shadowMap", 1);
|
_cascadedShadowMapProgram.setUniformValue("shadowMap", 1);
|
||||||
_cascadedShadowMapProgram.setUniformValue("shadowDistances", -SHADOW_MATRIX_DISTANCES[1],
|
_cascadedShadowMapDistancesLocation = _cascadedShadowMapProgram.uniformLocation("shadowDistances");
|
||||||
-SHADOW_MATRIX_DISTANCES[2], -SHADOW_MATRIX_DISTANCES[3]);
|
|
||||||
_cascadedShadowMapProgram.release();
|
_cascadedShadowMapProgram.release();
|
||||||
|
|
||||||
_cascadedShadowNormalMapProgram.addShaderFromSourceFile(QGLShader::Vertex,
|
_cascadedShadowNormalMapProgram.addShaderFromSourceFile(QGLShader::Vertex,
|
||||||
|
@ -324,8 +327,7 @@ void Model::init() {
|
||||||
_cascadedShadowNormalMapProgram.setUniformValue("diffuseMap", 0);
|
_cascadedShadowNormalMapProgram.setUniformValue("diffuseMap", 0);
|
||||||
_cascadedShadowNormalMapProgram.setUniformValue("normalMap", 1);
|
_cascadedShadowNormalMapProgram.setUniformValue("normalMap", 1);
|
||||||
_cascadedShadowNormalMapProgram.setUniformValue("shadowMap", 2);
|
_cascadedShadowNormalMapProgram.setUniformValue("shadowMap", 2);
|
||||||
_cascadedShadowNormalMapProgram.setUniformValue("shadowDistances", -SHADOW_MATRIX_DISTANCES[1],
|
_cascadedShadowNormalMapDistancesLocation = _cascadedShadowNormalMapProgram.uniformLocation("shadowDistances");
|
||||||
-SHADOW_MATRIX_DISTANCES[2], -SHADOW_MATRIX_DISTANCES[3]);
|
|
||||||
_cascadedShadowNormalMapTangentLocation = _cascadedShadowNormalMapProgram.attributeLocation("tangent");
|
_cascadedShadowNormalMapTangentLocation = _cascadedShadowNormalMapProgram.attributeLocation("tangent");
|
||||||
_cascadedShadowNormalMapProgram.release();
|
_cascadedShadowNormalMapProgram.release();
|
||||||
|
|
||||||
|
@ -339,8 +341,7 @@ void Model::init() {
|
||||||
_cascadedShadowSpecularMapProgram.setUniformValue("diffuseMap", 0);
|
_cascadedShadowSpecularMapProgram.setUniformValue("diffuseMap", 0);
|
||||||
_cascadedShadowSpecularMapProgram.setUniformValue("specularMap", 1);
|
_cascadedShadowSpecularMapProgram.setUniformValue("specularMap", 1);
|
||||||
_cascadedShadowSpecularMapProgram.setUniformValue("shadowMap", 2);
|
_cascadedShadowSpecularMapProgram.setUniformValue("shadowMap", 2);
|
||||||
_cascadedShadowSpecularMapProgram.setUniformValue("shadowDistances", -SHADOW_MATRIX_DISTANCES[1],
|
_cascadedShadowSpecularMapDistancesLocation = _cascadedShadowSpecularMapProgram.uniformLocation("shadowDistances");
|
||||||
-SHADOW_MATRIX_DISTANCES[2], -SHADOW_MATRIX_DISTANCES[3]);
|
|
||||||
_cascadedShadowSpecularMapProgram.release();
|
_cascadedShadowSpecularMapProgram.release();
|
||||||
|
|
||||||
_cascadedShadowNormalSpecularMapProgram.addShaderFromSourceFile(QGLShader::Vertex,
|
_cascadedShadowNormalSpecularMapProgram.addShaderFromSourceFile(QGLShader::Vertex,
|
||||||
|
@ -354,8 +355,8 @@ void Model::init() {
|
||||||
_cascadedShadowNormalSpecularMapProgram.setUniformValue("normalMap", 1);
|
_cascadedShadowNormalSpecularMapProgram.setUniformValue("normalMap", 1);
|
||||||
_cascadedShadowNormalSpecularMapProgram.setUniformValue("specularMap", 2);
|
_cascadedShadowNormalSpecularMapProgram.setUniformValue("specularMap", 2);
|
||||||
_cascadedShadowNormalSpecularMapProgram.setUniformValue("shadowMap", 3);
|
_cascadedShadowNormalSpecularMapProgram.setUniformValue("shadowMap", 3);
|
||||||
_cascadedShadowNormalSpecularMapProgram.setUniformValue("shadowDistances", -SHADOW_MATRIX_DISTANCES[1],
|
_cascadedShadowNormalSpecularMapDistancesLocation =
|
||||||
-SHADOW_MATRIX_DISTANCES[2], -SHADOW_MATRIX_DISTANCES[3]);
|
_cascadedShadowNormalSpecularMapProgram.uniformLocation("shadowDistances");
|
||||||
_cascadedShadowNormalSpecularMapTangentLocation = _cascadedShadowNormalSpecularMapProgram.attributeLocation("tangent");
|
_cascadedShadowNormalSpecularMapTangentLocation = _cascadedShadowNormalSpecularMapProgram.attributeLocation("tangent");
|
||||||
_cascadedShadowNormalSpecularMapProgram.release();
|
_cascadedShadowNormalSpecularMapProgram.release();
|
||||||
|
|
||||||
|
@ -1641,6 +1642,7 @@ void Model::renderMeshes(float alpha, RenderMode mode, bool translucent, bool re
|
||||||
ProgramObject* skinProgram = &_skinProgram;
|
ProgramObject* skinProgram = &_skinProgram;
|
||||||
SkinLocations* skinLocations = &_skinLocations;
|
SkinLocations* skinLocations = &_skinLocations;
|
||||||
int tangentLocation = _normalMapTangentLocation;
|
int tangentLocation = _normalMapTangentLocation;
|
||||||
|
int shadowDistancesLocation = _cascadedShadowMapDistancesLocation;
|
||||||
GLenum specularTextureUnit = 0;
|
GLenum specularTextureUnit = 0;
|
||||||
GLenum shadowTextureUnit = 0;
|
GLenum shadowTextureUnit = 0;
|
||||||
if (mode == SHADOW_RENDER_MODE) {
|
if (mode == SHADOW_RENDER_MODE) {
|
||||||
|
@ -1656,6 +1658,7 @@ void Model::renderMeshes(float alpha, RenderMode mode, bool translucent, bool re
|
||||||
skinProgram = &_skinCascadedShadowNormalSpecularMapProgram;
|
skinProgram = &_skinCascadedShadowNormalSpecularMapProgram;
|
||||||
skinLocations = &_skinCascadedShadowNormalSpecularMapLocations;
|
skinLocations = &_skinCascadedShadowNormalSpecularMapLocations;
|
||||||
tangentLocation = _cascadedShadowNormalSpecularMapTangentLocation;
|
tangentLocation = _cascadedShadowNormalSpecularMapTangentLocation;
|
||||||
|
shadowDistancesLocation = _cascadedShadowNormalSpecularMapDistancesLocation;
|
||||||
} else {
|
} else {
|
||||||
program = &_shadowNormalSpecularMapProgram;
|
program = &_shadowNormalSpecularMapProgram;
|
||||||
skinProgram = &_skinShadowNormalSpecularMapProgram;
|
skinProgram = &_skinShadowNormalSpecularMapProgram;
|
||||||
|
@ -1677,6 +1680,7 @@ void Model::renderMeshes(float alpha, RenderMode mode, bool translucent, bool re
|
||||||
skinProgram = &_skinCascadedShadowNormalMapProgram;
|
skinProgram = &_skinCascadedShadowNormalMapProgram;
|
||||||
skinLocations = &_skinCascadedShadowNormalMapLocations;
|
skinLocations = &_skinCascadedShadowNormalMapLocations;
|
||||||
tangentLocation = _cascadedShadowNormalMapTangentLocation;
|
tangentLocation = _cascadedShadowNormalMapTangentLocation;
|
||||||
|
shadowDistancesLocation = _cascadedShadowNormalMapDistancesLocation;
|
||||||
} else {
|
} else {
|
||||||
program = &_shadowNormalMapProgram;
|
program = &_shadowNormalMapProgram;
|
||||||
skinProgram = &_skinShadowNormalMapProgram;
|
skinProgram = &_skinShadowNormalMapProgram;
|
||||||
|
@ -1695,6 +1699,7 @@ void Model::renderMeshes(float alpha, RenderMode mode, bool translucent, bool re
|
||||||
program = &_cascadedShadowSpecularMapProgram;
|
program = &_cascadedShadowSpecularMapProgram;
|
||||||
skinProgram = &_skinCascadedShadowSpecularMapProgram;
|
skinProgram = &_skinCascadedShadowSpecularMapProgram;
|
||||||
skinLocations = &_skinCascadedShadowSpecularMapLocations;
|
skinLocations = &_skinCascadedShadowSpecularMapLocations;
|
||||||
|
shadowDistancesLocation = _cascadedShadowSpecularMapDistancesLocation;
|
||||||
} else {
|
} else {
|
||||||
program = &_shadowSpecularMapProgram;
|
program = &_shadowSpecularMapProgram;
|
||||||
skinProgram = &_skinShadowSpecularMapProgram;
|
skinProgram = &_skinShadowSpecularMapProgram;
|
||||||
|
@ -1740,10 +1745,15 @@ void Model::renderMeshes(float alpha, RenderMode mode, bool translucent, bool re
|
||||||
skinProgram->enableAttributeArray(skinLocations->clusterWeights);
|
skinProgram->enableAttributeArray(skinLocations->clusterWeights);
|
||||||
activeProgram = skinProgram;
|
activeProgram = skinProgram;
|
||||||
tangentLocation = skinLocations->tangent;
|
tangentLocation = skinLocations->tangent;
|
||||||
|
if (cascadedShadows) {
|
||||||
|
program->setUniform(skinLocations->shadowDistances, Application::getInstance()->getShadowDistances());
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
glMultMatrixf((const GLfloat*)&state.clusterMatrices[0]);
|
glMultMatrixf((const GLfloat*)&state.clusterMatrices[0]);
|
||||||
program->bind();
|
program->bind();
|
||||||
|
if (cascadedShadows) {
|
||||||
|
program->setUniform(shadowDistancesLocation, Application::getInstance()->getShadowDistances());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mesh.blendshapes.isEmpty()) {
|
if (mesh.blendshapes.isEmpty()) {
|
||||||
|
|
|
@ -311,12 +311,18 @@ private:
|
||||||
static int _cascadedShadowNormalMapTangentLocation;
|
static int _cascadedShadowNormalMapTangentLocation;
|
||||||
static int _cascadedShadowNormalSpecularMapTangentLocation;
|
static int _cascadedShadowNormalSpecularMapTangentLocation;
|
||||||
|
|
||||||
|
static int _cascadedShadowMapDistancesLocation;
|
||||||
|
static int _cascadedShadowNormalMapDistancesLocation;
|
||||||
|
static int _cascadedShadowSpecularMapDistancesLocation;
|
||||||
|
static int _cascadedShadowNormalSpecularMapDistancesLocation;
|
||||||
|
|
||||||
class SkinLocations {
|
class SkinLocations {
|
||||||
public:
|
public:
|
||||||
int clusterMatrices;
|
int clusterMatrices;
|
||||||
int clusterIndices;
|
int clusterIndices;
|
||||||
int clusterWeights;
|
int clusterWeights;
|
||||||
int tangent;
|
int tangent;
|
||||||
|
int shadowDistances;
|
||||||
};
|
};
|
||||||
|
|
||||||
static SkinLocations _skinLocations;
|
static SkinLocations _skinLocations;
|
||||||
|
|
Loading…
Reference in a new issue