public CShaderSamplers GetSamplerBinder_PickedEditor(CRenderContext RHICtx, CShaderProgram shader) { if (shader == null) { return(null); } if (mSamplerBinder_PickedEditor == null) { mSamplerBinder_PickedEditor = new CShaderSamplers(); using (var it = MtlInst.Material.GetSamplerStateDescs().GetEnumerator()) { while (it.MoveNext()) { var name = it.Current.Key; var samplerDesc = it.Current.Value; CSamplerBindInfo info = new CSamplerBindInfo(); if (shader.FindSamplerBindInfoByShaderName(MtlInst, name, ref info)) { CSamplerState SamplerState = CEngine.Instance.SamplerStateManager.GetSamplerState(RHICtx, samplerDesc); mSamplerBinder_PickedEditor.PSBindSampler(info.PSBindPoint, SamplerState); } else { var defaultSamplerDesc = new CSamplerStateDesc(); defaultSamplerDesc.SetDefault(); CSamplerState SamplerState = CEngine.Instance.SamplerStateManager.GetSamplerState(RHICtx, defaultSamplerDesc); mSamplerBinder_PickedEditor.PSBindSampler(info.PSBindPoint, SamplerState); } } } } return(mSamplerBinder_PickedEditor); }
public CShaderSamplers GetSamplerBinder_Shadow(CRenderContext RHICtx, CShaderProgram shader) { if (shader == null) { return(null); } if (mSamplerBinder_Shadow == null) { mSamplerBinder_Shadow = new CShaderSamplers(); //var SamplerDesc = new CSamplerStateDesc(); //SamplerDesc.SetDefault(); //for (UInt32 i = 0; i < shader.SamplerNumber; i++) //{ // CSamplerBindInfo info = new CSamplerBindInfo(); // shader.GetSamplerBindInfo(i, ref info); // MtlInst.GetSamplerStateDesc(i, ref SamplerDesc); // CSamplerState SamplerState = CEngine.Instance.SamplerStateManager.GetSamplerState(RHICtx, SamplerDesc); // mSamplerBinder_Shadow.PSBindSampler(info.PSBindPoint, SamplerState); //} using (var it = MtlInst.Material.GetSamplerStateDescs().GetEnumerator()) { while (it.MoveNext()) { var name = it.Current.Key; var samplerDesc = it.Current.Value; CSamplerBindInfo info = new CSamplerBindInfo(); if (shader.FindSamplerBindInfoByShaderName(MtlInst, name, ref info)) { CSamplerState SamplerState = CEngine.Instance.SamplerStateManager.GetSamplerState(RHICtx, samplerDesc); mSamplerBinder_Shadow.PSBindSampler(info.PSBindPoint, SamplerState); } else { var defaultSamplerDesc = new CSamplerStateDesc(); defaultSamplerDesc.SetDefault(); CSamplerState SamplerState = CEngine.Instance.SamplerStateManager.GetSamplerState(RHICtx, defaultSamplerDesc); mSamplerBinder_Shadow.PSBindSampler(info.PSBindPoint, SamplerState); } } } } return(mSamplerBinder_Shadow); }
public void GetSamplerBinder(CRenderContext RHICtx, CShaderProgram shader, CShaderSamplers sampler) { if (shader == null || MtlInst.Material.GetSamplerStateDescs().Count <= 0) { return; } using (var it = MtlInst.Material.GetSamplerStateDescs().GetEnumerator()) { while (it.MoveNext()) { var name = it.Current.Key; var samplerDesc = it.Current.Value; CSamplerBindInfo info = new CSamplerBindInfo(); if (shader.FindSamplerBindInfoByShaderName(MtlInst, name, ref info)) { CSamplerState SamplerState = CEngine.Instance.SamplerStateManager.GetSamplerState(RHICtx, samplerDesc); sampler.PSBindSampler(info.PSBindPoint, SamplerState); } } } }
public void SetPassData(CRenderContext rc, CGfxMesh mesh, UInt32 index, CGfxSceneView vp, CPass pass) { //OnEffectRefresh(rc); if (pass.RenderPipeline == null) { var rplDesc = new CRenderPipelineDesc(); pass.RenderPipeline = rc.CreateRenderPipeline(rplDesc); } pass.RenderPipeline.ShaderProgram = mEffect.ShaderProgram; pass.RenderPipeline.RasterizerState = mMaterial.RasterizerState; pass.RenderPipeline.DepthStencilState = mMaterial.DepthStencilState; pass.RenderPipeline.BlendState = mMaterial.BlendState; pass.GeometryMesh = mesh.MeshPrimitives.GeometryMesh; pass.BindCBuffer(mEffect.ShaderProgram, mEffect.PerInstanceId, CBuffer); pass.BindCBuffer(mEffect.ShaderProgram, mEffect.PerFrameId, CEngine.Instance.PerFrameCBuffer); if (vp != null) { pass.ViewPort = vp.Viewport; } var textures = new CShaderResources(); { Material.BindTextures(textures, mEffect.ShaderProgram); foreach (var i in Textures) { textures.PSBindTexture(i.Key, i.Value); } mesh.ShadingEnv.BindResources(mesh, CBuffer, textures, mEffect.ShaderProgram); } pass.ShaderResources = textures; CShaderSamplers samplers = new CShaderSamplers(); { CSamplerStateDesc sampDesc = new CSamplerStateDesc(); sampDesc.SetDefault(); sampDesc.Filter = ESamplerFilter.SPF_MIN_MAG_MIP_POINT; CSamplerState samp = CEngine.Instance.SamplerStateManager.GetSamplerState(rc, sampDesc); for (UInt32 i = 0; i < mEffect.ShaderProgram.SamplerNumber; i++) { CSamplerBindInfo info = new CSamplerBindInfo(); mEffect.ShaderProgram.GetSamplerBindInfo(i, ref info); samplers.PSBindSampler(info.PSBindPoint, samp); } } pass.ShaderSamplers = samplers; foreach (var i in mesh.MdfQueue.Modifiers) { i.OnSetPassData(pass); } CDrawPrimitiveDesc dpDesc = new CDrawPrimitiveDesc(); mesh.MeshPrimitives.GetAtom(index, 0, ref dpDesc); pass.BindDrawPrimitive(ref dpDesc); }
public void DrawScene(CRenderContext rc, CCommandList cmd, Graphics.CGfxCamera Camera, Graphics.View.CGfxSceneView view) { if (EnableDraw == false) { return; } if (mNeedUpdateGpuBuffer) { mNeedUpdateGpuBuffer = false; UpdateGpuBuffer(rc, cmd, Camera); } var program = mPass.Effect.ShaderProgram; if (UseComputeShader == false) { UpdateIndexBufferCPU(cmd, Camera); } else { ComputeDispatch(rc, cmd, Camera); } if (UseVTF) { CTextureBindInfo tbInfo = new CTextureBindInfo(); if (program.FindTextureBindInfo(null, "gVertexTexture", ref tbInfo)) { mPass.ShaderResources.VSBindTexture(tbInfo.VSBindPoint, mVertexTextureView); } if (program.FindTextureBindInfo(null, "gInstanceDataTexture", ref tbInfo)) { mPass.ShaderResources.VSBindTexture(tbInfo.VSBindPoint, mInstanceDataTextureView); } var spInfo = new CSamplerBindInfo(); if (program.FindSamplerBindInfo(null, "Samp_gVertexTexture", ref spInfo)) { mPass.ShaderSamplerBinder.VSBindSampler(spInfo.VSBindPoint, mSamplerState); } if (program.FindSamplerBindInfo(null, "Samp_gInstanceDataTexture", ref spInfo)) { mPass.ShaderSamplerBinder.VSBindSampler(spInfo.VSBindPoint, mSamplerState); } } else { //CTextureBindInfo tbInfo = new CTextureBindInfo(); //if(program.FindTextureBindInfo(null, "AllVertexArray", ref tbInfo)) //{ // mPass.ShaderResources.VSBindTexture(tbInfo.VSBindPoint, mAllVertexSRV); //} //if (program.FindTextureBindInfo(null, "MeshInstanceArray", ref tbInfo)) //{ // mPass.ShaderResources.VSBindTexture(tbInfo.VSBindPoint, mMeshInstanceSRV); //} mPass.ShaderResources.VSBindTexture(14, mAllVertexSRV); mPass.ShaderResources.VSBindTexture(13, mMeshInstanceSRV); } CConstantBufferDesc cbInfo = new CConstantBufferDesc(); if (mCBMeshBatch != null && program.GetCBufferDesc(program.FindCBuffer("cbMeshBatch"), ref cbInfo)) { mPass.BindCBufferVS(cbInfo.VSBindPoint, mCBMeshBatch); } mPass.ViewPort = Camera.SceneView.Viewport; mPass.BindCBuffer(mPass.Effect.ShaderProgram, mPass.Effect.CacheData.CBID_Camera, Camera.CBuffer); if (view != null) { mPass.BindCBuffer(mPass.Effect.ShaderProgram, mPass.Effect.CacheData.CBID_View, view.SceneViewCB); } //mPass.ViewPort = view.Viewport; if (UseComputeShader == false) { mPass.AttachIndexBuffer = mCpuDrawIndexBuffer; var dpDesc = new CDrawPrimitiveDesc(); dpDesc.SetDefault(); dpDesc.NumPrimitives = mDrawArgs.IndexCountPerInstance / 3; mPass.GeometryMesh.SetAtom(0, 0, ref dpDesc); } else { mPass.AttachIndexBuffer = mDrawIndexBuffer; mPass.SetIndirectDraw(bufferIndirectDrawArgs, 0); } cmd.PushPass(mPass); }