[android-developers] Re: Fil-rate workaround with FBOs?

2010-09-16 Thread Samsyn
I have a followup question, of course...

So, I am successfully rendering my scene to an FBO-texture, then using
that texture on a Quad in the background (so GPU renders to FBO
dimensions, and quad stretches it to screen dimensions).  And it
works.

So, I thought, perhaps the OES drawTex function would be a faster way
of getting that FBO texture to the background than a normal quad.

So, after some hair-pulling wrt GL11Ext vs GL11ExtensionPackage, I get
that working.  Which is to say I get drawTex working to render a
texture to the background, and it is faster than a quad, so I like it.

But while my FBO texture is clearly 'ok' (it renders fine as a quad)
and my drawTex code is 'ok' (it renders Joe Random Texture just fine),
when I try to use drawTex to draw the actual FBO texture, it's not
fine (not on my Moto Droid I at least).  It renders all black.

Again, exact same code, only difference being which texture I bind,
renders great ('normal' textures) or renders black (FBO texture), and
I 'know' the FBO texture is filled with colorful goodness.  And it's
really rendering black, not just 'not rendering'

All the explanations I can think of feel like they should be equally
true of the other texture.

I guess I should try it in the emulator

On Sep 15, 1:30 am, Samsyn  wrote:
> Well, I ran the experiement...
>
> 1.) it does work, though apparently the FBO texture ends up upside
> down with relation to all my other textures, so I had to do a little
> correction for that
> 2.) it does increase the frame rate, but not substantially
> 3.) it does look worse (a 256x256 FBO is not too awful.  128x128 is
> horrid)
> 4.) it consumes extra memory (for the FBO buffer(s))
>
> on a Moto Droid I, my reference scene
>
> Without FBOs, rendering to full screen: about 20 fps
> With FBOs, rendering to 128x128: about 28.5fps
> With FBOs, rendering to 256x256: about 26.2fps
> With FBOs, rendering to 32x32: about about 30 fps  (clearly unusuable,
> of course, unless you wanted a illusion of out of focus)
>
> 512x512 is not on the table as you get an out of memory condition with
> high regularity
>
> I still have to try it on the Eris (my problem phone), but overall, I
> don't think the result really justifies the feature.
>
> I'm pretty sure the fill rate I save with the smaller render target is
> lost with the render of the background quad with that texture on it.
> Perhaps if I had a clever way to jam the texture (and stretch it
> nicely) into the colorBuffer directly...
>
> On Sep 12, 1:12 pm, Samsyn  wrote:> My apologies 
> if this is a stupid question...
>
> > Might I get a net frame rate improvement if I did something like this:
>
> > * create an FBO of resolution less than the full phone screen
> > dimensions (user-selected quality vs speed option)
> > * do most of my scene rendering into that FBO
> > * then the 'real' (full screen) render would either use the FBO as the
> > starting background color buffer contents, or render it (probably
> > orthographically) as a single quad.
> > * then probably add UI/Text decoration on top of that, where the
> > resolutions really benefits.
>
> > And, is there some egl glue (I am a glSurfaceView kinda dood) that
> > would automagically do something like this in the first place?
>
> > Or am I being naive to think the GPU could do its work faster if it
> > was rendering to a lower resolution target?
>
> > And would the phone with the worst fill rate also be the phone that
> > doesn't support FBOs in the first place?
>
> > After reading the OpenVR info (thanks again, Lance) I think I might
> > get some improvement by breaking some huge triangles into smaller
> > ones. I have some (water layer, in particular) that are so large they
> > probably get processed by every tile of the screen.
>
> > Thanks for any insights,
>
> > - Dan

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


Re: [android-developers] Re: Fil-rate workaround with FBOs?

2010-09-15 Thread Leigh McRae
 Fill rate does seem to be the biggest issue with performance.  I would 
make sure you have stuff like blending off to make the quad go as fast 
as it can.



On 9/15/2010 4:30 AM, Samsyn wrote:

Well, I ran the experiement...

1.) it does work, though apparently the FBO texture ends up upside
down with relation to all my other textures, so I had to do a little
correction for that
2.) it does increase the frame rate, but not substantially
3.) it does look worse (a 256x256 FBO is not too awful.  128x128 is
horrid)
4.) it consumes extra memory (for the FBO buffer(s))

