5 using System.Runtime.InteropServices;
6 using SiliconStudio.Core.Diagnostics;
7 using SiliconStudio.Core.IO;
8 using SiliconStudio.Core.Serialization;
9 using SiliconStudio.Core.Storage;
10 using SiliconStudio.Paradox.Effects;
11 using SiliconStudio.Paradox.Effects.Data;
12 using SiliconStudio.Paradox.Shaders.Compiler;
14 namespace SiliconStudio.
Paradox.Shaders
21 private static object generatorLock =
new object();
29 private IntPtr buffer;
34 buffer = Marshal.AllocHGlobal(65536);
38 writer.Context.SerializerSelector.RegisterProfile(
"Default");
42 if (parameters == null)
56 if (generator == null)
60 return generator.ComputeInternal(mixin, mixinParameters);
67 memStream.Position = 0;
71 parameters.Set(CompilerParameters.GraphicsPlatformKey, mixinParameters.Get(CompilerParameters.GraphicsPlatformKey));
72 parameters.Set(CompilerParameters.GraphicsProfileKey, mixinParameters.Get(CompilerParameters.GraphicsProfileKey));
73 parameters.Set(CompilerParameters.DebugKey, mixinParameters.Get(CompilerParameters.DebugKey));
74 writer.Write(parameters);
77 objectIdBuilder.Reset();
78 objectIdBuilder.Write((byte*)buffer, (
int)memStream.Position);
82 ids.CompileParametersId = objectIdBuilder.ComputeHash();
84 memStream.Position = 0;
86 writer.Write(mixinParameters);
87 objectIdBuilder.Reset();
88 objectIdBuilder.Write((byte*)buffer, (
int)memStream.Position);
89 ids.FullParametersId = objectIdBuilder.ComputeHash();
Parameters used for mixin.
A helper class to compute a unique object id for a ShaderMixinSource.
static EffectObjectIds Compute(ShaderMixinSource mixin, ShaderMixinParameters mixinParameters)
Computes a hash ObjectId for the specified mixin.
A mixin performing a combination of ShaderClassSource and other mixins.
ObjectId CompileParametersId
Serializer context. It holds DataSerializer{T} objects and their factories.
A MemoryStream over a native memory region.
A hash to uniquely identify data.
ObjectId FullParametersId
A container to handle a hierarchical collection of effect variables.