如果 window 在创建 canvas 后调整了大小,则退出时 Love2d 会崩溃
Love2d crash when quitting, if window was resized after canvas creation
我的问题是,当您调整 window 的大小时,通过在控制台中按一个键退出,love.exe 会崩溃。只有在使用 canvas 时才会发生这种情况。
以下是重现崩溃的方法:
- 运行 .love 文件
- 等待圆圈结束,window
关闭
- 按任意键,love.exe 应该会崩溃
如果你只运行代码是行不通的,因为在conf.lua中需要启用控制台,所以请运行love文件。如果 window 未调整大小,则不会发生崩溃。
崩溃
function draw()
love.graphics.circle("fill", 100, 100, 50) -- Draw circle
love.graphics.setColor(255, 255, 255, 255)
love.graphics.setCanvas()
love.graphics.draw(canvas, 0, 0, 0, 2) -- 200% zoom
love.graphics.setCanvas(canvas)
love.graphics.present() -- Refresh screen
end
love.window.setMode(500, 500)
canvas = love.graphics.newCanvas(1000, 1000) -- Create canvas
love.graphics.setCanvas(canvas)
draw() -- Draw circle
love.timer.sleep(1)
love.window.setMode(800, 800) -- Resize window
love.graphics.setCanvas(canvas)
draw() -- Redraw circle
love.timer.sleep(2)
love.window.close()
print("Should crash when you quit this by pressing key")
os.execute("pause")
love.event.push("quit")
没有崩溃
function draw()
love.graphics.circle("fill", 100, 100, 50) -- Draw circle
love.graphics.setColor(255, 255, 255, 255)
love.graphics.setCanvas()
love.graphics.draw(canvas, 0, 0, 0, 2) -- 200% zoom
love.graphics.setCanvas(canvas)
love.graphics.present() -- Refresh screen
end
love.window.setMode(500, 500)
canvas = love.graphics.newCanvas(1000, 1000) -- Create canvas
love.graphics.setCanvas(canvas)
draw() -- Draw circle
love.timer.sleep(1)
-- Window was resized once, before canvas creation --> no crash
love.window.close()
os.execute("pause")
love.event.push("quit")
请注意,我也在 LOVE 论坛 here 上发布了这个问题,但还没有好的答案。我想也许我可以在这里得到答案。
Changing the display mode may have side effects: for example, canvases will be cleared and values sent to shaders with Shader:send will be erased. Make sure to save the contents of canvases beforehand or re-draw to them afterward if you need to.
您可以通过在 setMode 操作期间将渲染目标重置为主屏幕来维护 canvas 数据并防止崩溃:
love.graphics.setCanvas() -- Reset render target to screen
love.window.setMode(800, 800) -- Resize window
love.graphics.setCanvas(canvas) -- Render to canvas again
HTH,
西奥齐姆
我的问题是,当您调整 window 的大小时,通过在控制台中按一个键退出,love.exe 会崩溃。只有在使用 canvas 时才会发生这种情况。 以下是重现崩溃的方法:
- 运行 .love 文件
- 等待圆圈结束,window 关闭
- 按任意键,love.exe 应该会崩溃
如果你只运行代码是行不通的,因为在conf.lua中需要启用控制台,所以请运行love文件。如果 window 未调整大小,则不会发生崩溃。
崩溃
function draw()
love.graphics.circle("fill", 100, 100, 50) -- Draw circle
love.graphics.setColor(255, 255, 255, 255)
love.graphics.setCanvas()
love.graphics.draw(canvas, 0, 0, 0, 2) -- 200% zoom
love.graphics.setCanvas(canvas)
love.graphics.present() -- Refresh screen
end
love.window.setMode(500, 500)
canvas = love.graphics.newCanvas(1000, 1000) -- Create canvas
love.graphics.setCanvas(canvas)
draw() -- Draw circle
love.timer.sleep(1)
love.window.setMode(800, 800) -- Resize window
love.graphics.setCanvas(canvas)
draw() -- Redraw circle
love.timer.sleep(2)
love.window.close()
print("Should crash when you quit this by pressing key")
os.execute("pause")
love.event.push("quit")
没有崩溃
function draw()
love.graphics.circle("fill", 100, 100, 50) -- Draw circle
love.graphics.setColor(255, 255, 255, 255)
love.graphics.setCanvas()
love.graphics.draw(canvas, 0, 0, 0, 2) -- 200% zoom
love.graphics.setCanvas(canvas)
love.graphics.present() -- Refresh screen
end
love.window.setMode(500, 500)
canvas = love.graphics.newCanvas(1000, 1000) -- Create canvas
love.graphics.setCanvas(canvas)
draw() -- Draw circle
love.timer.sleep(1)
-- Window was resized once, before canvas creation --> no crash
love.window.close()
os.execute("pause")
love.event.push("quit")
请注意,我也在 LOVE 论坛 here 上发布了这个问题,但还没有好的答案。我想也许我可以在这里得到答案。
Changing the display mode may have side effects: for example, canvases will be cleared and values sent to shaders with Shader:send will be erased. Make sure to save the contents of canvases beforehand or re-draw to them afterward if you need to.
您可以通过在 setMode 操作期间将渲染目标重置为主屏幕来维护 canvas 数据并防止崩溃:
love.graphics.setCanvas() -- Reset render target to screen
love.window.setMode(800, 800) -- Resize window
love.graphics.setCanvas(canvas) -- Render to canvas again
HTH,
西奥齐姆