// 初始化
        public async Task Init(EngineNS.CRenderContext rc)
        {
            await InitCanvasAnchorsHandles(rc);
            await InitTransformOperationAssist(rc);

            mInitialized = true;
        }
        async Task InitTransformOperationAssist(EngineNS.CRenderContext rc)
        {
            for (int i = 0; i < (int)enTransformOPHandleType.Count; i++)
            {
                var imgInit = new EngineNS.UISystem.Controls.ImageInitializer();
                imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uva_op_pin.uvanim", EngineNS.RName.enRNameType.Editor);
                imgInit.ImageBrush.TileMode  = EngineNS.UISystem.Brush.enTileMode.None;
                var img = new EngineNS.UISystem.Controls.Image();
                await img.Initialize(rc, imgInit);

                img.Visibility = EngineNS.UISystem.Visibility.Collapsed;

                var rect   = new EngineNS.RectangleF(0, 0, 16, 16);
                var uvAnim = await EngineNS.CEngine.Instance.UVAnimManager.GetUVAnimAsync(rc, imgInit.ImageBrush.ImageName);

                if (uvAnim != null && uvAnim.Frames.Count > 0)
                {
                    await uvAnim.WaitTextureValid(rc);

                    var width  = uvAnim.PixelWidth * uvAnim.Frames[0].SizeU;
                    var height = uvAnim.PixelHeight * uvAnim.Frames[0].SizeV;
                    rect = new EngineNS.RectangleF(0, 0, width, height);
                }

                mTransformHandles[i] = new TransformHandleData()
                {
                    Show    = img,
                    SrcRect = rect,
                };
            }
        }
        public async Task SetObjectToEdit(EngineNS.CRenderContext rc, EditorCommon.Resources.ResourceEditorContext context)
        {
            await EngineNS.Thread.AsyncDummyClass.DummyFunc();

            Macross_Client.CurrentResourceInfo = HostControl.CurrentResInfo;
            await Macross_Client.Load();
        }
 public void Draw(EngineNS.CRenderContext rc, EngineNS.CCommandList cmd, EngineNS.Graphics.View.CGfxScreenView view)
 {
     if (!mInitialized)
     {
         return;
     }
     foreach (var data in mTransformHandles)
     {
         data?.Show?.Draw(rc, cmd, view);
     }
     foreach (var data in mCanvasAnchorsHandles)
     {
         data?.Show?.Draw(rc, cmd, view);
     }
 }
        async Task InitCanvasAnchorsHandles(EngineNS.CRenderContext rc)
        {
            string[] pinNames = new string[] { "uieditor/uva_op_center.uvanim",
                                               "uieditor/uva_op_topleft.uvanim",
                                               "uieditor/uva_op_topright.uvanim",
                                               "uieditor/uva_op_bottomright.uvanim",
                                               "uieditor/uva_op_bottomleft.uvanim",
                                               "uieditor/uva_op_left.uvanim",
                                               "uieditor/uva_op_top.uvanim",
                                               "uieditor/uva_op_right.uvanim",
                                               "uieditor/uva_op_bottom.uvanim" };

            for (int i = 0; i < (int)enCanvasAnchors.Count; i++)
            {
                var imgInit = new EngineNS.UISystem.Controls.ImageInitializer();
                imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName(pinNames[i], EngineNS.RName.enRNameType.Editor);
                imgInit.ImageBrush.TileMode  = EngineNS.UISystem.Brush.enTileMode.None;
                var img = new EngineNS.UISystem.Controls.Image();
                await img.Initialize(rc, imgInit);

                img.Visibility = EngineNS.UISystem.Visibility.Collapsed;

                var rect   = new EngineNS.RectangleF(0, 0, 16, 16);
                var uvAnim = await EngineNS.CEngine.Instance.UVAnimManager.GetUVAnimAsync(rc, imgInit.ImageBrush.ImageName);

                if (uvAnim != null && uvAnim.Frames.Count > 0)
                {
                    await uvAnim.WaitTextureValid(rc);

                    var width  = uvAnim.PixelWidth * uvAnim.Frames[0].SizeU;
                    var height = uvAnim.PixelHeight * uvAnim.Frames[0].SizeV;
                    rect = new EngineNS.RectangleF(0, 0, width, height);
                }

                mCanvasAnchorsHandles[i] = new AnchorsHandleData()
                {
                    Show    = img,
                    SrcRect = rect,
                };
            }
        }
