/// <summary> /// Copies this effect, creating a new instance. /// </summary> /// <returns>Cloned instance of the effect</returns> public override EffectImplementation Clone() { D3D10EffectImplementation impl = new D3D10EffectImplementation(this, _profileName, _sFlags, _eFlags); impl.ResourceID = base.ResourceID; return(impl); }
/// <summary> /// Creates a new instance of <see cref="D3D10EffectImplementation"/>. Used for cloning. /// </summary> /// <param name="cloneSource">The implementation source to clone from</param> /// <param name="profileName">Name of the shader profile.</param> /// <param name="sFlags">The shader flags.</param> /// <param name="eFlags">The effect flags.</param> internal D3D10EffectImplementation(D3D10EffectImplementation cloneSource, String profileName, D3DC.ShaderFlags sFlags, D3DC.EffectFlags eFlags) { _cachedByteCode = cloneSource._cachedByteCode; _renderer = cloneSource._renderer; _graphicsDevice = cloneSource._graphicsDevice; _profileName = profileName; _sFlags = sFlags; _eFlags = eFlags; _effect = D3D.Effect.FromMemory(_graphicsDevice, _cachedByteCode, _profileName, _sFlags, _eFlags, null, null, null); //Add to resource tracker _renderer.Resources.AddTrackedObject(_effect.ComPointer, this); //Clone techniques and parameters D3D10EffectTechniqueCollection techniques = cloneSource.Techniques as D3D10EffectTechniqueCollection; D3D10EffectParameterCollection parameters = cloneSource.Parameters as D3D10EffectParameterCollection; base.SetTechniques(techniques.Clone(_effect, this)); base.SetParameters(parameters.Clone(_effect)); _currentTechnique = (D3D10EffectTechnique)base.Techniques[0]; }