예제 #1
0
        public async System.Threading.Tasks.Task <bool> InitPassForViewportView(CRenderContext RHICtx, Graphics.CGfxShadingEnv shadingEnv, Graphics.CGfxMaterialInstance MtlInst,
                                                                                Graphics.Mesh.CGfxMesh ViewportMesh)
        {
            var effect = GetEffect(RHICtx, shadingEnv.EnvCode, MtlInst, ViewportMesh);

            if (effect == null)
            {
                return(false);
            }
            await effect.AwaitLoad();

            if (effect.ShaderProgram == null)
            {
                return(false);
            }

            this.ShadingEnv = shadingEnv;
            this.Effect     = effect;
            this.mMtlInst   = MtlInst;
            this.MtlMesh    = ViewportMesh.MtlMeshArray[0];
            if (mRenderPipeline == null)
            {
                var RplDesc = new CRenderPipelineDesc();
                RenderPipeline = RHICtx.CreateRenderPipeline(RplDesc);
            }

            BindCBuffer(effect.ShaderProgram, effect.CacheData.PerInstanceId, ViewportMesh.MtlMeshArray[0].CBuffer);
            BindCBuffer(effect.ShaderProgram, effect.CacheData.PerFrameId, CEngine.Instance.PerFrameCBuffer);

            this.BindGeometry(ViewportMesh.MeshPrimitives, 0, 0);

            PreUse();

            return(true);
        }
예제 #2
0
        public void InitPass(CRenderContext RHICtx, Graphics.CGfxEffect effect, Graphics.CGfxShadingEnv shadingEnv, Graphics.Mesh.CGfxMtlMesh mesh, UInt32 index)
        {
            if (IsEffectValid == 2)
            {
                if (Effect != effect)
                {
                    Effect = effect;
                    if (Effect.CacheData.PerFrameId != UInt32.MaxValue)
                    {
                        BindCBuffer(Effect.ShaderProgram, Effect.CacheData.PerFrameId, CEngine.Instance.PerFrameCBuffer);
                    }
                }
            }
            ShadingEnv = shadingEnv;
            Effect     = effect;
            MtlMesh    = mesh;
            MeshIndex  = index;

            if (mRenderPipeline == null)
            {
                var RplDesc = new CRenderPipelineDesc();
                RenderPipeline = RHICtx.CreateRenderPipeline(RplDesc);
            }

            this.BindGeometry(MtlMesh.mRootSceneMesh.MeshPrimitives, index, 0);
        }
예제 #3
0
 public void BindShaderTextures(Graphics.Mesh.CGfxMtlMesh mesh)
 {
     if (mesh.Textures.Count == 0)
     {
         return;
     }
     using (var i = mesh.Textures.GetEnumerator())
     {
         while (i.MoveNext())
         {
             ShaderResources.PSBindTexture(i.Current.Key, i.Current.Value);
         }
     }
 }