IMPORTANT: Since version 1.2, this app finally works on Samsung and Motorola devices. If you are a developer please take a look below to the comment for developers just in case the information could be in handy for you as well. THANKS EVERYONE for the reports.
Demo that shows some cool effects that can be achieved thanks to the programmable OpenGL ES 2.0 GPU pipeline, such as normal mapped specular animated lighting, real time refractions and image postprocess.
If you like the effects and would like to play a game that uses them, please try the game "AQUA SLASH GL DEMO" for free.
To move the light source, touch the screen with one finger to the desired position.
To change the background image, while touching the screen with one finger (therefore moving the light) touch with another one on the left side of the screen.
To change the postprocess effect, do the same but touch with the second finger on the right side of the screen instead of the left.
This demo requires Android 2.2 or higher.
INFO FOR DEVELOPERS: For some reason, samsung and motorola opengl driver does not allow the creation of FrameBufferObjects with color attachments of dimensions non power of 2. All the opengl calls do not generate any error and the FrameBufferObject status is ok, but then nothing gets written to the offscreen buffer if width and/or heigth is not power of 2. On HTC, LG, Toshiba and Dell devices this works well and any dimension can be used.
Since this app uses offscreen rendering for the postprocess effects, this is why it did not work with samsung and motorola devices before version 1.2.
Despite the somewhat unfair 1 star ratings of angry samsung and motorola users because of this issue, thanks everyone for the reports.
Special thanks to my sister Silvia and my friend "El Iberico" for sharing with me their Galaxy S smartphones that allowed me to debug the app and find out what the problem was.
To Harism: Thanks for your comments and yes, the problem is directly related to the off screen render target resolution.
There is not any copy of textures at any time. The first pass where the water effect is rendered is the one that uses the off screen buffer (with less resolution for performance reasons) and later, that render target is directly binded as an input texture to the final pass where the other effect is rendered (pixelization etc) to full resolution.
Increased water effect resolution, sorry Adreno200 users.