Nexus 1 opengl driver problem

by Carlo » Sun, 14 Feb 2010 16:16:45 GMT


Sponsored Links
 Hi,

We are facing 2 issues on the nexus 1 using opengl  ( under NDK ) :

1)      glNormalPointer(GL_BYTE, x ,  y);       does no work, there no lighting
done on any model using normals stored using byte, the same code is
working properly on a motorola droid/milestone.

2)   Changine Lighting states are very slow and freeze the display
frame for 1 sec on the Nexus 1, we are using dynamic light ON/OFF  and
i am under the impression that is because of the emulation of the
opengl 1.x pipeline under a 2.0 pipeline -> some hidden upload of
shaders of some sort in the drivers, but this is to a point that there
is no way to use realtime lighting on our game for the nexus 1 so
somebody has to look into this issue.

If somebody has some advise to share, workaround, how to  fix those 2
issues , I'll be very happy to hear from you.

thank you,

Carlo

--



Nexus 1 opengl driver problem

by Carlo » Sun, 14 Feb 2010 16:35:50 GMT


 Btw glNormalPointer(GL_SHORT, x ,  y);   too is broken, just GL_FLOAT
are working, that's not helping the bandwidth saving for the nexus 1




--


Sponsored Links


Nexus 1 opengl driver problem

by Ralf Schneider » Sun, 14 Feb 2010 17:19:51 GMT


 Hello Carlo,

Im using the NDK, but I don't think this makes a difference

1)      glNormalPointer(GL_BYTE, x ,  y);       does no work, there no
GL_FLOAT seems to work.


I do not experience this kind of slow down on the Nexus One.
Enabling/Disabling GL_LIGHTNING while rendering a frame works fine for me.

May be the problem is specific to some settings? So for the record I'm using
this:

Display:setEGLConfigChooser(5, 6, 5, 8, 16, 0)
Datatypes: GL_FLOAT for everything
TextureMaps: 8-8-8-(8)
Vertex Colors: None
VBOs: None
Lights: 1
Fog: Linear
Average Scene: After basic frustum culling 10000 Triangles per frame are
sent to OpenGL
Other: glShadeModel(GL_SMOOTH);
        glEnable(GL_CULL_FACE);
        glEnable(GL_DEPTH_TEST);
        glDepthFunc(GL_LEQUAL);
        glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glFogf(GL_FOG_MODE, GL_LINEAR );
    glHint(GL_FOG_HINT, GL_NICEST);

... I know these settings cry for optimizations, but currently I'm mainly
experimenting with some basic stuff.
I'm still amazed by the performance. It seems you can easily push 300000
lighted tris/sec. After some optimizations probably even more.

Regards,
Ralf

--



Nexus 1 opengl driver problem

by Carlo » Mon, 15 Feb 2010 10:17:36 GMT


 hanks for your feedback :)

Do you push optimized triangle list indexed, triangle list or strip in
your scene ?

well, from our experience here, If you have a common setting that you
do not change we do not see this problem, let's say you have 1 light
set and keep it this way, however if you have a scene with multiple
texture, 2 or 4 point lights that you turn ON/ OFF independently,
color material, enable disabling LIGHTING between rendering batch of
geometry then we start to see some very strange hang which i do not
explain since the exact same opengl code works perfectly on the droid/
milestone (smooth as butter).
For the Normals, just FLOAT is working and so we will use FLOAT but
still that's broken as we should be able to have support for BYTE for
normals too.
As for the performances, 300 000/s (while ok) are far away from the
22millions/sec (roughly 1.5%) listed on the qualcomm spec for the
snadragon :

http://www.qualcomm.com/products_services/chipsets/snapdragon.html

(wonder where they took this number out of)

Performances drop very sharply if you turn on more than 1 light
(specially if point light), there is no such of performances drop on
the SGX PowerVR which still maintains high performances from what we
can tell ;)

We are still experimenting too see how we will "workaround" this
trouble that we are facing....




On Feb 14, 6:18pm, Ralf Schneider <li...@gestaltgeber.com> wrote:

--



Nexus 1 opengl driver problem

by Robert Green » Mon, 15 Feb 2010 14:34:26 GMT


 f the snapdragon chip follows suit with the MSM7200, GL Lights will
cause the CPU to be involved in calculations, which is why you'll see
a big performance hit.

Check out all of these brew whitepapers from Qualcomm. They talk
about lots of that stuff:

http://www.brewconference.com/brew_2004/pdf/david_ligon_qualcomm_optimizing_games.pdf
http://www.brewconference.com/brew_2006/pdf/progpc21_dorbie_3dgraphics.pdf
http://brew.qualcomm.com/brew_bnry/pdf/brew_2007/Tech-303_Ligon.pdf
http://www.brewconference.com/brew_2008/pdf/TECH-606.pdf


On Feb 14, 8:17pm, Carlo <ca...@hyperdevbox.com> wrote:

--



Nexus 1 opengl driver problem

by Ralf Schneider » Mon, 15 Feb 2010 16:50:44 GMT


 Hi Carlo,

well, I'm currently really only experimenting with zero optimizations - one
could say I nearly make everything wrong regarding performance. So you can
treat all my answers and numbers as a worst case.

2010/2/15 Carlo <ca...@hyperdevbox.com>


 I push indexed triangle lists. Vertex data is sorted by first occurrence of
an index. I'm currently not using interleaved buffers. No VBOs.




Ok, compared to this my scene setting is currently very simple. One
directional light.
Enabling/Disabling this light does not hurt performance.


For the Normals, just FLOAT is working and so we will use FLOAT but
While I have doubts about the 22million/sec (may be: no colors, no lights,
no texture, screen size of tris: 1 pixel ??). I'm pretty sure if I switch to
VBOs, use 565 textures, ... I can increase performance dramatically.

Fill rate is IMHO a bigger problem. An "overdraw" of 2-3 seems to be the
limit. Using vertex colors and multi textures even an overdraw of 2 seems to
much.


Hm, that's bad. For my current project I can probably live with one light
source, but in general this is not much.

--



Other Threads

1. PackageManager denies my app DEVICE_POWER permission

PackageManager denies my app DEVICE_POWER permission. I get in LogCat:

PackageManager "not granting android.permission.DEVICE_POWER to
package...". Why does this happen? My app .apk file is signed and all
other permissions are granted.

-- 

2. how to check if the current thread is in the ui thread?

I suppose you might also try just catching the IllegalStateException
which would occur if not a UI thread AFAIK..

-- 

3. Permanent socket connection drains battery

4. OOT: iHand for iPhone4

5. button highlight

6. Android market hiding apps with bluetooth permissions from Android 1.5 and 1.6

7. install language indonesia di android