188 lines
4.7 KiB
Lua
188 lines
4.7 KiB
Lua
-- Render Stress Profile
|
|
-- Tests rendering with heavy draw operations
|
|
|
|
local FlexLove = require("FlexLove")
|
|
|
|
local profile = {
|
|
elementCount = 200,
|
|
maxElements = 2000,
|
|
minElements = 50,
|
|
root = nil,
|
|
showRounded = true,
|
|
showText = true,
|
|
showLayering = true,
|
|
}
|
|
|
|
function profile.init()
|
|
FlexLove.init({
|
|
width = love.graphics.getWidth(),
|
|
height = love.graphics.getHeight(),
|
|
})
|
|
|
|
profile.buildLayout()
|
|
end
|
|
|
|
function profile.buildLayout()
|
|
profile.root = FlexLove.new({
|
|
width = "100%",
|
|
height = "100%",
|
|
backgroundColor = {0.05, 0.05, 0.1, 1},
|
|
flexDirection = "column",
|
|
overflow = "scroll",
|
|
padding = 20,
|
|
gap = 10,
|
|
})
|
|
|
|
-- Render container
|
|
local renderContainer = FlexLove.new({
|
|
width = "100%",
|
|
flexDirection = "row",
|
|
flexWrap = "wrap",
|
|
gap = 5,
|
|
marginBottom = 20,
|
|
})
|
|
|
|
for i = 1, profile.elementCount do
|
|
local hue = (i / profile.elementCount) * 360
|
|
local color = {
|
|
0.3 + 0.5 * math.sin(hue * math.pi / 180),
|
|
0.3 + 0.5 * math.sin((hue + 120) * math.pi / 180),
|
|
0.3 + 0.5 * math.sin((hue + 240) * math.pi / 180),
|
|
1
|
|
}
|
|
|
|
local box = FlexLove.new({
|
|
width = 50,
|
|
height = 50,
|
|
backgroundColor = color,
|
|
borderRadius = profile.showRounded and (5 + math.random(20)) or 0,
|
|
margin = 2,
|
|
})
|
|
|
|
-- Add text rendering if enabled
|
|
if profile.showText then
|
|
box:addChild(FlexLove.new({
|
|
textContent = tostring(i),
|
|
fontSize = 12,
|
|
color = {1, 1, 1, 0.8},
|
|
}))
|
|
end
|
|
|
|
-- Add layering (nested elements) if enabled
|
|
if profile.showLayering and i % 3 == 0 then
|
|
local innerBox = FlexLove.new({
|
|
width = "80%",
|
|
height = "80%",
|
|
backgroundColor = {color[1] * 0.5, color[2] * 0.5, color[3] * 0.5, 0.7},
|
|
borderRadius = profile.showRounded and 8 or 0,
|
|
justifyContent = "center",
|
|
alignItems = "center",
|
|
})
|
|
box:addChild(innerBox)
|
|
end
|
|
|
|
renderContainer:addChild(box)
|
|
end
|
|
|
|
profile.root:addChild(renderContainer)
|
|
|
|
-- Controls panel
|
|
local controlsPanel = FlexLove.new({
|
|
width = "100%",
|
|
padding = 15,
|
|
backgroundColor = {0.1, 0.1, 0.2, 0.9},
|
|
borderRadius = 8,
|
|
flexDirection = "column",
|
|
gap = 8,
|
|
})
|
|
|
|
controlsPanel:addChild(FlexLove.new({
|
|
textContent = string.format("Render Elements: %d (Press +/- to adjust)", profile.elementCount),
|
|
fontSize = 18,
|
|
color = {1, 1, 1, 1},
|
|
}))
|
|
|
|
controlsPanel:addChild(FlexLove.new({
|
|
textContent = string.format("[R] Rounded Rectangles: %s", profile.showRounded and "ON" or "OFF"),
|
|
fontSize = 14,
|
|
color = {0.8, 0.8, 0.8, 1},
|
|
}))
|
|
|
|
controlsPanel:addChild(FlexLove.new({
|
|
textContent = string.format("[T] Text Rendering: %s", profile.showText and "ON" or "OFF"),
|
|
fontSize = 14,
|
|
color = {0.8, 0.8, 0.8, 1},
|
|
}))
|
|
|
|
controlsPanel:addChild(FlexLove.new({
|
|
textContent = string.format("[L] Layering/Overdraw: %s", profile.showLayering and "ON" or "OFF"),
|
|
fontSize = 14,
|
|
color = {0.8, 0.8, 0.8, 1},
|
|
}))
|
|
|
|
profile.root:addChild(controlsPanel)
|
|
end
|
|
|
|
function profile.update(dt)
|
|
end
|
|
|
|
function profile.draw()
|
|
if profile.root then
|
|
profile.root:draw()
|
|
end
|
|
|
|
-- Overlay info
|
|
love.graphics.setColor(1, 1, 1, 1)
|
|
love.graphics.print("Render Stress Test", 10, love.graphics.getHeight() - 120)
|
|
love.graphics.print(
|
|
string.format("Elements: %d | Range: %d-%d",
|
|
profile.elementCount,
|
|
profile.minElements,
|
|
profile.maxElements
|
|
),
|
|
10,
|
|
love.graphics.getHeight() - 100
|
|
)
|
|
love.graphics.print("Press + to add 50 elements", 10, love.graphics.getHeight() - 80)
|
|
love.graphics.print("Press - to remove 50 elements", 10, love.graphics.getHeight() - 65)
|
|
love.graphics.print("Press R/T/L to toggle features", 10, love.graphics.getHeight() - 50)
|
|
end
|
|
|
|
function profile.keypressed(key)
|
|
if key == "=" or key == "+" then
|
|
profile.elementCount = math.min(profile.maxElements, profile.elementCount + 50)
|
|
profile.buildLayout()
|
|
elseif key == "-" or key == "_" then
|
|
profile.elementCount = math.max(profile.minElements, profile.elementCount - 50)
|
|
profile.buildLayout()
|
|
elseif key == "r" then
|
|
profile.showRounded = not profile.showRounded
|
|
profile.buildLayout()
|
|
elseif key == "t" then
|
|
profile.showText = not profile.showText
|
|
profile.buildLayout()
|
|
elseif key == "l" then
|
|
profile.showLayering = not profile.showLayering
|
|
profile.buildLayout()
|
|
end
|
|
end
|
|
|
|
function profile.resize(w, h)
|
|
FlexLove.resize(w, h)
|
|
profile.buildLayout()
|
|
end
|
|
|
|
function profile.reset()
|
|
profile.elementCount = 200
|
|
profile.showRounded = true
|
|
profile.showText = true
|
|
profile.showLayering = true
|
|
profile.buildLayout()
|
|
end
|
|
|
|
function profile.cleanup()
|
|
profile.root = nil
|
|
end
|
|
|
|
return profile
|