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); }
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); }
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); } } }