//
// 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;
}
Exemplo n.º 2
0
double Space::getLocalY(double physicalY) const {
    return convertSpace(physicalY, 0, physicalHeight, minY, sizeY());
}
Exemplo n.º 3
0
double Point::physicalY() const {
    return convertSpace(y, space.getMinimumY(), space.sizeY(), 0, physicalHeight);
}
Exemplo n.º 4
0
double Space::getLocalX(double physicalX) const {
    return convertSpace(physicalX, 0, physicalWidth, minX, sizeX());
}
Exemplo n.º 5
0
double Point::physicalX() const {
    return convertSpace(x, space.getMinimumX(), space.sizeX(), 0, physicalWidth);
}