Beispiel #1
0
        void CreatePreviewMeshesActor(CGfxMesh mesh)
        {
            if (mesh == null)
            {
                return;
            }
            mPreviewActor = NewMeshActor(mesh);
            mPreviewActor.Placement.Location = new EngineNS.Vector3(0.0f, 0.0f, 0.0f);
            mPreviewSceneControl.AddUniqueActor(mPreviewActor);

            mPreviewActor.GetComponentMesh(null).SetPassUserFlags(1);

            var nu = InitUIDrawer();
        }
Beispiel #2
0
        GActor NewMeshActor(CGfxMesh mesh)
        {
            var rc    = CEngine.Instance.RenderContext;
            var actor = new EngineNS.GamePlay.Actor.GActor();

            actor.ActorId = Guid.NewGuid();
            var placement = new EngineNS.GamePlay.Component.GPlacementComponent();

            actor.Placement = placement;
            var meshComp = new EngineNS.GamePlay.Component.GMeshComponent();

            meshComp.SetSceneMesh(rc.ImmCommandList, mesh);
            actor.AddComponent(meshComp);
            return(actor);
        }
Beispiel #3
0
        public void CookViewportMeshToPassInMultiPassMode(CRenderContext RHICtx, CGfxShadingEnv ShaderEnv, UInt32 ActivePassIndex, CGfxCamera Camera, CGfxMesh ViewportMesh)
        {
            if (ViewportMesh == null)
            {
                Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"ViewportViewError!!!", "");
                System.Diagnostics.Debug.Assert(false);
                return;
            }

            if (ActivePassIndex > mPassArray.Count - 1)
            {
                System.Diagnostics.Debug.Assert(false);
                return;
            }

            ViewportMesh.MeshPrimitives.PreUse(false);

            var refMtlMesh = ViewportMesh.MtlMeshArray[0];

            if (refMtlMesh == null)
            {
                System.Diagnostics.Debug.Assert(false);
                return;
            }

            mPassArray[(int)ActivePassIndex].RenderPipeline.RasterizerState   = mRasterState;
            mPassArray[(int)ActivePassIndex].RenderPipeline.DepthStencilState = mDepthStencilState;
            mPassArray[(int)ActivePassIndex].RenderPipeline.BlendState        = mBlendState;

            mPassArray[(int)ActivePassIndex].BindShaderTextures(refMtlMesh);

            refMtlMesh.GetSamplerBinder(RHICtx, mPassArray[(int)ActivePassIndex].Effect.ShaderProgram, mSampler4Cook);
            mPassArray[(int)ActivePassIndex].ShaderSamplerBinder = mSampler4Cook;

            ShaderEnv.BindResources(ViewportMesh, mPassArray[(int)ActivePassIndex]);

            mPassArray[(int)ActivePassIndex].BindGeometry(ViewportMesh.MeshPrimitives, 0, 0);

            mPassArray[(int)ActivePassIndex].ViewPort = mViewport;

            mPassArray[(int)ActivePassIndex].BindCBuffer(mPassArray[(int)ActivePassIndex].Effect.ShaderProgram, mPassArray[(int)ActivePassIndex].Effect.CacheData.CBID_Camera, Camera.CBuffer);
            mPassArray[(int)ActivePassIndex].BindCBuffer(mPassArray[(int)ActivePassIndex].Effect.ShaderProgram, mPassArray[(int)ActivePassIndex].Effect.CacheData.CBID_View, mScreenViewCB);

            return;
        }