Beispiel #6
0
        internal async Task AddPanelRectShow(EngineNS.CRenderContext rc, EngineNS.UISystem.UIElement uiCtrl)
        {
            var panel = uiCtrl as EngineNS.UISystem.Controls.Containers.Panel;

            if (panel != null)
            {
                var imgInit = new EngineNS.UISystem.Controls.ImageInitializer();
                imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uvanim_dottedline.uvanim", EngineNS.RName.enRNameType.Editor);
                imgInit.ImageBrush.TileMode  = EngineNS.UISystem.Brush.enTileMode.Both;
                imgInit.ImageBrush.Color     = new EngineNS.Color4(0.8f, 1.0f, 1.0f, 1.0f);
                var show = new EngineNS.UISystem.Controls.Image();
                await show.Initialize(rc, imgInit);

                mPanelRectsShow[panel] = show;

                if (uiCtrl == HostDesignPanel.CurrentUI || !(uiCtrl is EngineNS.UISystem.Controls.UserControl))
                {
                    foreach (var child in panel.ChildrenUIElements)
                    {
                        await AddPanelRectShow(rc, child);
                    }
                }
            }
        }
Beispiel #7
0
        public static void CaptureWithPoint(EngineNS.Vector3 point,
                                            EngineNS.Matrix worldMatrix,
                                            EngineNS.Graphics.CGfxCamera camera,
                                            EngineNS.CRenderContext rc,
                                            EngineNS.Vector3 camDir,
                                            EngineNS.Vector3 camUp,
                                            UInt32 actorsCount,
                                            EngineNS.Graphics.RenderPolicy.CGfxRP_SceneCapture rp,
                                            UInt32 textureIdx,
                                            ref EngineNS.Support.CBlobObject dataBlob,
                                            ref EngineNS.Support.CBlobObject picBlob)
        {
            var lookat = point + camDir;

            lookat = EngineNS.Vector3.TransformCoordinate(lookat, worldMatrix);
            point  = EngineNS.Vector3.TransformCoordinate(point, worldMatrix);
            camUp  = EngineNS.Vector3.TransformNormal(camUp, worldMatrix);
            camera.LookAtLH(point, lookat, camUp);
            camera.BeforeFrame();

            //world.Tick();
            //world.SlowDrawAll(rc, camera);

            var maxId = actorsCount;

            rp.TickLogic(null, rc);
            camera.SwapBuffer(true);
            rp.TickRender(null);
            //camera.ClearAllRenderLayerData();

            // debug
#pragma warning disable 0162
            if (false)
            {
                var texRGB = rp.CaptureSV.FrameBuffer.GetSRV_RenderTarget(1);
                texRGB.Save2File(rc, "e:/testCapture.bmp", EngineNS.EIMAGE_FILE_FORMAT.BMP);
            }
#pragma warning restore 0162

            if (rp.UseCapture)
            {
                var blob = new EngineNS.Support.CBlobObject();
                blob.PushData(rp.TexData0.Data, rp.TexData0.Size);
                dataBlob = blob;
                if (rp.CaptureRGBData)
                {
                    blob = new EngineNS.Support.CBlobObject();
                    blob.PushData(rp.TexData1.Data, rp.TexData1.Size);
                    picBlob = blob;
                }
                //await EngineNS.CEngine.Instance.EventPoster.Post(() =>
                //{
                //    rp.CaptureSV.mFrameBuffer.GetSRV_RenderTarget(0).Save2File($"D:\\{camIdx}.png", (int)mWidth, (int)mHeight, (int)(mWidth * 4), rp.TexData0.ToBytes(), EngineNS.EIMAGE_FILE_FORMAT.PNG);
                //    rp.CaptureSV.mFrameBuffer.GetSRV_RenderTarget(1).Save2File($"D:\\{camIdx}_ref.png", (int)mWidth, (int)mHeight, (int)(mWidth * 4), rp.TexData1.ToBytes(), EngineNS.EIMAGE_FILE_FORMAT.PNG);

                //    return true;
                //}, EngineNS.Thread.Async.EAsyncTarget.AsyncEditor);
            }

            var cmd            = EngineNS.CEngine.Instance.RenderContext.ImmCommandList;
            var actirIdTexture = rp.GetActoridTexture();
            cmd.CSSetShaderResource(textureIdx, actirIdTexture);


            uint texSize = 512;
            cmd.CSDispatch(texSize / 8, texSize / 8, 1);
        }
