This comment is perhaps a bit off your main topic, and I don't mean it
to derail your efforts or to criticize.

But I have a bit of a problem with your statement "Java is just too
slow...", taken as a general statement. Perhaps you have benchmark
data showing specific performance problems, and found it so; I'm not
disputing that.

However, the performance landscape is a lot more complex than this
would suggest, if taken beyond your context. In particular, there are
at least 4 performance areas to consider here:

1) Java performance -- which is actually generally quite good in the
desktop/server world; I've not done any Android benchmarking.
2) JNI performance -- there's added cost per switch to native code;
sometimes it's better to do more work in Java to avoid this overhead,
or to batch up work and do more per JNI call.
3) OpenGL library/driver performance. This is both the stuff that's
done in software in preparing for the GPU pipeline, and how
effectively it makes use of the hardware, and failures to use
capabilities that exist in the hardware.
4) The GPU hardware itself

Judging from the reports I see here (and not personal experience on
this platform as yet), a lot of the performance problems we see are
further down this chain. Better graphics hardware and better drivers
push the bottlenecks up the chain; faster main processors and Java VM
improvements push them down. But where you encounter the bottleneck
will always depend on just what the application is doing. Textures are
a big part of that, as is managing levels of detail so you don't waste
time rendering detail that isn't really noticeable. There are a lot of
ways to use OpenGL poorly. And there are a lot of ways to use it well,
but push the limits in the search for image quality.

Pushing things down in to C++ is just going to harm developers, if
it's not actually where the bottleneck is. As Mario says, you have to
choose carefully. Do you move your physics engine into C++ -- or just
the matrix multiplications? Or perhaps just significant components,
like collision detection and the timestep integrations? If you push
stuff down to C++, how do you allow for customization, without
incurring the JNI callback overhead?

Part of what I'm getting at is that because apps are different, the
optimal tradeoff will differ. I'm not sure that Google providing a
framework would be the way to go. Obviously, each developer
implementing their own isn't a good thing either. I think shared
community efforts, or commercial libraries make a lot more sense
(though there could be an "official" library as one of these options).

This is especially true of physics engines.

But there is such wide variation in what demands an application makes
of 3D rendering that blanket statements like "Java is too slow"
conceal the issues.

So I would council against blindly pushing stuff down to native code
based on such broad statements, but rather doing so conservatively,
based on realistic benchmarks.

On Mar 10, 2:35 am, Piotr <piotr.zag...@gmail.com> wrote:
> Both these frameworks are interesting, but as I mentioned before; it
> could be better, to create low-level, native NDK game framework
> library. Java is just too slow to handle thousands opengl calls per
> second for any game more complex than "falling bricks" or sth.
>
> Such framework could load game elements (maps, tiles, sprites, bkgs,
> sounds), giving developer control interface set to call high level
> methods like setSpriteSpeed, setBackgroundScroll, manageSpritePhysics,
> etc..

-- 
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

Reply via email to