예제 #1
0
파일: ShaderCache.cs 프로젝트: fealty/Frost
 void IShaderCompiler.Compile(string text, string function, ref ShaderHandle result)
 {
     if(!result.IsValid || result.Reference != this)
     {
         Compile(text, function, out result);
     }
 }
예제 #2
0
파일: ShaderCache.cs 프로젝트: fealty/Frost
        public PixelShader Resolve(ShaderHandle shader)
        {
            if(shader.IsValid && shader.Reference == this)
            {
                return _Shaders[shader.Index];
            }

            return null;
        }
예제 #3
0
파일: ShaderCache.cs 프로젝트: fealty/Frost
        private void Compile(string text, string function, out ShaderHandle result)
        {
            Contract.Requires(!String.IsNullOrEmpty(text));
            Contract.Requires(!String.IsNullOrEmpty(function));

            const ShaderFlags flags = ShaderFlags.OptimizationLevel3;

            text = text.Insert(0, PredefinedConstants.ShaderText);

            using(var byteCode = ShaderBytecode.Compile(text, function, "ps_4_0", flags))
            {
                PixelShader shader = new PixelShader(_Device3D, byteCode);

                try
                {
                    _Shaders.Add(shader);
                }
                catch
                {
                    shader.Dispose();

                    throw;
                }

                _CachedShaderCount.Value = _Shaders.Count;
            }

            result = new ShaderHandle(_Shaders.Count - 1, this);
        }
예제 #4
0
 public void Compile(string text, string function, ref ShaderHandle result)
 {
     Contract.Requires(!string.IsNullOrEmpty(text));
     Contract.Requires(!string.IsNullOrEmpty(function));
 }