Questions about the LÖVE API, installing LÖVE and other support related questions go here.
Forum rules
Geti
Party member
Posts: 112
Joined: Tue Oct 20, 2009 6:38 am

Right, so anjo's just told me about this awesome thing called love.graphics.newScreenshot(), which gets the current screen's imagedata. I was very exited, as i figured this meant we could use mapPixel() to have awesome shaders and the like
Sadly, the performance of newScreenshot() is terrible on this computer, so i wanted to see how practical it would be for use on everyone else's computer, and if it was related to the fact that this computer has 64MB VRAM in it

Code: Select all


function getcolours(image,x,y,p)

if x-1 > 0 and x+1 < 639 and y-1>0 and y+1 < 479 then

r1,g1,b1 = image:getPixel(x+p[1],y)

r2,g2,b2 = image:getPixel(x,y)

r3,g3,b3 = image:getPixel(x+p[1],y+p[2])

r4,g4,b4 = image:getPixel(x,y+p[2])

r = (r1+r2+r3+r4)/4

g = (g1+g2+g3+g4)/4

b = (b1+b2+b3+b4)/4

return r,g,b

else return image:getPixel(x,y) end

end

function shadermap(x, y, r, g, b, a)

--get the position relative to the pixel's chunk

if math.floor(x/2) == x/2 then

--rightmost

if math.ceil(y/2) == y/2 then

--bottom

r,g,b = getcolours(shot,x,y,{-1,-1})

else

--top

r,g,b = getcolours(shot,x,y,{-1,1})

end

else

--leftmost

if math.ceil(y/2) == y/2 then

--bottom

r,g,b = getcolours(shot,x,y,{1,-1})

else

--top

r,g,b = getcolours(shot,x,y,{1,1})

end

end

return r, g, b, a

end

shot = love.graphics.newScreenshot( )

shot = love.graphics.newImage(shot)

love.graphics.draw(shot,0,0)

end


What I ask is that you require that somewhere, and then run shader() at the end of your draw callback and report the effect on your FPS. obvious it isn't a very pretty shader at the moment, but more to the point it's simple. I think the main bottleneck is love.graphics.newScreenshot(), but if that runs a lot faster on computers with newer GPUs then it's a moot point.

so yeah, some results would be lovely, to see if it's worth developing a shader feature for ilopocalypse at all.

Fruchthieb
Prole
Posts: 20
Joined: Sat Sep 26, 2009 12:04 pm
Location: austria

Hey Geti,

I tried it here under Linux, Laptop, DualCore 2*2,3GHz, NVidia Geforce 9300m GS. Standard Hardware, i guess.
I got ca. 1FPS.

The same problem worried me some time ago. I thought about two answers:

First: Implementing shaders in C++, i dont know, if that really reduces CPU cost, i think it does not, since taking the screenshot forces the cpu down.
(Nevertheless: improve the löve engine itself should be a possibility)

Second: Dont take a screenshot, but using a layer, which you transform by a "shader". Main problem here is, that most of effects you cannot implement.

Until now i havent tried neither the former nor the latter. I dont have that much time at the moment and it has no priority for my little game.

Hope i can help, regards, Fruchthieb

rhezalouis
Party member
Posts: 100
Joined: Mon Dec 07, 2009 10:27 am
Location: Indonesia
Contact:

### [Response]Wow

--===Spec===--
• WinVista
• Intel Core2Duo T7300 @ 2.00GHz
• Mobile Intel(R) 965 Express Chipset Family 358MB
• 3062MB RAM
--===Result===--
2 - 3 FPS
--===Average Execution Time===--
1.32 second per function call (deviation +/- 4.2%)
[40 sample @ timeLab1.5]

wow, that'd be a creepy shader!
Aargh, I am wasting my posts! My citizenshiiiip...

Geti
Party member
Posts: 112
Joined: Tue Oct 20, 2009 6:38 am

Hahah, exactly. The fact that all it does is mosaic the image is unsettling, I'm pretty sure it's the screenshot function that kills the FPS.
A much faster way to access the screen buffer for modification would be awesome.. mapPixel looks really powerful for this, but while we can't do anything with the screenbuffer there isn't any real way of doing stuff like this, which is a bit of a pity. It'd be such cool functionality

Fruchthieb
Prole
Posts: 20
Joined: Sat Sep 26, 2009 12:04 pm
Location: austria

Hey Geti,

no, it is not (only) the screenshot function. It is the traverse of the whole picture, and setting every pixel, which kills the FPS.

Regards...

Geti
Party member
Posts: 112
Joined: Tue Oct 20, 2009 6:38 am