Canvas creation figured out
This commit is contained in:
parent
f023959137
commit
6d2e4fc36c
@ -48,7 +48,7 @@ function element:new(param, immediate, w, h)
|
|||||||
--Whether this element has a canvas assigned
|
--Whether this element has a canvas assigned
|
||||||
hasCanvas = false,
|
hasCanvas = false,
|
||||||
--Current test render passes to be benchmarked
|
--Current test render passes to be benchmarked
|
||||||
testRenderPasses = love.math.random(3, 6),
|
testRenderPasses = love.math.random(10, 15),
|
||||||
--
|
--
|
||||||
failedCanvas = false
|
failedCanvas = false
|
||||||
}
|
}
|
||||||
@ -102,10 +102,14 @@ end
|
|||||||
|
|
||||||
--Random coefficients, if these reach 1.5 then canvas is made
|
--Random coefficients, if these reach 1.5 then canvas is made
|
||||||
local childrenNum = 5
|
local childrenNum = 5
|
||||||
local selfRenderTime = 0.0005
|
local selfRenderTime = 0
|
||||||
local screenSize = 1/8
|
local screenSize = 1/50
|
||||||
local coefficient = 1.5
|
local coefficient = 1.5
|
||||||
|
|
||||||
|
function element.setBench(time)
|
||||||
|
selfRenderTime = time
|
||||||
|
end
|
||||||
|
|
||||||
function element:calculateCanvasCoeficient(selfTime)
|
function element:calculateCanvasCoeficient(selfTime)
|
||||||
local sW, sH = love.graphics.getDimensions()
|
local sW, sH = love.graphics.getDimensions()
|
||||||
local areaBelow = (sW * sH) * screenSize
|
local areaBelow = (sW * sH) * screenSize
|
||||||
@ -115,7 +119,6 @@ function element:calculateCanvasCoeficient(selfTime)
|
|||||||
local childCoef = self.context:getChildrenCount()/childrenNum
|
local childCoef = self.context:getChildrenCount()/childrenNum
|
||||||
local sizeCoef = selfTime/selfRenderTime
|
local sizeCoef = selfTime/selfRenderTime
|
||||||
|
|
||||||
|
|
||||||
return (areaCoef+childCoef+sizeCoef)>coefficient
|
return (areaCoef+childCoef+sizeCoef)>coefficient
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -141,8 +144,8 @@ function element:setCalculatedSize(w, h)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function element:updateInputCtx()
|
function element:updateInputCtx()
|
||||||
--self.context.inputContext:update()
|
self.context.inputContext:update()
|
||||||
--[[if self.settings.canvasW then
|
if self.settings.canvasW then
|
||||||
--If canvas too small make a bigger one
|
--If canvas too small make a bigger one
|
||||||
if self.settings.canvasW < self.view.w or self.settings.canvasH < self.view.h then
|
if self.settings.canvasW < self.view.w or self.settings.canvasH < self.view.h then
|
||||||
self.settings.canvasW = self.view.w*1.25
|
self.settings.canvasW = self.view.w*1.25
|
||||||
@ -158,7 +161,7 @@ function element:updateInputCtx()
|
|||||||
end
|
end
|
||||||
|
|
||||||
self.quad = love.graphics.newQuad(0, 0, self.view.w, self.view.h, self.settings.canvasW, self.settings.canvasH)
|
self.quad = love.graphics.newQuad(0, 0, self.view.w, self.view.h, self.settings.canvasW, self.settings.canvasH)
|
||||||
end]]
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
local dummy = function() end
|
local dummy = function() end
|
||||||
@ -195,16 +198,10 @@ end
|
|||||||
local calcT
|
local calcT
|
||||||
|
|
||||||
function element:internalRender()
|
function element:internalRender()
|
||||||
love.graphics.push()
|
|
||||||
if self.settings.hasCanvas then
|
|
||||||
love.graphics.origin()
|
|
||||||
else
|
|
||||||
love.graphics.translate(self.view.x, self.view.y)
|
|
||||||
local gx, gy = love.graphics.transformPoint(self.view.x, self.view.y)
|
|
||||||
end
|
|
||||||
if self.settings.testRenderPasses > 0 then
|
if self.settings.testRenderPasses > 0 then
|
||||||
calcT = love.timer.getTime()
|
calcT = love.timer.getTime()
|
||||||
end
|
end
|
||||||
|
|
||||||
local status, err = pcall(self.renderer)
|
local status, err = pcall(self.renderer)
|
||||||
if self.settings.testRenderPasses > 0 then
|
if self.settings.testRenderPasses > 0 then
|
||||||
self.settings.testRenderPasses = self.settings.testRenderPasses-1
|
self.settings.testRenderPasses = self.settings.testRenderPasses-1
|
||||||
@ -212,8 +209,6 @@ function element:internalRender()
|
|||||||
table.insert(self.renderBench, self.context:endSelfRender(selfTime))
|
table.insert(self.renderBench, self.context:endSelfRender(selfTime))
|
||||||
end
|
end
|
||||||
|
|
||||||
love.graphics.pop()
|
|
||||||
|
|
||||||
if not status then
|
if not status then
|
||||||
if helium.conf.HARD_ERROR then
|
if helium.conf.HARD_ERROR then
|
||||||
error(status)
|
error(status)
|
||||||
@ -227,39 +222,48 @@ local getCanvas, setCanvas, clear = love.graphics.getCanvas, love.graphics.setCa
|
|||||||
function element:renderWrapper()
|
function element:renderWrapper()
|
||||||
self.context:set()
|
self.context:set()
|
||||||
|
|
||||||
clear()
|
|
||||||
|
|
||||||
if self.parameters then
|
if self.parameters then
|
||||||
self:internalRender()
|
self:internalRender()
|
||||||
self.settings.pendingUpdate = false
|
|
||||||
end
|
end
|
||||||
|
|
||||||
self.context:unset()
|
self.context:unset()
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
function element:externalRender()
|
function element:externalRender()
|
||||||
local cnvs = getCanvas()
|
local cnvs = getCanvas()
|
||||||
|
love.graphics.push('all')
|
||||||
|
love.graphics.translate(self.view.x, self.view.y)
|
||||||
|
|
||||||
if not self.settings.isSetup then
|
if not self.settings.isSetup then
|
||||||
self:setup()
|
self:setup()
|
||||||
self.settings.isSetup = true
|
self.settings.isSetup = true
|
||||||
end
|
end
|
||||||
|
|
||||||
setCanvas(self.canvas)
|
|
||||||
if self.settings.needsRendering then
|
if self.settings.needsRendering then
|
||||||
self:renderWrapper()
|
if self.settings.hasCanvas then
|
||||||
self.settings.needsRendering = not self.settings.hasCanvas
|
setCanvas(self.canvas)
|
||||||
|
love.graphics.clear(0,0,0,0)
|
||||||
|
love.graphics.push('all')
|
||||||
|
love.graphics.origin()
|
||||||
|
|
||||||
|
self:renderWrapper()
|
||||||
|
self.settings.needsRendering = false
|
||||||
|
|
||||||
|
love.graphics.pop()
|
||||||
|
else
|
||||||
|
self:renderWrapper()
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
setCanvas(cnvs)
|
setCanvas(cnvs)
|
||||||
if self.settings.hasCanvas then
|
|
||||||
|
|
||||||
setColor(1,1,1)
|
if self.settings.hasCanvas then
|
||||||
draw(self.canvas, self.quad, self.view.x, self.view.y)
|
setColor(1,1,1,1)
|
||||||
love.graphics.rectangle('line', self.view.x, self.view.y, self.view.w, self.view.h)
|
draw(self.canvas, self.quad, 0, 0)
|
||||||
|
love.graphics.rectangle('line', 1, 1, self.view.w-1, self.view.h-1)
|
||||||
end
|
end
|
||||||
print(self.view.x, self.view.y)
|
|
||||||
|
love.graphics.pop()
|
||||||
end
|
end
|
||||||
|
|
||||||
function element:externalUpdate()
|
function element:externalUpdate()
|
||||||
@ -273,17 +277,18 @@ function element:externalUpdate()
|
|||||||
avg = sum/#self.renderBench
|
avg = sum/#self.renderBench
|
||||||
|
|
||||||
if self:calculateCanvasCoeficient(avg) then
|
if self:calculateCanvasCoeficient(avg) then
|
||||||
|
love.graphics.push()
|
||||||
|
love.graphics.origin()
|
||||||
self:createCanvas()
|
self:createCanvas()
|
||||||
|
love.graphics.pop()
|
||||||
self.settings.hasCanvas = true
|
self.settings.hasCanvas = true
|
||||||
|
self.settings.pendingUpdate = true
|
||||||
else
|
else
|
||||||
self.settings.failedCanvas = true
|
self.settings.failedCanvas = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
if self.settings.pendingUpdate then
|
|
||||||
if self.updater then
|
|
||||||
self:updater()
|
|
||||||
end
|
|
||||||
|
|
||||||
|
if self.settings.pendingUpdate then
|
||||||
self.settings.needsRendering = true
|
self.settings.needsRendering = true
|
||||||
self.settings.pendingUpdate = false
|
self.settings.pendingUpdate = false
|
||||||
end
|
end
|
||||||
@ -311,6 +316,7 @@ function element:draw(x, y, w, h)
|
|||||||
end
|
end
|
||||||
|
|
||||||
if context.getContext() then
|
if context.getContext() then
|
||||||
|
self:externalUpdate()
|
||||||
self:externalRender()
|
self:externalRender()
|
||||||
elseif not self.settings.inserted then
|
elseif not self.settings.inserted then
|
||||||
self.settings.inserted = true
|
self.settings.inserted = true
|
||||||
|
|||||||
@ -41,10 +41,16 @@ function context:set()
|
|||||||
self.absX = self.parentCtx.absX + self.view.x
|
self.absX = self.parentCtx.absX + self.view.x
|
||||||
self.absY = self.parentCtx.absY + self.view.y
|
self.absY = self.parentCtx.absY + self.view.y
|
||||||
|
|
||||||
|
self.offsetX = self.view.x +self.parentCtx.offsetX
|
||||||
|
self.offsetY = self.view.y +self.parentCtx.offsetY
|
||||||
|
|
||||||
activeContext = self
|
activeContext = self
|
||||||
else
|
else
|
||||||
self.absX = self.view.x
|
self.absX = self.view.x
|
||||||
self.absY = self.view.y
|
self.absY = self.view.y
|
||||||
|
|
||||||
|
self.offsetX = 0
|
||||||
|
self.offsetY = 0
|
||||||
|
|
||||||
activeContext = self
|
activeContext = self
|
||||||
end
|
end
|
||||||
|
|||||||
17
init.lua
17
init.lua
@ -24,7 +24,24 @@ setmetatable(helium, {__call = function(s, chunk)
|
|||||||
end,})
|
end,})
|
||||||
end})
|
end})
|
||||||
|
|
||||||
|
local first = true
|
||||||
|
local skip = true
|
||||||
function helium.render()
|
function helium.render()
|
||||||
|
if first and not skip then
|
||||||
|
--love.graphics.setScissor(500, 500, 1, 1)
|
||||||
|
|
||||||
|
local startTime = love.timer.getTime()
|
||||||
|
for i = 1, 20 do
|
||||||
|
love.graphics.print(i)
|
||||||
|
end
|
||||||
|
helium.element.setBench((love.timer.getTime()-startTime)/5)
|
||||||
|
|
||||||
|
first = false
|
||||||
|
--love.graphics.setScissor()
|
||||||
|
elseif first then
|
||||||
|
skip = false
|
||||||
|
end
|
||||||
|
|
||||||
--We don't want any side effects affecting internal rendering
|
--We don't want any side effects affecting internal rendering
|
||||||
love.graphics.reset()
|
love.graphics.reset()
|
||||||
for i, e in ipairs(helium.elementBuffer) do
|
for i, e in ipairs(helium.elementBuffer) do
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user