public async Task SetObjectToEdit(ResourceEditorContext context) { await Viewport.WaitInitComplated(); mCurrentResInfo = context.ResInfo as UVAnimResourceInfo; var rc = EngineNS.CEngine.Instance.RenderContext; mUVAnim = await EngineNS.CEngine.Instance.UVAnimManager.GetUVAnimAsync(rc, mCurrentResInfo.ResourceName); mUVAnim.PropertyChanged += UVAnim_PropertyChanged; await ImagePanel.SetUVAnim(mUVAnim); PG_UVAnim.Instance = mUVAnim; ListBox_Frames.Items.Clear(); for (int i = 0; i < mUVAnim.Frames.Count; i++) { ListBox_Frames.Items.Add(KeyFrameWord + i); mUVAnim.Frames[i].PropertyChanged += Frame_PropertyChanged; } if (ListBox_Frames.Items.Count > 0) { ListBox_Frames.SelectedIndex = 0; } else { ListBox_Frames.SelectedIndex = -1; } mImage2D = await EngineNS.Graphics.Mesh.CGfxImage2D.CreateImage2D(rc, mUVAnim.MaterialInstanceRName, 0, 0, 0, 1, 1); var texture = EngineNS.CEngine.Instance.TextureManager.GetShaderRView(rc, mUVAnim.TextureRName); mImage2D.SetTexture("texture", texture); mImage2D.RenderMatrix = EngineNS.Matrix.Scaling(Viewport.GetViewPortWidth(), Viewport.GetViewPortHeight(), 1); //var list = new EngineNS.Support.NativeList<EngineNS.Vector2>(); //list.Add(new EngineNS.Vector2(0.5f, 0.5f)); //list.Add(new EngineNS.Vector2(1, 0.5f)); //list.Add(new EngineNS.Vector2(1, 1)); //list.Add(new EngineNS.Vector2(0.5f, 1)); //mImage2D.SetUV(list, rc, false); Viewport.RPolicy.OnDrawUI += (cmd, view) => { var mtlmesh = mImage2D.Mesh.MtlMeshArray[0]; var pass = mImage2D.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); if (pass.Effect.PreUse()) { pass.BindCBuffer(pass.Effect.ShaderProgram, pass.Effect.CacheData.CBID_View, view.ScreenViewCB); pass.ShadingEnv.BindResources(mImage2D.Mesh, pass); cmd.PushPass(pass); } }; }
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(); }