Roblox backend: clear/upload only each tile's dirty region; scroll benchmark in t_drag, scrolling in t_composite
This commit is contained in:
@@ -1 +1 @@
|
||||
[[12, "imgui.lua"], [13795, "imgui_demo.lua"], [14728, "imgui_demo_2.lua"], [17803, "imgui_demo_apps.lua"], [19062, "imgui_demo_tools.lua"], [20388, "imgui_demo_widgets.lua"], [22312, "imgui_docking.lua"], [25440, "imgui_dragdrop.lua"], [25732, "imgui_draw.lua"], [30979, "imgui_h.lua"], [33153, "imgui_impl_roblox.lua"], [34094, "imgui_impl_roblox_fonts.lua"], [40497, "imgui_internal.lua"], [43669, "imgui_tables.lua"], [48016, "imgui_tabs.lua"], [49183, "imgui_widgets.lua"], [57717, "imstb_rectpack.lua"], [58163, "imstb_textedit.lua"], [59404, "imstb_truetype.lua"], [61872, "imstd_minstdio.lua"]]
|
||||
[[12, "imgui.lua"], [13795, "imgui_demo.lua"], [14728, "imgui_demo_2.lua"], [17803, "imgui_demo_apps.lua"], [19062, "imgui_demo_tools.lua"], [20388, "imgui_demo_widgets.lua"], [22312, "imgui_docking.lua"], [25440, "imgui_dragdrop.lua"], [25732, "imgui_draw.lua"], [30979, "imgui_h.lua"], [33153, "imgui_impl_roblox.lua"], [34121, "imgui_impl_roblox_fonts.lua"], [40524, "imgui_internal.lua"], [43696, "imgui_tables.lua"], [48043, "imgui_tabs.lua"], [49210, "imgui_widgets.lua"], [57744, "imstb_rectpack.lua"], [58190, "imstb_textedit.lua"], [59431, "imstb_truetype.lua"], [61899, "imstd_minstdio.lua"]]
|
||||
+30
-3
@@ -33680,7 +33680,7 @@ local function GetTile(bd, layer, key, tx, ty)
|
||||
label.Visible = false
|
||||
label.Active = bd.TilesActive
|
||||
label.Parent = layer.Frame
|
||||
tile = { Image = img, Label = label, Buffer = buffer.create(TILE * TILE * 4), H1 = -1, H2 = -1, Visible = false }
|
||||
tile = { Image = img, Label = label, Buffer = buffer.create(TILE * TILE * 4), H1 = -1, H2 = -1, Visible = false, BX0 = TILE, BY0 = TILE, BX1 = 0, BY1 = 0 }
|
||||
layer.Tiles[key] = tile
|
||||
return tile
|
||||
end
|
||||
@@ -33879,8 +33879,28 @@ function ImGui_ImplRoblox_RenderDrawData(draw_data)
|
||||
local x0, y0 = lx0 + tx * TILE, ly0 + ty * TILE
|
||||
local x1, y1 = x0 + TILE, y0 + TILE
|
||||
buf, buf_w = tile.Buffer, TILE
|
||||
buffer.fill(buf, 0, 0)
|
||||
local list = tl[key]
|
||||
-- Dirty region = old content bounds + new content bounds. Outside it the tile is already
|
||||
-- transparent, so only this region is cleared and uploaded (edge tiles are often mostly empty).
|
||||
local nx0, ny0, nx1, ny1 = TILE, TILE, 0, 0
|
||||
for k = 1, count do
|
||||
local p = list[k]
|
||||
local a, b = pr_bx0[p] - x0, pr_by0[p] - y0
|
||||
local c, d = pr_bx1[p] - x0, pr_by1[p] - y0
|
||||
if a < nx0 then nx0 = a end
|
||||
if b < ny0 then ny0 = b end
|
||||
if c > nx1 then nx1 = c end
|
||||
if d > ny1 then ny1 = d end
|
||||
end
|
||||
nx0, ny0, nx1, ny1 = max(nx0, 0), max(ny0, 0), min(nx1, TILE), min(ny1, TILE)
|
||||
local rx0, ry0, rx1, ry1 = min(nx0, tile.BX0), min(ny0, tile.BY0), max(nx1, tile.BX1), max(ny1, tile.BY1)
|
||||
tile.BX0, tile.BY0, tile.BX1, tile.BY1 = nx0, ny0, nx1, ny1
|
||||
local rw = rx1 - rx0
|
||||
if rw == TILE then
|
||||
buffer.fill(buf, ry0 * TILE * 4, 0, (ry1 - ry0) * TILE * 4)
|
||||
else
|
||||
for y = ry0, ry1 - 1 do buffer.fill(buf, (y * TILE + rx0) * 4, 0, rw * 4) end
|
||||
end
|
||||
local tox, toy = ox + x0, oy + y0
|
||||
for k = 1, count do
|
||||
local p = list[k]
|
||||
@@ -33902,7 +33922,14 @@ function ImGui_ImplRoblox_RenderDrawData(draw_data)
|
||||
end
|
||||
end
|
||||
PB("ImGui upload")
|
||||
tile.Image:WritePixelsBuffer(Vector2.zero, TILE_SIZE, buf)
|
||||
if rw == TILE and ry0 == 0 and ry1 == TILE then
|
||||
tile.Image:WritePixelsBuffer(Vector2.zero, TILE_SIZE, buf)
|
||||
elseif rw > 0 and ry1 > ry0 then
|
||||
local rh = ry1 - ry0
|
||||
local sub = buffer.create(rw * rh * 4)
|
||||
for y = 0, rh - 1 do buffer.copy(sub, y * rw * 4, buf, ((ry0 + y) * TILE + rx0) * 4, rw * 4) end
|
||||
tile.Image:WritePixelsBuffer(Vector2.new(rx0, ry0), Vector2.new(rw, rh), sub)
|
||||
end
|
||||
PE()
|
||||
end
|
||||
if not tile.Visible then
|
||||
|
||||
Reference in New Issue
Block a user