Beispiel #8
0
        public static void CaptureGeoBox(EngineNS.Bricks.HollowMaker.Agent.GeoBox geoBox,
                                         EngineNS.Bricks.HollowMaker.GeomScene.AgentBoxs agentData,
                                         EngineNS.Graphics.CGfxCamera camera,
                                         EngineNS.CRenderContext rc,
                                         UInt32 numElem,
                                         EngineNS.Graphics.RenderPolicy.CGfxRP_SceneCapture rp,
                                         EngineNS.CCommandList cmd,
                                         UInt32 cbIndex,
                                         EngineNS.CConstantBuffer cbuffer,
                                         EngineNS.CGpuBuffer buffer_visible,
                                         EngineNS.CShaderDesc csMain_visible,
                                         EngineNS.CComputeShader cs_visible,
                                         EngineNS.CUnorderedAccessView uav_visible,
                                         EngineNS.CGpuBuffer buffer_setBit,
                                         EngineNS.CShaderDesc csMain_setBit,
                                         EngineNS.CComputeShader cs_setBit,
                                         EngineNS.CUnorderedAccessView uav_setBit,
                                         EngineNS.CComputeShader cs_Clear,
                                         List <EngineNS.Support.BitSet> savedBitsets,
                                         UInt32 textureIdx,
                                         Action <int, EngineNS.Support.CBlobObject, EngineNS.Support.CBlobObject> actionAfterCapturePerDir)
        {
            var cornerPos = geoBox.Box.GetCorners();

            //for(int posIdx = 0; posIdx < cornerPos.Length; posIdx++)
            //{
            //    await CaptureSceneWithPoint(cornerPos[posIdx], world, camera, rc, camDirs, camUps, dataBlobs, picBlobs);
            //}
            cmd.SetComputeShader(cs_visible);
            UInt32[] pUAVInitialCounts = new UInt32[1] {
                1,
            };
            cmd.CSSetUnorderedAccessView(0, uav_visible, pUAVInitialCounts);

            //await CaptureSceneWithPoint(geoBox.Box.GetCenter(), agentData.Mat , camera, rc, camDirs, camUps, numElem/*, dataBlobs, picBlobs*/);
            for (int camIdx = 0; camIdx < 6; camIdx++)
            {
                EngineNS.Support.CBlobObject idBlob  = null;
                EngineNS.Support.CBlobObject picBlob = null;
                EditorCommon.PVSAssist.CaptureWithPoint(geoBox.Box.GetCenter(), agentData.Mat, camera, rc, camDirs[camIdx], camUps[camIdx], numElem, rp, textureIdx, ref idBlob, ref picBlob);

                actionAfterCapturePerDir?.Invoke(camIdx, idBlob, picBlob);
            }

            // gbuffer0
            var blob = new EngineNS.Support.CBlobObject();

            buffer_visible.GetBufferData(rc, blob);
            var idArray = blob.ToUInts();

            // fill uav1, clear uav0
            cmd.SetComputeShader(cs_setBit);
            UInt32[] pUAVInitialCounts1 = new UInt32[1] {
                1,
            };
            cmd.CSSetUnorderedAccessView(0, uav_visible, pUAVInitialCounts);
            cmd.CSSetUnorderedAccessView(1, uav_setBit, pUAVInitialCounts);
            var cbDesc = new EngineNS.CConstantBufferDesc();

            if (csMain_setBit.GetCBufferDesc(cbIndex, ref cbDesc))
            {
                if (cbDesc.Type == EngineNS.ECBufferRhiType.SIT_CBUFFER)
                {
                    cmd.CSSetConstantBuffer(cbDesc.CSBindPoint, cbuffer);
                }
            }
            cmd.CSDispatch(numElem, 1, 1);

            var blob0 = new EngineNS.Support.CBlobObject();

            buffer_visible.GetBufferData(rc, blob0);
            var visArray = blob0.ToUInts();
            // gbuffer1
            var blob1 = new EngineNS.Support.CBlobObject();

            buffer_setBit.GetBufferData(rc, blob1);
            var idArray1 = blob1.ToBytes();

            var bitSet  = new EngineNS.Support.BitSet();
            var bitSet1 = new EngineNS.Support.BitSet();

            bitSet.Init(numElem * 2, idArray1);
            bitSet1.Init(numElem);
            for (UInt32 e = 0; e < numElem; e++)
            {
                var bit1 = bitSet.IsBit(e * 2 + 0);
                var bit2 = bitSet.IsBit(e * 2 + 1);

                bitSet1.SetBit(e, bit1 || bit2);
            }

            savedBitsets.Add(bitSet1);

            cmd.SetComputeShader(cs_Clear);
            cmd.CSSetUnorderedAccessView(0, uav_visible, pUAVInitialCounts);
            cmd.CSSetUnorderedAccessView(1, uav_setBit, pUAVInitialCounts);
            cmd.CSDispatch(numElem / 16 + 1, 1, 1);
        }