on a Moto Droid I, my reference scene

Without FBOs, rendering to full screen: about 20 fps
With FBOs, rendering to 128x128: about 28.5fps
With FBOs, rendering to 256x256: about 26.2fps
With FBOs, rendering to 32x32: about about 30 fps  (clearly unusuable,
of course, unless you wanted a illusion of out of focus)

512x512 is not on the table as you get an out of memory condition with
high regularity

I still have to try it on the Eris (my problem phone), but overall, I
don't think the result really justifies the feature.

I'm pretty sure the fill rate I save with the smaller render target is
lost with the render of the background quad with that texture on it.
Perhaps if I had a clever way to jam the texture (and stretch it
nicely) into the colorBuffer directly...

On Sep 12, 1:12 pm, Samsyn  wrote:

My apologies if this is a stupid question...

Might I get a net frame rate improvement if I did something like this:

* create an FBO of resolution less than the full phone screen
dimensions (user-selected quality vs speed option)
* do most of my scene rendering into that FBO
* then the 'real' (full screen) render would either use the FBO as the
starting background color buffer contents, or render it (probably
orthographically) as a single quad.
* then probably add UI/Text decoration on top of that, where the
resolutions really benefits.

And, is there some egl glue (I am a glSurfaceView kinda dood) that
would automagically do something like this in the first place?

Or am I being naive to think the GPU could do its work faster if it
was rendering to a lower resolution target?

And would the phone with the worst fill rate also be the phone that
doesn't support FBOs in the first place?

After reading the OpenVR info (thanks again, Lance) I think I might
get some improvement by breaking some huge triangles into smaller
ones. I have some (water layer, in particular) that are so large they
probably get processed by every tile of the screen.

Thanks for any insights,

- Dan


--
Leigh McRae
www.lonedwarfgames.com

--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en


[android-developers] Re: Fil-rate workaround with FBOs?

2010-09-15 Thread Samsyn
Well, I ran the experiement...

1.) it does work, though apparently the FBO texture ends up upside
down with relation to all my other textures, so I had to do a little
correction for that
2.) it does increase the frame rate, but not substantially
3.) it does look worse (a 256x256 FBO is not too awful.  128x128 is
horrid)
4.) it consumes extra memory (for the FBO buffer(s))

on a Moto Droid I, my reference scene

Without FBOs, rendering to full screen: about 20 fps
With FBOs, rendering to 128x128: about 28.5fps
With FBOs, rendering to 256x256: about 26.2fps
With FBOs, rendering to 32x32: about about 30 fps  (clearly unusuable,
of course, unless you wanted a illusion of out of focus)

512x512 is not on the table as you get an out of memory condition with
high regularity

I still have to try it on the Eris (my problem phone), but overall, I
don't think the result really justifies the feature.

I'm pretty sure the fill rate I save with the smaller render target is
lost with the render of the background quad with that texture on it.
Perhaps if I had a clever way to jam the texture (and stretch it
nicely) into the colorBuffer directly...

On Sep 12, 1:12 pm, Samsyn  wrote:
> My apologies if this is a stupid question...
>
> Might I get a net frame rate improvement if I did something like this:
>
> * create an FBO of resolution less than the full phone screen
> dimensions (user-selected quality vs speed option)
> * do most of my scene rendering into that FBO
> * then the 'real' (full screen) render would either use the FBO as the
> starting background color buffer contents, or render it (probably
> orthographically) as a single quad.
> * then probably add UI/Text decoration on top of that, where the
> resolutions really benefits.
>
> And, is there some egl glue (I am a glSurfaceView kinda dood) that
> would automagically do something like this in the first place?
>
> Or am I being naive to think the GPU could do its work faster if it
> was rendering to a lower resolution target?
>
> And would the phone with the worst fill rate also be the phone that
> doesn't support FBOs in the first place?
>
> After reading the OpenVR info (thanks again, Lance) I think I might
> get some improvement by breaking some huge triangles into smaller
> ones. I have some (water layer, in particular) that are so large they
> probably get processed by every tile of the screen.
>
> Thanks for any insights,
>
> - Dan

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en