Love2d从桌子上画画

时间:2017-02-12 22:53:30

标签: graphics lua love2d

在Love2d中有一种有效的方法可以在屏幕上打印一个大的(如800 x 600)颜色值表吗?我已经尝试过创建大量矩形(速度非常慢)或者创建一个imageData并绘制它(如果表格值在每一帧都没有改变,那就没问题了,但他们确实这样做了)。谢谢!

1 个答案:

答案 0 :(得分:1)

如果你可以在没有(多)额外数据的情况下计算这些值,你可以尝试编写一个着色器,并在绘制内容时让计算内容。

如果这不起作用,使用ImageData通常可以比默认情况下快得多。首先,您应该确保不是每帧调用g = love.graphics.newImage( image_data ),而是创建一次,然后只调用g:refresh( )

接下来的事情是:mapPixel真的很慢,因为它经常从C调用Lua(每个像素一次)并且这需要相当多的开销。在Lua中重写它或者只使用:setPixel(也许是:getPixel)的普通循环会更快。

如果这仍然太慢,最后一个问题如下:LuaJIT无法JIT编译对通过普通Lua API提供的C函数的调用。但是,如果您通过ffi描述数据结构然后让LuaJIT直接进行访问,则可以替换这些。史莱姆为爱情0.9(code on github)做了这个。只需require该文件,它将取代慢速函数,一切都应该快得多。我不是100%肯定,但我认为我已经使用了当前版本(0.10)并且它仍然有效。 (如果ImageData的内部格式发生变化,它将会中断,但它应该相对容易修复 - 并且其他人可能会更新代码并将其发布到某处。)