// // Convert a DX semantic into a Maya semantic // MUniformParameter::DataSemantic CUniformParameterBuilder::convertSemantic( ) { MUniformParameter::DataSemantic paramSemantic = MUniformParameter::kSemanticUnknown; // @@@@ maybe useful to validate // MHWRender::MShaderManager::isSupportedShaderSemantic( semantic ); // Convert all semantics to lower case for faster // mtype = MHWRender::MFrameContext::semanticToMatrixType( semantic, &status ); // First try the explicit semantic if( mDesc.Semantic) { if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorld)) paramSemantic = MUniformParameter::kSemanticWorldMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldTranspose)) paramSemantic = MUniformParameter::kSemanticWorldTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldInverse)) paramSemantic = MUniformParameter::kSemanticWorldInverseMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldInverseTranspose)) paramSemantic = MUniformParameter::kSemanticWorldInverseTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kView)) paramSemantic = MUniformParameter::kSemanticViewMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewTranspose)) paramSemantic = MUniformParameter::kSemanticViewTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewInverse)) paramSemantic = MUniformParameter::kSemanticViewInverseMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewInverseTranspose)) paramSemantic = MUniformParameter::kSemanticViewInverseTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kProjection)) paramSemantic = MUniformParameter::kSemanticProjectionMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kProjectionTranspose)) paramSemantic = MUniformParameter::kSemanticProjectionTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kProjectionInverse)) paramSemantic = MUniformParameter::kSemanticProjectionInverseMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kProjectionInverseTranspose)) paramSemantic = MUniformParameter::kSemanticProjectionInverseTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldView)) paramSemantic = MUniformParameter::kSemanticWorldViewMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewTranspose)) paramSemantic = MUniformParameter::kSemanticWorldViewTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewInverse)) paramSemantic = MUniformParameter::kSemanticWorldViewInverseMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewInverseTranspose)) paramSemantic = MUniformParameter::kSemanticWorldViewInverseTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewProjection)) paramSemantic = MUniformParameter::kSemanticViewProjectionMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewProjectionTranspose)) paramSemantic = MUniformParameter::kSemanticViewProjectionTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewProjectionInverse)) paramSemantic = MUniformParameter::kSemanticViewProjectionInverseMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewProjectionInverseTranspose)) paramSemantic = MUniformParameter::kSemanticViewProjectionInverseTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewProjection)) paramSemantic = MUniformParameter::kSemanticWorldViewProjectionMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewProjectionTranspose)) paramSemantic = MUniformParameter::kSemanticWorldViewProjectionTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewProjectionInverse)) paramSemantic = MUniformParameter::kSemanticWorldViewProjectionInverseMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kWorldViewProjectionInverseTranspose)) paramSemantic = MUniformParameter::kSemanticWorldViewProjectionInverseTransposeMatrix; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewDirection)) paramSemantic = MUniformParameter::kSemanticViewDir; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewPosition)) paramSemantic = MUniformParameter::kSemanticViewPos; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kLocalViewer)) paramSemantic = MUniformParameter::kSemanticLocalViewer; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kViewportPixelSize)) paramSemantic = MUniformParameter::kSemanticViewportPixelSize; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kBackgroundColor)) paramSemantic = MUniformParameter::kSemanticBackgroundColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kFrame)) paramSemantic = MUniformParameter::kSemanticFrameNumber; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kFrameNumber)) paramSemantic = MUniformParameter::kSemanticFrameNumber; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kAnimationTime)) paramSemantic = MUniformParameter::kSemanticTime; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kTime)) paramSemantic = MUniformParameter::kSemanticTime; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kColor)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kLightColor)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kAmbient)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kLightAmbientColor)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kSpecular)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kLightSpecularColor)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kDiffuse)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kNormal)) paramSemantic = MUniformParameter::kSemanticNormal; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kBump)) paramSemantic = MUniformParameter::kSemanticBump; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kEnvironment)) paramSemantic = MUniformParameter::kSemanticEnvironment; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kPosition)) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kAreaPosition0)) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kAreaPosition1)) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kAreaPosition2)) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kAreaPosition3)) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kDirection)) paramSemantic = convertSpace( MUniformParameter::kSemanticViewDir); else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kShadowMap)) paramSemantic = MUniformParameter::kSemanticColorTexture; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kShadowColor)) paramSemantic = MUniformParameter::kSemanticColor; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kShadowFlag)) paramSemantic = MUniformParameter::kSemanticUnknown; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kShadowMapBias)) paramSemantic = MUniformParameter::kSemanticUnknown; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kShadowMapMatrix)) paramSemantic = MUniformParameter::kSemanticUnknown; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kShadowMapXForm)) paramSemantic = MUniformParameter::kSemanticUnknown; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kStandardsGlobal)) paramSemantic = MUniformParameter::kSemanticUnknown; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kTranspDepthTexture)) paramSemantic = MUniformParameter::kSemanticTranspDepthTexture; else if( !_stricmp( mDesc.Semantic, dx11ShaderSemantic::kOpaqueDepthTexture)) paramSemantic = MUniformParameter::kSemanticOpaqueDepthTexture; else { logUnrecognisedSemantic(mDesc.Semantic); } } // Next, try annotation semantic if( paramSemantic == MUniformParameter::kSemanticUnknown) { LPCSTR sasSemantic; if( getAnnotation( dx11ShaderAnnotation::kSasBindAddress, sasSemantic) && sasSemantic && *sasSemantic) { MString str( sasSemantic); if( !_stricmp( sasSemantic, dx11ShaderAnnotationValue::kSas_Skeleton_MeshToJointToWorld_0_)) paramSemantic = MUniformParameter::kSemanticWorldMatrix; else if( !_stricmp( sasSemantic, dx11ShaderAnnotationValue::kSas_Camera_WorldToView)) paramSemantic = MUniformParameter::kSemanticViewMatrix; else if( !_stricmp( sasSemantic, dx11ShaderAnnotationValue::kSas_Camera_Projection)) paramSemantic = MUniformParameter::kSemanticProjectionMatrix; else if( !_stricmp( sasSemantic, dx11ShaderAnnotationValue::kSas_Time_Now)) paramSemantic = MUniformParameter::kSemanticTime; else if( str.rindexW( dx11ShaderAnnotationValue::k_Position) >= 0) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( str.rindexW( dx11ShaderAnnotationValue::k_Direction) >= 0 && str.rindexW( dx11ShaderAnnotationValue::k_Direction) != str.rindexW( dx11ShaderAnnotationValue::k_Directional)) paramSemantic = convertSpace( MUniformParameter::kSemanticViewDir); else { logUnrecognisedSemantic(sasSemantic); } } } // Next try control type if( paramSemantic == MUniformParameter::kSemanticUnknown) { LPCSTR sasSemantic; if( (getAnnotation( dx11ShaderAnnotation::kSasUiControl, sasSemantic) || getAnnotation( dx11ShaderAnnotation::kUIWidget, sasSemantic)) && *sasSemantic) { if( !_stricmp( sasSemantic, dx11ShaderAnnotationValue::kColorPicker)) paramSemantic = MUniformParameter::kSemanticColor; } } // As a last ditch effort, look for an obvious parameter name if( paramSemantic == MUniformParameter::kSemanticUnknown && !mDesc.Semantic && mDescType.Class == D3D_SVC_VECTOR && (mDescType.Type == D3D_SVT_FLOAT || mDescType.Type == D3D_SVT_DOUBLE) && mDescType.Rows == 1 && mDescType.Columns >= 3 && mDescType.Columns <= 4 ) { MString name( mDesc.Name); if( name.rindexW( dx11ShaderAnnotationValue::kPosition) >= 0) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldPos); else if( name.rindexW( dx11ShaderAnnotationValue::kDirection) >= 0 && name.rindexW( dx11ShaderAnnotationValue::kDirection) != name.rindexW( dx11ShaderAnnotationValue::kDirectional)) paramSemantic = convertSpace( MUniformParameter::kSemanticWorldDir); else if( name.rindexW( dx11ShaderAnnotationValue::kColor) >= 0 || name.rindexW( dx11ShaderAnnotationValue::kColour) >= 0 || name.rindexW( dx11ShaderAnnotationValue::kDiffuse) >= 0 || name.rindexW( dx11ShaderAnnotationValue::kSpecular) >= 0 || name.rindexW( dx11ShaderAnnotationValue::kAmbient) >= 0) paramSemantic = MUniformParameter::kSemanticColor; } return paramSemantic; }
double Space::getLocalY(double physicalY) const { return convertSpace(physicalY, 0, physicalHeight, minY, sizeY()); }
double Point::physicalY() const { return convertSpace(y, space.getMinimumY(), space.sizeY(), 0, physicalHeight); }
double Space::getLocalX(double physicalX) const { return convertSpace(physicalX, 0, physicalWidth, minX, sizeX()); }
double Point::physicalX() const { return convertSpace(x, space.getMinimumX(), space.sizeX(), 0, physicalWidth); }