Wow, your code just produces awesome results. Only problem is that FPS has taken a serious hit. I'm not stretching the planes too much though, ie there's not a crazy amount of repeats. Any idea why this?

Where are you loading the resources? onSurfaceChanged or onSurfaceCreated?I think it could be happening if the image was loaded separately for each tile.How big is your image? Try compressing it if it's too big...

And if you're loading your stuff in onSurfaceChanged try doing it in onSurfaceCreated.

Called when the rendering thread starts and whenever the EGL context is lost. The EGL context will typically be lost when the Android device awakes after going to sleep.

Since this method is called at the beginning of rendering, as well as every time the EGL context is lost, this method is a convenient place to put code to create resources that need to be created when the rendering starts, and that need to be recreated when the EGL context is lost. Textures are an example of a resource that you might want to create here.

Note that when the EGL context is lost, all OpenGL resources associated with that context will be automatically deleted. You do not need to call the corresponding "glDelete" methods such as glDeleteTextures to manually delete these lost resources.

Please provide feedback if possible, or if there are any improvements.

I tweaked a bit the bitmaps (size, JPEG compression, seamless) and it looks quite good now. I also followed your advice on the "onSurfaceCreated". That didn't make a noticeable performance change but am convinced that it is better to put the code there.

Performance is better now but there is a huge correlation between performance and the amount of time textures are repeated. I guess this is good in a way, it makes me bear in mind technical limitations rather than just making everything "hi-res"

I can see what you mean. Maybe it's just how things work in android.graphics.Shader.

I think I'd rather create a bigger texture which would be tiled (512 or 1024) in Photoshop or whatever, then in a 3d program make the water plane (not the Airplane, but the sea) just one object (eg.: one plane), flatten it's UV's and make sure they're the shape of the sea plane (again, not the Airplane), align them with the texture, and export it all as OBJ (It's my favorite format). Then load it in JPCT-ae, and assign the texture which was created before, the tiled one. I would also use MemoryHelper.compact() because:

Quote

This can be used to trigger some gc work that might otherwise interrupt the application causing an animation to stutter or similar. However, this method can't avoid that...it just increases the chance that won't happen or at least not that often.

and probably clear the loader cache with Loader.clearCache();...

I think if you use one single bitmap which you would manually tile in an image editor, and slap it on just one flat UVed object, it would look nicer, and improve the fps...

jPCT-AE (as well as jPCT) repeats the texture by default if the texture coordinates are <0 or >1, i.e. if the upper left corner is at 0/0 and the lower right at 10/10, the texture will be repeated 10 times on that polygon. I've no idea what Blender does, when you enable this "repeating", but obviously something different or otherwise, it should just work. Or maybe the exporter screws it up somehow?

Then save that image, and apply it to my object, so it would be tiled at runtime.I've used a lot of complex models (7000+ polys) with big images before (When I wanted a detailed UV object, with a complex map), and so far I haven't had problems with fps, 4-7 frames at the most. Of course, I used MemoryHelper.compact(); and Loader.clearCache(); too...

Maybe it's just me, but you won't know unless you try

Plus, what ErgonOlsen said just now is true, I typed the method above because I've no idea how Blender works, I use something else.