From 69734ce21bb96eeb0a8149c8b6fa50e3fd4b960a Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Mon, 24 Sep 2018 22:34:43 -0700 Subject: [PATCH] Getting better' --- libraries/render-utils/src/LightingModel.cpp | 2 ++ libraries/render-utils/src/MeshDeformer.slh | 14 +------------- libraries/render-utils/src/MeshPartPayload.cpp | 9 +++------ libraries/render-utils/src/MeshPartPayload.h | 5 ----- libraries/render-utils/src/skin_model.slv | 6 +++--- libraries/render-utils/src/skin_model_dq.slv | 6 +++--- .../render-utils/src/skin_model_normal_map.slv | 6 +++--- .../render-utils/src/skin_model_normal_map_dq.slv | 6 +++--- libraries/render-utils/src/skin_model_shadow.slv | 6 +++--- .../render-utils/src/skin_model_shadow_dq.slv | 6 +++--- .../render-utils/src/skin_model_shadow_fade.slv | 6 +++--- .../render-utils/src/skin_model_shadow_fade_dq.slv | 6 +++--- libraries/render/src/render/Args.h | 4 +++- 13 files changed, 33 insertions(+), 49 deletions(-) diff --git a/libraries/render-utils/src/LightingModel.cpp b/libraries/render-utils/src/LightingModel.cpp index 70262a29a6..3781d0e0b1 100644 --- a/libraries/render-utils/src/LightingModel.cpp +++ b/libraries/render-utils/src/LightingModel.cpp @@ -226,4 +226,6 @@ void MakeLightingModel::run(const render::RenderContextPointer& renderContext, L // make sure the enableTexturing flag of the render ARgs is in sync renderContext->args->_enableTexturing = _lightingModel->isMaterialTexturingEnabled(); + renderContext->args->_enableBlendshape = _lightingModel->isBlendshapeEnabled(); + renderContext->args->_enableSkinning = _lightingModel->isSkinningEnabled(); } \ No newline at end of file diff --git a/libraries/render-utils/src/MeshDeformer.slh b/libraries/render-utils/src/MeshDeformer.slh index 50dc655137..fb96b63a1b 100644 --- a/libraries/render-utils/src/MeshDeformer.slh +++ b/libraries/render-utils/src/MeshDeformer.slh @@ -85,32 +85,20 @@ void evalMeshDeformer(vec4 inPosition, out vec4 outPosition <@endfunc@> -<@func declareMeshDeformerActivation(USE_SKINNING, USE_BLENDSHAPE, USE_LIGHTING_MODEL)@> +<@func declareMeshDeformerActivation(USE_SKINNING, USE_BLENDSHAPE)@> const BITFIELD MESH_DEFORMER_BLENDSHAPE_BIT = 0x00000001; const BITFIELD MESH_DEFORMER_SKINNING_BIT = 0x00000002; -<@if USE_LIGHTING_MODEL@> -<@include LightingModel.slh@> -<@endif@> - <@if USE_BLENDSHAPE@> bool meshDeformer_doBlendshape(int meshKey) { - <@if USE_LIGHTING_MODEL@> - return ((meshKey & MESH_DEFORMER_BLENDSHAPE_BIT) != 0) & bool(isBlendshapeEnabled()); - <@else@> return ((meshKey & MESH_DEFORMER_BLENDSHAPE_BIT) != 0); - <@endif@> } <@endif@> <@if USE_SKINNING@> bool meshDeformer_doSkinning(int meshKey) { - <@if USE_LIGHTING_MODEL@> - return ((meshKey & MESH_DEFORMER_SKINNING_BIT) != 0) & bool(isSkinningEnabled()); - <@else@> return ((meshKey & MESH_DEFORMER_SKINNING_BIT) != 0); - <@endif@> } <@endif@> diff --git a/libraries/render-utils/src/MeshPartPayload.cpp b/libraries/render-utils/src/MeshPartPayload.cpp index cc17573bfd..8fb6c5c978 100644 --- a/libraries/render-utils/src/MeshPartPayload.cpp +++ b/libraries/render-utils/src/MeshPartPayload.cpp @@ -243,10 +243,6 @@ ModelMeshPartPayload::ModelMeshPartPayload(ModelPointer model, int meshIndex, in if (buffer != model->_blendshapeBuffers.end()) { _blendshapeBuffer = buffer->second; } - - if (!_isSkinned) { - qWarning() << "MeshPArt Payload is blendshape but not skinned"; - } } } @@ -356,7 +352,7 @@ void ModelMeshPartPayload::setShapeKey(bool invalidateShapeKey, bool isWireframe bool hasLightmap = drawMaterialKey.isLightmapMap(); bool isUnlit = drawMaterialKey.isUnlit(); - bool isSkinned = _isSkinned; + bool isSkinned = _isBlendShaped || _isSkinned; if (isWireframe) { isTranslucent = hasTangents = hasLightmap = isSkinned = false; @@ -424,7 +420,8 @@ void ModelMeshPartPayload::render(RenderArgs* args) { //Bind the index buffer and vertex buffer and Blend shapes if needed bindMesh(batch); - auto drawcallInfo = (uint16_t) ((_isBlendShaped << 0) | (_isSkinned << 1)); + // IF deformed pass the mesh key + auto drawcallInfo = (uint16_t) (((_isBlendShaped && args->_enableBlendshape) << 0) | ((_isSkinned && args->_enableSkinning) << 1)); if (drawcallInfo) { batch.setDrawcallInfo(drawcallInfo); } diff --git a/libraries/render-utils/src/MeshPartPayload.h b/libraries/render-utils/src/MeshPartPayload.h index 2f31ffbf92..c1a73e8ea0 100644 --- a/libraries/render-utils/src/MeshPartPayload.h +++ b/libraries/render-utils/src/MeshPartPayload.h @@ -27,11 +27,6 @@ class Model; class MeshPartPayload { public: - struct DrawcallInfo { - uint32_t _geometryKey { 0 }; - uint32_t _spare[3]; - }; - MeshPartPayload() {} MeshPartPayload(const std::shared_ptr& mesh, int partIndex, graphics::MaterialPointer material); diff --git a/libraries/render-utils/src/skin_model.slv b/libraries/render-utils/src/skin_model.slv index c36df0be99..5853ca47fc 100644 --- a/libraries/render-utils/src/skin_model.slv +++ b/libraries/render-utils/src/skin_model.slv @@ -20,7 +20,7 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(1, _SCRIBE_NULL, 1, 0, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include LightingModel.slh@> @@ -37,8 +37,8 @@ void main(void) { vec4 deformedPosition = vec4(0.0, 0.0, 0.0, 0.0); vec3 deformedNormal = vec3(0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, inNormal.xyz, deformedNormal, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // pass along the color _color.rgb = color_sRGBToLinear(inColor.rgb); diff --git a/libraries/render-utils/src/skin_model_dq.slv b/libraries/render-utils/src/skin_model_dq.slv index fbff970a38..c6540c90b1 100644 --- a/libraries/render-utils/src/skin_model_dq.slv +++ b/libraries/render-utils/src/skin_model_dq.slv @@ -20,7 +20,7 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(1, _SCRIBE_NULL, 1, 1, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> @@ -35,8 +35,8 @@ void main(void) { vec4 deformedPosition = vec4(0.0, 0.0, 0.0, 0.0); vec3 deformedNormal = vec3(0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, inNormal.xyz, deformedNormal, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // pass along the color _color.rgb = color_sRGBToLinear(inColor.rgb); diff --git a/libraries/render-utils/src/skin_model_normal_map.slv b/libraries/render-utils/src/skin_model_normal_map.slv index a8926cb89e..8627b5b856 100644 --- a/libraries/render-utils/src/skin_model_normal_map.slv +++ b/libraries/render-utils/src/skin_model_normal_map.slv @@ -20,7 +20,7 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(1, 1, 1, _SCRIBE_NULL, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> @@ -36,8 +36,8 @@ void main(void) { vec3 deformedNormal = vec3(0.0, 0.0, 0.0); vec3 deformedTangent = vec3(0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, inNormal.xyz, deformedNormal, inTangent.xyz, deformedTangent, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // pass along the color _color.rgb = color_sRGBToLinear(inColor.rgb); diff --git a/libraries/render-utils/src/skin_model_normal_map_dq.slv b/libraries/render-utils/src/skin_model_normal_map_dq.slv index 7e192c0b86..b45d94938a 100644 --- a/libraries/render-utils/src/skin_model_normal_map_dq.slv +++ b/libraries/render-utils/src/skin_model_normal_map_dq.slv @@ -21,7 +21,7 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(1, 1, 1, 1, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> @@ -37,8 +37,8 @@ void main(void) { vec3 deformedNormal = vec3(0.0, 0.0, 0.0); vec3 deformedTangent = vec3(0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, inNormal.xyz, deformedNormal, inTangent.xyz, deformedTangent, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // pass along the color _color.rgb = color_sRGBToLinear(inColor.rgb); diff --git a/libraries/render-utils/src/skin_model_shadow.slv b/libraries/render-utils/src/skin_model_shadow.slv index c748b6e3ba..08f474a94d 100644 --- a/libraries/render-utils/src/skin_model_shadow.slv +++ b/libraries/render-utils/src/skin_model_shadow.slv @@ -16,15 +16,15 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(_SCRIBE_NULL, _SCRIBE_NULL, 1, _SCRIBE_NULL, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> void main(void) { vec4 deformedPosition = vec4(0.0, 0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // standard transform TransformCamera cam = getTransformCamera(); diff --git a/libraries/render-utils/src/skin_model_shadow_dq.slv b/libraries/render-utils/src/skin_model_shadow_dq.slv index 579a758646..e19f412bdc 100644 --- a/libraries/render-utils/src/skin_model_shadow_dq.slv +++ b/libraries/render-utils/src/skin_model_shadow_dq.slv @@ -16,15 +16,15 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(_SCRIBE_NULL, _SCRIBE_NULL, 1, 1, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> void main(void) { vec4 deformedPosition = vec4(0.0, 0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // standard transform TransformCamera cam = getTransformCamera(); diff --git a/libraries/render-utils/src/skin_model_shadow_fade.slv b/libraries/render-utils/src/skin_model_shadow_fade.slv index 8c9cafd8ac..541b58ccb9 100644 --- a/libraries/render-utils/src/skin_model_shadow_fade.slv +++ b/libraries/render-utils/src/skin_model_shadow_fade.slv @@ -19,7 +19,7 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(_SCRIBE_NULL, _SCRIBE_NULL, 1, _SCRIBE_NULL, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> @@ -28,8 +28,8 @@ layout(location=RENDER_UTILS_ATTR_POSITION_WS) out vec4 _positionWS; void main(void) { vec4 deformedPosition = vec4(0.0, 0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // standard transform TransformCamera cam = getTransformCamera(); diff --git a/libraries/render-utils/src/skin_model_shadow_fade_dq.slv b/libraries/render-utils/src/skin_model_shadow_fade_dq.slv index 80710464cf..c5dd46daae 100644 --- a/libraries/render-utils/src/skin_model_shadow_fade_dq.slv +++ b/libraries/render-utils/src/skin_model_shadow_fade_dq.slv @@ -19,7 +19,7 @@ <@include MeshDeformer.slh@> <$declareMeshDeformer(_SCRIBE_NULL, _SCRIBE_NULL, 1, 1, 1)$> -<$declareMeshDeformerActivation(1, 1, 1)$> +<$declareMeshDeformerActivation(1, 1)$> <@include render-utils/ShaderConstants.h@> @@ -28,8 +28,8 @@ layout(location=RENDER_UTILS_ATTR_POSITION_WS) out vec4 _positionWS; void main(void) { vec4 deformedPosition = vec4(0.0, 0.0, 0.0, 0.0); evalMeshDeformer(inPosition, deformedPosition, - meshDeformer_doSkinning(_drawcallInfo.y), inSkinClusterIndex, inSkinClusterWeight, - meshDeformer_doBlendshape(_drawcallInfo.y), gl_VertexID); + meshDeformer_doSkinning(_drawCallInfo.y), inSkinClusterIndex, inSkinClusterWeight, + meshDeformer_doBlendshape(_drawCallInfo.y), gl_VertexID); // standard transform TransformCamera cam = getTransformCamera(); diff --git a/libraries/render/src/render/Args.h b/libraries/render/src/render/Args.h index dd061c0092..b5c98e3428 100644 --- a/libraries/render/src/render/Args.h +++ b/libraries/render/src/render/Args.h @@ -121,7 +121,9 @@ namespace render { uint32_t _globalShapeKey{ 0 }; uint32_t _itemShapeKey{ 0 }; - bool _enableTexturing { true }; + bool _enableTexturing{ true }; + bool _enableBlendshape{ true }; + bool _enableSkinning{ true }; bool _enableFade{ false };