Are you using a device or an emulator? The emulator is notoriously slow at texture uploads. You need to test on real devices to know what kind of real-world performance you'll get.
This question has come up many times and the answer seems to be: glTexImage2D is pretty slow on most chips. Find a better way (such as framebuffers) or don't try to upload so much data. Here is a thread that you should read through to save yourself lots and lots of time - http://groups.google.com/group/android-ndk/browse_thread/thread/24d8d7e4f474c044/e9a452266364f889#e9a452266364f889 Here are some numbers from the post: 256x256 => mid 30s 512x256 => high 60s (with a jump to 100+?) 256x512 => high 60s 512x512 => 130-150 So they seem to scale appropriately. On Feb 23, 10:25 pm, Jonathan <[email protected]> wrote: > I have an array in memory that represents the screen. I then call > put() once to put that into the ByteBuffer that gets pased to OpenGL. > > I tried skipping the ByteBuffer stuff and just passing the internal > array from Java to native and then calling glTexImage2D() with the > pointer to avoid the copy, and while it's slightly faster, the upload > of the texture takes about 100ms which is too long. > > It's a 2D application, and the contents of the "screen" (as > represented by this internal array I'm passing around) can change at > any given time. I'm think I may have to use some combination of sub > texture updates in order to get what want and have it be smooth. > Uploading a 512x256 texture each frame may be too much. > > Any other ideas how I can speed this up? > > On Feb 23, 6:42 pm, Robert Green <[email protected]> wrote: > > > > > If you're creating a bitmap dynamically, writing one byte at a time > > with .put(), I wouldn't be surprised at all if it's really slow. If > > at all possible, move that code into native. You can preallocate a > > ByteBuffer in Java, pass it into native and work on the pointer > > directly in native, then use it in OpenGL either in Java or in > > native. > > > You haven't said what the application is but if you can use the GPU > > and a framebuffer to create your dynamic texture instead of doing it > > on the CPU with a bitmap, that's another much faster way to go. > > > On Feb 23, 5:42 pm, Jonathan <[email protected]> wrote: > > > > Hey guys, > > > > I'm porting over some software from the iPhone, and the fact that I > > > need to use ByteBuffers for my data structures in order to use OpenGL > > > is killing me. My render loop takes 3ms to actually do the work and > > > render screen, but I do need to perform a ByteBuffer clear / > > > repopulate to update a dynamic texture. > > > > The bytebuffer clear, followed by the put() and position(0) to prepare > > > for texture uploading takes about 100ms. This is WAY too slow. > > > > Is there a way around using ByteBuffers other than going the NDK > > > route? The texture is 512x256 RGBA... should the > > > ByteBuffer .clear() .put() and .position() be taking 100ms? > > > > Thanks in advance. -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

