public ShaderLight( Effect fx, EffectHandle elem ) { this.fx = fx; diffuse = fx.GetParameterBySemantic( elem, "DIFFUSE" ); ndlBias = fx.GetParameterBySemantic( elem, "NDLBIAS" ); specular = fx.GetParameterBySemantic( elem, "SPECULAR" ); specSharpness = fx.GetParameterBySemantic( elem, "SPECULARSHARPNESS" ); direction = fx.GetParameterBySemantic( elem, "DIRECTION" ); }
public static ShaderLight[] GetLights( Effect fx ) { EffectHandle lights = fx.GetParameterBySemantic( null, "LIGHTS" ); int count = fx.GetParameterDescription( lights ).Elements; ShaderLight[] ret = new ShaderLight[count]; for( int i = 0; i < ret.Length; i++ ) ret[i] = new ShaderLight( fx, fx.GetParameterElement( lights, i ) ); return ret; }
private void LoadSurfaceShaders() { shaders.Clear(); Libx42.Model m = model.Model; if( m == null ) return; Device device = pn3D.Device; string errs; shadedEffect = Effect.FromFile( device, Path.Combine( Application.StartupPath, "Media/ShadedPreview.fx" ), null, null, ShaderFlags.None, null, out errs ); ehMv = shadedEffect.GetParameterBySemantic( null, "MODELVIEW" ); ehMvp = shadedEffect.GetParameterBySemantic( null, "MODELVIEWPROJECTION" ); ehCamPos = shadedEffect.GetParameterBySemantic( null, "CAMERAPOSITION" ); ehAmbient = shadedEffect.GetParameterBySemantic( null, "LIGHTAMBIENT" ); shaderLights = ShaderLight.GetLights( shadedEffect ); ehBumpUnpack = shadedEffect.GetParameterBySemantic( null, "BUMPUNPACK" ); defaultDiffuse = TextureLoader.FromFile( device, Path.Combine( Application.StartupPath, "Media/DefaultDiffuse.bmp" ), 0, 0, 0, Usage.None, Format.Unknown, Pool.Managed, Filter.Box, Filter.Box, 0 ); defaultNormal = TextureLoader.FromFile( device, Path.Combine( Application.StartupPath, "Media/DefaultNormal.bmp" ), 0, 0, 0, Usage.None, Format.Unknown, Pool.Managed, Filter.Box, Filter.Box, 0 ); foreach( Libx42.Group g in m.Groups ) { if( shaders.ContainsKey( g.MaterialName ) ) continue; SurfaceShader shader = LoadSurfaceShader( g.MaterialName ); if( shader != null ) shaders.Add( g.MaterialName, shader ); } surfaceShadersLoaded = true; }