Beispiel #4
0
        public void CookViewportMeshToPass(CRenderContext RHICtx, CGfxShadingEnv ShaderEnv, CGfxCamera Camera, CGfxMesh ViewportMesh)
        {
            if (ViewportMesh == null)
            {
                Profiler.Log.WriteLine(Profiler.ELogTag.Error, "@Graphic", $"ViewportViewError!!!", "");
                System.Diagnostics.Debug.Assert(false);
                return;
            }
            if (mPass == null)
            {
                System.Diagnostics.Debug.Assert(false);
                return;
            }

            ViewportMesh.MeshPrimitives.PreUse(false);

            var refMtlMesh = ViewportMesh.MtlMeshArray[0];

            if (refMtlMesh == null)
            {
                return;
            }

            mPass.RenderPipeline.RasterizerState   = mRasterState;
            mPass.RenderPipeline.DepthStencilState = mDepthStencilState;
            mPass.RenderPipeline.BlendState        = mBlendState;

            mPass.BindShaderTextures(refMtlMesh);

            //if(mPass.ShaderSamplerBinder==null)
            //{
            //    mPass.ShaderSamplerBinder = new CShaderSamplers();
            //}
            //refMtlMesh.GetSamplerBinder(RHICtx, mPass.Effect.ShaderProgram, mPass.ShaderSamplerBinder);
            //var tempSampler = new CShaderSamplers();
            var tempSampler = mCookVPMeshSampler;

            refMtlMesh.GetSamplerBinder(RHICtx, mPass.Effect.ShaderProgram, tempSampler);
            mPass.ShaderSamplerBinder = tempSampler;

            ShaderEnv.BindResources(ViewportMesh, mPass);

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

            mPass.ViewPort = mViewport;

            mPass.BindCBuffer(mPass.Effect.ShaderProgram, mPass.Effect.CacheData.CBID_Camera, Camera.CBuffer);
            mPass.BindCBuffer(mPass.Effect.ShaderProgram, mPass.Effect.CacheData.CBID_View, mScreenViewCB);

            mPass.OnCookRenderData(ShaderEnv, PrebuildPassIndex.PPI_Default);
            return;
        }
Beispiel #5
0
        public async System.Threading.Tasks.Task <bool> InitForMultiPassMode(CRenderContext RHICtx, CGfxScreenViewDesc ViewInfo, List <CGfxShadingEnv> ShadingEnvArray,
                                                                             CGfxMaterialInstance MtlInst, CGfxMesh ViewportMesh)
        {
            if (ShadingEnvArray == null)
            {
                return(false);
            }

            if (ViewportMesh == null)
            {
                var RectMesh = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.FullScreenRectName, true);
                ViewportMesh = CEngine.Instance.MeshManager.CreateMesh(RHICtx, RectMesh);
                ViewportMesh.SetMaterialInstance(RHICtx, 0, await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx,
                                                                                                                                    RName.GetRName("Material/defaultmaterial.instmtl")),
                                                 CEngine.Instance.PrebuildPassData.DefaultShadingEnvs);
                //await ViewportMesh.AwaitEffects();
            }
            mViewInfo = ViewInfo;

            mViewport          = new CViewport();
            mViewport.Width    = ViewInfo.Width;
            mViewport.Height   = ViewInfo.Height;
            mViewport.TopLeftX = 0.0f;
            mViewport.TopLeftY = 0.0f;
            mViewport.MinDepth = 0.0f;
            mViewport.MaxDepth = 1.0f;

            var ShaderProgram = CEngine.Instance.EffectManager.DefaultEffect.ShaderProgram;

            mScreenViewCB = RHICtx.CreateConstantBuffer(ShaderProgram, CEngine.Instance.EffectManager.DefaultEffect.CacheData.CBID_View);
            if (mScreenViewCB == null)
            {
                return(false);
            }
            mIDViewportSizeAndRcp = mScreenViewCB.FindVar("gViewportSizeAndRcp");
            mID_SunPosNDC         = mScreenViewCB.FindVar("gSunPosNDC");
            mID_AoParam           = mScreenViewCB.FindVar("gAoParam");

            CRasterizerStateDesc RSDesc = new CRasterizerStateDesc();

            RSDesc.InitForCustom();
            mRasterState = CEngine.Instance.RasterizerStateManager.GetRasterizerState(RHICtx, RSDesc);

            CDepthStencilStateDesc DSSDesc = new CDepthStencilStateDesc();

            DSSDesc.InitForCustomLayers();
            mDepthStencilState = CEngine.Instance.DepthStencilStateManager.GetDepthStencilState(RHICtx, DSSDesc);

            CBlendStateDesc BlendDesc = new CBlendStateDesc();

            BlendDesc.InitForCustomLayers();
            mBlendState = CEngine.Instance.BlendStateManager.GetBlendState(RHICtx, BlendDesc);

            for (UInt32 idx = 0; idx < ShadingEnvArray.Count; idx++)
            {
                var refPass = RHICtx.CreatePass();
                if (false == await refPass.InitPassForViewportView(RHICtx, ShadingEnvArray[(int)idx], MtlInst, ViewportMesh))
                {
                    return(false);
                }
                mPassArray.Add(refPass);
            }

            return(OnResize(RHICtx, null, ViewInfo.Width, ViewInfo.Height));
        }
