mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 06:44:06 +02:00
Getting better'
This commit is contained in:
parent
7cf7eaa7c8
commit
69734ce21b
13 changed files with 33 additions and 49 deletions
|
@ -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();
|
||||
}
|
|
@ -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@>
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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<const graphics::Mesh>& mesh, int partIndex, graphics::MaterialPointer material);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
Loading…
Reference in a new issue