Beispiel #9
0
        public async Task SetObjectToEditor(EngineNS.CRenderContext rc, EditorCommon.Resources.ResourceEditorContext context)
        {
            await Viewport.WaitInitComplated();

            if (mWindowRectUIShow == null)
            {
                var imgInit = new EngineNS.UISystem.Controls.ImageInitializer();
                imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uvanim_dottedline.uvanim", EngineNS.RName.enRNameType.Editor);
                imgInit.ImageBrush.TileMode  = EngineNS.UISystem.Brush.enTileMode.Both;
                mWindowRectUIShow            = new EngineNS.UISystem.Controls.Image();
                await mWindowRectUIShow.Initialize(rc, imgInit);
            }
            if (mMousePointAtUIRectShow == null)
            {
                var imgInit = new EngineNS.UISystem.Controls.ImageInitializer();
                imgInit.ImageBrush.ImageName = EngineNS.RName.GetRName("uieditor/uva_pointatrect.uvanim", EngineNS.RName.enRNameType.Editor);
                imgInit.ImageBrush.TileMode  = EngineNS.UISystem.Brush.enTileMode.None;
                mMousePointAtUIRectShow      = new EngineNS.UISystem.Controls.Image();
                await mMousePointAtUIRectShow.Initialize(rc, imgInit);

                mMousePointAtUIRectShow.Visibility = EngineNS.UISystem.Visibility.Collapsed;
            }
            if (mGridlineImage2D == null)
            {
                mGridlineImage2D = await EngineNS.Graphics.Mesh.CGfxImage2D.CreateImage2D(rc, EngineNS.RName.GetRName("uieditor/mi_background_grid.instmtl", EngineNS.RName.enRNameType.Editor), 0, 0, 0, 1, 1);

                mGridlineImage2D.RenderMatrix = EngineNS.Matrix.Scaling(Viewport.GetViewPortWidth(), Viewport.GetViewPortHeight(), 1);
            }
            await InitPanelRectsShow();

            var font = EngineNS.CEngine.Instance.FontManager.GetFont(EngineNS.CEngine.Instance.Desc.DefaultFont, 12, 1024, 128);

            if (mScaleFontMesh == null)
            {
                var mtl = await EngineNS.CEngine.Instance.MaterialInstanceManager.GetMaterialInstanceAsync(rc, EngineNS.RName.GetRName("Material/font.instmtl"));

                mScaleFontMesh = new EngineNS.Bricks.FreeTypeFont.CFontMesh();
                await mScaleFontMesh.SetMaterial(rc, mtl, "txDiffuse");

                mScaleFontMesh.RenderMatrix = EngineNS.Matrix.Translate(20, 20, 0);
                //mScaleFontMesh.Offset = new EngineNS.Vector2(20, 20);
                //mScaleFontMesh.Scale = new EngineNS.Vector2(1, 1);
            }

            //var color = new EngineNS.FrameBufferClearColor();
            //color.r = 0.1f;
            //color.g = 0.1f;
            //color.b = 0.1f;
            //color.a = 1.0f;
            //Viewport.RPolicy.SetClearColorRT(0, ref color);
            var smp = EngineNS.Thread.ASyncSemaphore.CreateSemaphore(1);

            Viewport.RPolicy.OnDrawUI += (cmd, view) =>
            {
                var mtlmesh = mGridlineImage2D.Mesh.MtlMeshArray[0];
                var pass    = mGridlineImage2D.GetPass();
                pass.ViewPort = view.Viewport;
                if (pass.RenderPipeline == null)
                {
                    var rplDesc = new EngineNS.CRenderPipelineDesc();
                    pass.RenderPipeline = rc.CreateRenderPipeline(rplDesc);
                }
                pass.RenderPipeline.RasterizerState   = mtlmesh.MtlInst.CustomRasterizerState;
                pass.RenderPipeline.DepthStencilState = mtlmesh.MtlInst.CustomDepthStencilState;
                pass.RenderPipeline.BlendState        = mtlmesh.MtlInst.CustomBlendState;
                //pass.ShaderSamplerBinder = mtlmesh.GetSamplerBinder(rc, pass.Effect.ShaderProgram);
                pass.BindCBuffer(pass.Effect.ShaderProgram, pass.Effect.CacheData.CBID_View, view.ScreenViewCB);
                pass.ShadingEnv.BindResources(mGridlineImage2D.Mesh, pass);
                cmd.PushPass(pass);

                mWindowRectUIShow.Draw(rc, cmd, view);

                foreach (var rect in mPanelRectsShow.Values)
                {
                    rect.Draw(rc, cmd, view);
                }

                HostDesignPanel.CurrentUI.Draw(rc, cmd, view);
                mMousePointAtUIRectShow.Draw(rc, cmd, view);
                foreach (var data in mSelectedUIDatas.Values)
                {
                    data.ShowRect?.Draw(rc, cmd, view);
                }
                mSlotOperator?.Draw(rc, cmd, view);
                mScaleFontMesh.DrawText(rc, font, "缩放:" + mUIScale.ToString("F"), true);
                for (int i = 0; i < mScaleFontMesh.PassNum; i++)
                {
                    var fontPass = mScaleFontMesh.GetPass(i);
                    if (fontPass == null)
                    {
                        continue;
                    }

                    fontPass.ViewPort = view.Viewport;
                    fontPass.BindCBuffer(fontPass.Effect.ShaderProgram, fontPass.Effect.CacheData.CBID_View, view.ScreenViewCB);
                    fontPass.ShadingEnv.BindResources(mScaleFontMesh.Mesh, fontPass);
                    cmd.PushPass(fontPass);
                }

                if (smp.IsValid)
                {
                    smp.Release();
                }
            };
            await smp.Await();

            HostDesignPanel.CurrentUI.SetDesignRect(ref mWindowDesignSize);
            ShowAll();
        }