Beispiel #6
0
        public async System.Threading.Tasks.Task <bool> Init(CRenderContext RHICtx, CSwapChain SwapChain,
                                                             CGfxScreenViewDesc ViewInfo, CGfxShadingEnv ShadingEnv, CGfxMaterialInstance MtlInst, CGfxMesh ViewportMesh)
        {
            if (ShadingEnv == null)
            {
                return(false);
            }
            if (ViewportMesh == null)
            {
                var ScreenAlignedTriangle = CEngine.Instance.MeshPrimitivesManager.GetMeshPrimitives(RHICtx, CEngineDesc.ScreenAlignedTriangleName, true);
                ViewportMesh = CEngine.Instance.MeshManager.CreateMesh(RHICtx, ScreenAlignedTriangle);
                ViewportMesh.SetMaterialInstance(RHICtx, 0, await CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(RHICtx,
                                                                                                                                    RName.GetRName("Material/defaultmaterial.instmtl")),
                                                 CEngine.Instance.PrebuildPassData.DefaultShadingEnvs);
                //await ViewportMesh.AwaitEffects();
            }
            mViewInfo = ViewInfo;

            mViewport          = new CViewport();
            mViewport.Width    = ViewInfo.Width;
            mViewport.Height   = ViewInfo.Height;
            mViewport.TopLeftX = 0.0f;
            mViewport.TopLeftY = 0.0f;
            mViewport.MinDepth = 0.0f;
            mViewport.MaxDepth = 1.0f;

            var ShaderProgram = CEngine.Instance.EffectManager.DefaultEffect.ShaderProgram;

            mScreenViewCB = RHICtx.CreateConstantBuffer(ShaderProgram, CEngine.Instance.EffectManager.DefaultEffect.CacheData.CBID_View);
            if (mScreenViewCB == null)
            {
                return(false);
            }

            mIDViewportSizeAndRcp       = mScreenViewCB.FindVar("gViewportSizeAndRcp");
            mID_SunPosNDC               = mScreenViewCB.FindVar("gSunPosNDC");
            mID_DirLightColor_Intensity = mScreenViewCB.FindVar("gDirLightColor_Intensity");
            mID_AoParam = mScreenViewCB.FindVar("gAoParam");

            CRasterizerStateDesc RSDesc = new CRasterizerStateDesc();

            RSDesc.InitForCustom();
            mRasterState = CEngine.Instance.RasterizerStateManager.GetRasterizerState(RHICtx, RSDesc);

            CDepthStencilStateDesc DSSDesc = new CDepthStencilStateDesc();

            DSSDesc.InitForCustomLayers();
            mDepthStencilState = CEngine.Instance.DepthStencilStateManager.GetDepthStencilState(RHICtx, DSSDesc);

            CBlendStateDesc BlendDesc = new CBlendStateDesc();

            BlendDesc.InitForCustomLayers();
            mBlendState = CEngine.Instance.BlendStateManager.GetBlendState(RHICtx, BlendDesc);

            mPass = RHICtx.CreatePass();
            if (false == await mPass.InitPassForViewportView(RHICtx, ShadingEnv, MtlInst, ViewportMesh))
            {
                return(false);
            }

            return(OnResize(RHICtx, SwapChain, ViewInfo.Width, ViewInfo.Height));
        }
Beispiel #7
0
        public CFontMesh()
        {
            Mesh = new CGfxMesh();

            Mesh.Tag = this;
        }
Beispiel #8
0
 public override void BindResources(CGfxMesh mesh, CPass pass)
 {
 }