From 23f908edea28d74ada3a298ec7f6c329a45aea53 Mon Sep 17 00:00:00 2001 From: thisdp <30386052+thisdp@users.noreply.github.com> Date: Sun, 16 Oct 2022 12:12:42 +0800 Subject: [PATCH] DGS Update 3.518 DGS Update 3.518 Stable(16/Oct/2022) 0. Code clean up & code optimise 1. Fixed: render issue of progress bar 2. Enhanced: Conditional Multilingual Dictionary 3. Added Function: dgsTranslationAddPropertyListener 3. Added Function: dgsTranslationRemovePropertyListener 4. Optimised: shared getCameraMatrix for 3d elements 5. Optimised: reduce string creating when using shadow with color coded 6. Optimised: table creation when rendering 3dinterface 7. Added Property: buttonPosition for radiobutton and checkbox 8. Added Property: shadow for editbox 9. Fixed: sourceResource sometimes will be changed into dgs element 10. Optimised: onDgsCreate event logic 11. Fixed: error when using custom cursor 12. Enhanced: dgs rounded rectangle 13. Enhanced: dgs custom cursor 14. Optimised: shared texture/shader in style system 15. Fixed: Error when rendering tab panel 16. Fixed: stack C overflow when using dgsCloseWindow in onDgsWindowClose 17. Added Function: dgsButtonMakeForm 18. Added Function: dgsButtonRemoveForm 19. Added Event: onDgsFormSubmit 20. Changed: dgsGetListeneingProperties -> dgsGetListenedProperties 21. Fixed: color picker doesn't work in scroll pane 22. Fixed: masked text should not be able to be copied 23. Fixed: wrong position of debug trace 24. Fixed: error when using debugdgs 3 with dgs animation 25. Fixed: render issue of dgs color picker 26. Fixed: error when using dgs animation 27. Fixed: error when using combobox (now autoSort is disabled by default) 28. Fixed: error when using sort of combobox 29. Fixed: Missing function dgsComboBoxGetScrollBar 30. Optimised: video memory using of combobox/gridlist/scrollpane/scalepane/tabpanel/3dinterface/edit/memo 31. Fixed: render issue of grid list 32. Fixed: memo goes to wrong line when set caret position 33. Optimised: reduce cpu usage when there's no dgs elements (50% optimised) --- client.lua | 83 ++++++++++++++++++++++++++++++++++++------------------ update.cfg | 2 +- 2 files changed, 56 insertions(+), 29 deletions(-) diff --git a/client.lua b/client.lua index 8c518ded..87195a74 100644 --- a/client.lua +++ b/client.lua @@ -86,6 +86,7 @@ MouseData = { scbEnterRltPos = false, topScrollable = false, lastPos = {-1,-1}, + visibleLastFrame = false, hitData3D = {[0]=false}, hitData2D = {[0]=false}, lock3DInterface = false, @@ -135,7 +136,7 @@ function dgsCoreRender() dgsRenderInfo.frames = dgsRenderInfo.frames+1 dgsRenderInfo.frameStartScreen = getTickCount() dgsRenderInfo.rendering = 0 - triggerEvent("onDgsPreRender",resourceRoot) + --triggerEvent("onDgsPreRender",resourceRoot) local frameStart3DOnScreen,frameEnd3DOnScreen = 0,0 MouseData.cursorPos3D[0] = false local mx,my = -1000,-1000 @@ -145,19 +146,23 @@ function dgsCoreRender() MouseData.cursorPosScr[0],MouseData.cursorPosScr[1],MouseData.cursorPosScr[2] = true,mx,my MouseData.cursorPosWld[0],MouseData.cursorPosWld[1],MouseData.cursorPosWld[2] = true,mx,my MouseData.cursorPos3D[0],MouseData.cursorPos3D[1],MouseData.cursorPos3D[2],MouseData.cursorPos3D[3] = true,getWorldFromScreenPosition(mx,my,1) - else - MouseData.MoveScroll[0] = false - MouseData.scbClickData = false - MouseData.selectorClickData = false - MouseData.lock3DInterface = false - MouseData.clickl = false - MouseData.clickr = false - MouseData.clickm = false - MouseData.Scale[0] = false - MouseData.Move[0] = false - MouseData.MoveScale[0] = false - MouseData.cursorPosWld[0] = false - MouseData.cursorPosScr[0] = false + end + if MouseData.visibleLastFrame ~= cursorShowing then + if not cursorShowing then + MouseData.MoveScroll[0] = false + MouseData.scbClickData = false + MouseData.selectorClickData = false + MouseData.lock3DInterface = false + MouseData.clickl = false + MouseData.clickr = false + MouseData.clickm = false + MouseData.Scale[0] = false + MouseData.Move[0] = false + MouseData.MoveScale[0] = false + MouseData.cursorPosWld[0] = false + MouseData.cursorPosScr[0] = false + end + MouseData.visibleLastFrame = cursorShowing end if isElement(BlurBoxGlobalScreenSource) then dxUpdateScreenSource(BlurBoxGlobalScreenSource,true) @@ -198,7 +203,8 @@ function dgsCoreRender() for i=1,#dgsWorld3DTable do local v = dgsWorld3DTable[i] local eleData = dgsElementData[v] - if (eleData.dimension == -1 or eleData.dimension == dimension) and (eleData.interior == -1 or eleData.interior == interior) then + local selfDimen = eleData.dimension + if (selfDimen == -1 or selfDimen == dimension) and (eleData.interior == -1 or eleData.interior == interior) then dxSetBlendMode(eleData.blendMode) renderGUI(v,mx,my,eleData.enabled,eleData.enabled,eleData.mainRT,0,0,0,0,0,0,1,MouseData.clickl) end @@ -208,7 +214,8 @@ function dgsCoreRender() for i=1,#dgsScreen3DTable do local v = dgsScreen3DTable[i] local eleData = dgsElementData[v] - if (eleData.dimension == -1 or eleData.dimension == dimension) and (eleData.interior == -1 or eleData.interior == interior) then + local selfDimen = eleData.dimension + if (selfDimen == -1 or selfDimen == dimension) and (eleData.interior == -1 or eleData.interior == interior) then renderGUI(v,mx,my,eleData.enabled,eleData.enabled,nil,0,0,0,0,0,0,1) end end @@ -247,7 +254,7 @@ function dgsCoreRender() end MouseData.hit = hit2D or hit3D dxSetRenderTarget() - if not cursorShowing then + --[[if not cursorShowing then MouseData.hit = false MouseData.Move[0] = false MouseData.Scale[0] = false @@ -261,7 +268,7 @@ function dgsCoreRender() MouseData.clickm = false MouseData.cursorPosWld[0] = false MouseData.cursorPosScr[0] = false - end + end]] triggerEvent("onDgsRender",resourceRoot) if KeyHolder.repeatKey then local tick = getTickCount() @@ -584,7 +591,7 @@ function renderGUI(source,mx,my,enabledInherited,enabledSelf,rndtgt,xRT,yRT,xNRT if _mx > 0 and _my > 0 and _mx <= 1 and _my <= 1 then if type(checkPixel) == "function" then local checkFnc = daEleData.checkFunction - if checkFnc((mx-xNRT)/w,(my-yNRT)/h,mx,my) then + if checkFnc(_mx,_my,mx,my) then MouseData.hit = source daDebugColor = 0xFF0000 end @@ -706,26 +713,33 @@ function renderGUI(source,mx,my,enabledInherited,enabledSelf,rndtgt,xRT,yRT,xNRT end addEventHandler("onClientRender",root,dgsCoreRender,false,dgsRenderSetting.renderPriority) -function dgsCore3DRender() +function dgsCore3DRender() --This renderer will only be attached to onClientPreRender when there are 3d elements, because onClientPreRender is slow and only used to render 3d elements dgsRenderInfo.frameStart3D = getTickCount() local rendering3D = 0 if #dgsWorld3DTable ~= 0 then cameraPos[1],cameraPos[2],cameraPos[3] = getCameraMatrix() - end - for i=1,#dgsWorld3DTable do - local ele = dgsWorld3DTable[i] - local dgsType = dgsElementType[ele] - if dgs3DRenderer[dgsType] then - if dgs3DRenderer[dgsType](ele) then + for i=1,#dgsWorld3DTable do + local ele = dgsWorld3DTable[i] + local dgsType = dgsElementType[ele] + if dgs3DRenderer[dgsType] and dgs3DRenderer[dgsType](ele) then rendering3D = rendering3D+1 end end end dgsRenderInfo.rendering3D = rendering3D - dgsRenderInfo.dgsWorld3DTableSize = #dgsWorld3DTable dgsRenderInfo.frameEnd3D = getTickCount() end -addEventHandler("onClientPreRender",root,dgsCore3DRender) + +function dgsCore3DStartRender() + addEventHandler("onClientPreRender",root,dgsCore3DRender,false) +end + +function dgsCore3DStopRender() + removeEventHandler("onClientPreRender",root,dgsCore3DRender) + dgsRenderInfo.rendering3D = 0 + dgsRenderInfo.frameStart3D = 0 + dgsRenderInfo.frameEnd3D = 0 +end addEventHandler("onClientKey",root,function(button,state) if button == "mouse_wheel_up" or button == "mouse_wheel_down" then @@ -1668,8 +1682,14 @@ function dgsCleanElement(source) if dgsIsAniming(source) then if isAlive then dgsStopAniming(source) end end if dgsTypeWorld3D[dgsType] then tableRemoveItemFromArray(dgsWorld3DTable,source) + if #dgsWorld3DTable+#dgsScreen3DTable == 0 then + dgsCore3DStopRender() --Remove renderer if no 3d elements + end elseif dgsTypeScreen3D[dgsType] then tableRemoveItemFromArray(dgsScreen3DTable,source) + if #dgsWorld3DTable+#dgsScreen3DTable == 0 then + dgsCore3DStopRender() --Remove renderer if no 3d elements + end else local parent = dgsElementData[source].parent if not parent or parent == root then @@ -2351,6 +2371,13 @@ function onDGSElementCreate(source,theResource) dgsAddEventHandler("onDgsBlur",source,"DGSI_onDGSWindowBlur",getPropagated) dgsAddEventHandler("onDgsFocus",source,"DGSI_onDGSWindowFocus",getPropagated) triggerEvent("onDgsCreate",source,theResource) + + local dgsType = dgsGetType(source) + if dgsTypeWorld3D[dgsType] or dgsTypeScreen3D[dgsType] then + if #dgsWorld3DTable+#dgsScreen3DTable == 1 then + dgsCore3DStartRender() --Add renderer if there are 3d elements + end + end end function dgsClear(theType,res) diff --git a/update.cfg b/update.cfg index b4a430a8..71185835 100644 --- a/update.cfg +++ b/update.cfg @@ -1 +1 @@ -3.517 \ No newline at end of file +3.518 \ No newline at end of file