Пример #1
0
 private static FixedFunction.ShadingConfiguration CreateShadingConfiguration(W3dShader w3dShader)
 {
     return(new FixedFunction.ShadingConfiguration
     {
         DiffuseLightingType = w3dShader.PrimaryGradient.ToDiffuseLightingType(),
         SpecularEnabled = (w3dShader.SecondaryGradient == W3dShaderSecondaryGradient.Enable) ? 1u : 0u,
         TexturingEnabled = (w3dShader.Texturing == W3dShaderTexturing.Enable) ? 1u : 0u,
         SecondaryTextureColorBlend = w3dShader.DetailColorFunc.ToSecondaryTextureBlend(),
         SecondaryTextureAlphaBlend = w3dShader.DetailAlphaFunc.ToSecondaryTextureBlend(),
         AlphaTest = (w3dShader.AlphaTest == W3dShaderAlphaTest.Enable) ? 1u : 0u
     });
 }
Пример #2
0
        // One ModelMeshPart for each unique shader in a W3D_CHUNK_MATERIAL_PASS.
        private static ModelMeshPart CreateModelMeshPart(
            uint startIndex,
            uint indexCount,
            W3dMesh w3dMesh,
            W3dShader w3dShader)
        {
            var rasterizerState = RasterizerStateDescription.CullBackSolid;

            rasterizerState.CullMode = w3dMesh.Header.Attributes.HasFlag(W3dMeshFlags.TwoSided)
                ? CullMode.None
                : CullMode.CullBack;

            var depthState = DepthStencilStateDescription.Default;

            depthState.IsDepthEnabled      = true;
            depthState.IsDepthWriteEnabled = w3dShader.DepthMask == W3dShaderDepthMask.WriteEnable;
            // TODO: DepthCompare

            var blendState = BlendStateDescription.Opaque;

            blendState.Enabled = w3dShader.SrcBlend != W3dShaderSrcBlendFunc.One ||
                                 w3dShader.DestBlend != W3dShaderDestBlendFunc.Zero;
            blendState.SourceBlend      = w3dShader.SrcBlend.ToBlend();
            blendState.DestinationBlend = w3dShader.DestBlend.ToBlend();

            var pipelineStateHandle = new EffectPipelineState(
                rasterizerState,
                depthState,
                blendState)
                                      .GetHandle();

            return(new ModelMeshPart(
                       startIndex,
                       indexCount,
                       w3dShader.AlphaTest == W3dShaderAlphaTest.Enable,
                       w3dShader.Texturing == W3dShaderTexturing.Enable,
                       pipelineStateHandle));
        }