Page 1 of 1

Whining about "shaders" being impractical.

Posted: Sun May 02, 2010 12:29 pm
by Geti
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 :D
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 :P

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



function shader()

	shot = love.graphics.newScreenshot( )

	shot:mapPixel(shadermap)

	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.

Re: Whining about "shaders" being impractical.

Posted: Sun May 02, 2010 1:50 pm
by Fruchthieb
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

[Response]Wow

Posted: Mon May 03, 2010 1:01 am
by rhezalouis
--===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! :o

Re: Whining about "shaders" being impractical.

Posted: Thu May 06, 2010 2:39 am
by Geti
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 ^^

Re: Whining about "shaders" being impractical.

Posted: Sun May 30, 2010 11:13 am
by Fruchthieb
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...

Re: Whining about "shaders" being impractical.

Posted: Tue Jun 08, 2010 6:42 am
by Geti
No, it's the screenshot function. Just putting that into the program drops the FPS to almost the same level as the whole shader function. mapPixel isn't a very slow function comparatively :\