/// <summary> /// /// </summary> /// <param name="ambient"></param> /// <param name="diffuse"></param> /// <param name="specular"></param> /// <param name="emissive"></param> /// <param name="shininess"></param> public override void SetSurfaceParams(ColorEx ambient, ColorEx diffuse, ColorEx specular, ColorEx emissive, float shininess, TrackVertexColor tracking) { // TODO: Cache color values to prune unneccessary setting if (cache.materialAmbient.CompareTo(ambient) == 0 && cache.materialDiffuse.CompareTo(diffuse) == 0 && cache.materialSpecular.CompareTo(specular) == 0 && cache.materialEmissive.CompareTo(emissive) == 0 && cache.materialShininess == shininess && cache.materialTracking == tracking) return; cache.materialAmbient = ambient.Clone(); cache.materialDiffuse = diffuse.Clone(); cache.materialSpecular = specular.Clone(); cache.materialEmissive = emissive.Clone(); cache.materialShininess = shininess; cache.materialTracking = tracking; // create a new material based on the supplied params D3D.Material mat = new D3D.Material(); mat.Diffuse = diffuse.ToColor(); mat.Ambient = ambient.ToColor(); mat.Specular = specular.ToColor(); mat.Emissive = emissive.ToColor(); mat.SpecularSharpness = shininess; // set the current material device.Material = mat; if (tracking != TrackVertexColor.None) { SetRenderState(ref cache.colorVertex, RenderStates.ColorVertex, true); device.SetRenderState(RenderStates.AmbientMaterialSource, (int)(((tracking & TrackVertexColor.Ambient) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material)); device.SetRenderState(RenderStates.DiffuseMaterialSource, (int)(((tracking & TrackVertexColor.Diffuse) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material)); device.SetRenderState(RenderStates.SpecularMaterialSource, (int)(((tracking & TrackVertexColor.Specular) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material)); device.SetRenderState(RenderStates.EmissiveMaterialSource, (int)(((tracking & TrackVertexColor.Emissive) != 0) ? D3D.ColorSource.Color1 : D3D.ColorSource.Material)); } else SetRenderState(ref cache.colorVertex, RenderStates.ColorVertex, false); }
public override void SetTextureBorderColor(int stage, ColorEx borderColor) { if (cache.textureBorderColor[stage].CompareTo(borderColor) != 0) { cache.textureBorderColor[stage] = borderColor; device.SamplerState[stage].BorderColor = borderColor.ToColor(); } }
/// <summary> /// /// </summary> /// <param name="mode"></param> /// <param name="color"></param> /// <param name="density"></param> /// <param name="start"></param> /// <param name="end"></param> public override void SetFog(Axiom.Graphics.FogMode mode, ColorEx color, float density, float start, float end) { //log.InfoFormat("D3D9RenderSystem.SetFog: mode {0}, color {1}, density {2}, start {3}, end {4}", // mode, color, density, start, end); // disable fog if set to none if(mode == FogMode.None) { if (cache.fogTableMode != D3D.FogMode.None) { cache.fogTableMode = D3D.FogMode.None; device.RenderState.FogTableMode = D3D.FogMode.None; } if (cache.fogVertexMode != D3D.FogMode.None) { cache.fogVertexMode = D3D.FogMode.None; device.RenderState.FogVertexMode = D3D.FogMode.None; } if (cache.fogEnable) { cache.fogEnable = false; device.RenderState.FogEnable = false; } } else { // enable fog D3D.FogMode d3dFogMode = D3DHelper.ConvertEnum(mode); if (!cache.fogEnable) { cache.fogEnable = true; device.RenderState.FogEnable = true; } if (cache.fogVertexMode != d3dFogMode) { cache.fogVertexMode = d3dFogMode; device.RenderState.FogVertexMode = d3dFogMode; } if (cache.fogTableMode != D3D.FogMode.None) { cache.fogTableMode = D3D.FogMode.None; device.RenderState.FogTableMode = D3D.FogMode.None; } if (cache.fogColor.CompareTo(color) != 0) { cache.fogColor = color.Clone(); device.RenderState.FogColor = color.ToColor(); } if (cache.fogStart != start) { cache.fogStart = start; device.RenderState.FogStart = start; } if (cache.fogEnd != end) { cache.fogEnd = end; device.RenderState.FogEnd = end; } if (cache.fogDensity != density) { cache.fogDensity = density; device.RenderState.FogDensity = density; } } }