Сбой Love2d при выходе, если после создания холста размер окна был изменен
Моя проблема в том, что, когда вы изменяете размер окна, выходите нажатием клавиши в консоли, love.exe вылетает. Это происходит только тогда, когда используется холст. Вот как воспроизвести аварию:
- Запустите файл.love
- Подождите, пока круг завершится и окно закроется
- Нажмите любую клавишу, затем следует выполнить love.exe.
Это не будет работать, если вы только запустите код, потому что консоль должна быть включена в conf.lua, поэтому, пожалуйста, запустите файл love. Если размер окна не изменен, сбой не произойдет.
авария
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 здесь, но пока нет хороших ответов. Я думал, может быть, я мог бы получить ответ здесь.
1 ответ
Согласно документации setMode:
Изменение режима отображения может иметь побочные эффекты: например, холсты будут очищены, а значения, отправленные в шейдеры с помощью Shader:send, будут удалены. Обязательно сохраните содержимое холстов заранее или повторно перетяните их позже, если вам нужно.
Вы можете сохранить данные холста и предотвратить сбой, сбросив цель рендеринга в качестве основного экрана во время операции setMode:
love.graphics.setCanvas() -- Reset render target to screen
love.window.setMode(800, 800) -- Resize window
love.graphics.setCanvas(canvas) -- Render to canvas again
НТН,
Xeozim