Yes please!slime wrote:• Mobile-specific APIs for in-app-purchases and ads, as optional extensions (e.g. through require). I don't do any Android development, so if I were to implement part of this I still couldn't do all of it.
This would be cool. It would also be especially nice if the axes used would adjust when the screen orientation changes so that I don't have to write special code to convert accelerometer coords to on-screen coords.slime wrote:• Better APIs for mobile accelerometers and gyroscopes. The current "accelerometer-as-joystick" deal in 0.10.0 is a bit of a hack, and doesn't expose the device's gyroscope (rotation rate sensor) at all. Ideally I'd implement new APIs in SDL2 for this, and then use the new SDL APIs in LÖVE.
I definitely ran into a few hiccups with this when I started dev on a retina iPhone. My main suggestion would be that the default behavior should be for everything to appear the same size whether or highdpi is enabled or disabled (i.e. dimensionless "point" coordinates). It's a hassle to have to scan through your entire codebase for any references to dimensions just to get everything to not look super tiny.slime wrote:• Improved handling of high-dpi / retina (issue #1122). The way it is right now, it's hard to figure out how to handle it properly without doing some testing on devices that support it. I'm sure LÖVE could be made to handle some of the annoying bits itself, but I have to figure out what the best way to do that is without adding too many surprising corner cases.
Seems solid. I ran into some performance problems with my iOS game Unshuffle and had to do a lot of fine tuning to get it to the point where my iPhone was no longer heating up after a few minutes.slime wrote:• API changes to reduce the number of (accidental) graphics performance problems people might encounter (issue #1106), and as a secondary goal to make it easier to have a fancier graphics backend and make it use newer APIs like Metal and Vulkan (not that that's a high priority).[...]
In my codebase, I've been using some helper functions that mimic Python's context managers. It really went a long way towards making my code more readable and less error-prone. If these were implemented as method calls, I think it would be a step in the right direction. Here's what my code looks like for canvases (and I have a similar setup for shaders):slime wrote:• Reducing the global state in love.graphics (see this thread for some discussion) – but without making the graphics APIs less simple to learn and use. A lot of experimentation will probably have to be done for this.
Code: Select all
function love.graphics.drawOn(canvas, drawFn)
local oldCanvas = love.graphics.getCanvas()
love.graphics.setCanvas(canvas)
drawFn()
love.graphics.setCanvas(oldCanvas)
end
...
function love.draw()
love.graphics.drawOn(tmpCanvas, function()
love.graphics.drawOn(tmpCanvas2, function()
love.graphics.rectangle(0,0,10,10)
end)
love.graphics.draw(tmpCanvas2)
end)
love.graphics.draw(tmpCanvas)
end
Code: Select all
function love.draw()
tmpCanvas:drawOn(function()
love.graphics.rectangle(0,0,10,10)
love.graphics.screen:drawOn(function()
love.graphics.circle('fill',10,10,10) -- Draw to screen directly
end)
end)
love.graphics.draw(tmpCanvas)
end
Code: Select all
function love.draw()
local context = love.graphics.newContext()
context:scale(2,2)
context:translate(100,33)
context:render(function()
love.graphics.circle('fill',100,100,100)
end)
end
I would find this useful. And I would definitely be happy if LÖVE used [0.0,1.0] colors. I don't think it sacrifices much for noob-friendliness, because 0-1 is fairly intuitive (50% brightness red is (.50,0,0) instead of (127.5,0,0), 30% is (.30,0,0) instead of (76.5,0,0), etc.), and it makes shaders easier to learn if the rest of LÖVE uses the same color representation. It's also pretty awkward that LÖVE nominally supports the canvas format rgba16f and other floating point formats, but you can't actually set the draw color to negative numbers or anything outside the 0-255 range.slime wrote:• Support for different Image and ImageData pixel formats, including floating-point formats (e.g. storing arbitrary number values in pixels). This can be useful for advanced rendering techniques and similar things, but said formats aren't always supported by all of the graphics hardware that LÖVE supports. Also, LÖVE's APIs are all designed for "byte" color components that are in the range of [0, 255], so it's a bit awkward to add things that require different value ranges now.
That would be great. I'd also really like to have camera input on mobile devices.slime wrote:• Microphone input (issue #1). Ideally I'd want a microphone API that's actually useful/usable for real world use cases, which I have no experience with.
On a much bigger scale, I think it would be really cool if LÖVE used 2d vectors instead of x/y coordinates everywhere. All my code uses the HUMP vector module and I think it's really good practice to use vector math. I could go on endlessly about the benefits, but I understand that converting everything would be a huge undertaking, so I know it's really only wishful thinking.
Overall, great work on 0.10.0! LÖVE is definitely moving in a great direction and I'm already excited for the next release and happy to be a guinea pig for new features.