public TerrainMaterial(Effect effect) : base(effect) { SetProperty("Sampler", effect.GraphicsDevice.SamplerAnisotropicWrap); PipelineState = new EffectPipelineState( RasterizerStateDescription.CullBackSolid, DepthStencilStateDescription.Default, BlendStateDescription.Opaque); }
public WaterMaterial(ContentManager contentManager, Effect effect) : base(contentManager, effect) { SetProperty("Sampler", contentManager.GraphicsDevice.Aniso4xSampler); PipelineState = new EffectPipelineState( RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise, DepthStencilStateDescription.DepthOnlyLessEqualRead, BlendStateDescription.SingleAlphaBlend, RenderPipeline.GameOutputDescription); }
public TerrainMaterial(ContentManager contentManager, Effect effect) : base(contentManager, effect) { SetProperty("Sampler", contentManager.GraphicsDevice.Aniso4xSampler); PipelineState = new EffectPipelineState( RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise, DepthStencilStateDescription.DepthOnlyLessEqual, BlendStateDescription.SingleDisabled, contentManager.GraphicsDevice.SwapchainFramebuffer.OutputDescription); }
public RoadMaterial(ContentManager contentManager, Effect effect) : base(contentManager, effect) { SetProperty("Sampler", contentManager.GraphicsDevice.Aniso4xSampler); PipelineState = new EffectPipelineState( RasterizerStateDescriptionUtility.CullNoneSolid, // TODO DepthStencilStateDescription.DepthOnlyLessEqualRead, BlendStateDescription.SingleAlphaBlend, RenderPipeline.GameOutputDescription); }
// 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)); }
internal EffectPipelineStateHandle(EffectPipelineState effectPipelineState) { EffectPipelineState = effectPipelineState; }
protected override Scene LoadEntry(FileSystemEntry entry, ContentManager contentManager, ResourceUploadBatch uploadBatch) { contentManager.IniDataContext.LoadIniFile(@"Data\INI\Terrain.ini"); var mapFile = MapFile.FromFileSystemEntry(entry); var result = new Scene(); result.Settings.LightingConfigurations = mapFile.GlobalLighting.LightingConfigurations.ToLightSettingsDictionary(); result.Settings.TimeOfDay = mapFile.GlobalLighting.Time; var heightMap = new HeightMap(mapFile.HeightMapData); result.HeightMap = heightMap; var terrainEntity = new Entity(); result.Entities.Add(terrainEntity); terrainEntity.Components.Add(new TerrainComponent { HeightMap = heightMap }); var terrainEffect = AddDisposable(new TerrainEffect( contentManager.GraphicsDevice, mapFile.BlendTileData.Textures.Length)); var pipelineStateSolid = new EffectPipelineState( RasterizerStateDescription.CullBackSolid, DepthStencilStateDescription.Default, BlendStateDescription.Opaque) .GetHandle(); var indexBufferCache = AddDisposable(new TerrainPatchIndexBufferCache(contentManager.GraphicsDevice)); CreatePatches( contentManager.GraphicsDevice, uploadBatch, terrainEntity, heightMap, mapFile.BlendTileData, terrainEffect, pipelineStateSolid, indexBufferCache); var tileDataTexture = AddDisposable(CreateTileDataTexture( contentManager.GraphicsDevice, uploadBatch, mapFile, heightMap)); var cliffDetailsBuffer = AddDisposable(CreateCliffDetails( contentManager.GraphicsDevice, uploadBatch, mapFile)); CreateTextures( contentManager, uploadBatch, mapFile.BlendTileData, out var textures, out var textureDetails); var textureDetailsBuffer = AddDisposable(StaticBuffer.Create( contentManager.GraphicsDevice, uploadBatch, textureDetails)); var textureSet = AddDisposable(new TextureSet( contentManager.GraphicsDevice, textures)); terrainEffect.SetTileData(tileDataTexture); terrainEffect.SetCliffDetails(cliffDetailsBuffer); terrainEffect.SetTextureDetails(textureDetailsBuffer); terrainEffect.SetTextures(textureSet); var objectsEntity = new Entity(); result.Entities.Add(objectsEntity); LoadObjects( contentManager, objectsEntity, heightMap, mapFile.ObjectsList.Objects, result.Settings); foreach (var team in mapFile.SidesList.Teams) { var name = (string)team.Properties["teamName"].Value; var owner = (string)team.Properties["teamOwner"].Value; var isSingleton = (bool)team.Properties["teamIsSingleton"].Value; } foreach (var waypointPath in mapFile.WaypointsList.WaypointPaths) { var start = result.Settings.Waypoints[waypointPath.StartWaypointID]; var end = result.Settings.Waypoints[waypointPath.EndWaypointID]; result.Settings.WaypointPaths[start.Name] = new Settings.WaypointPath( start, end); } var scriptsEntity = new Entity(); result.Entities.Add(scriptsEntity); // TODO: Don't hardcode this. // Perhaps add one ScriptComponent for the neutral player, // and one for the active player. var scriptList = mapFile.SidesList.PlayerScripts.ScriptLists[0]; AddScripts(scriptsEntity, scriptList, result.Settings); return(result); }