Недавно я сделал что-то похожее с моим приложением и получил большое преимущество в производительности.Многое из того, что вы «должны изменить», зависит от того, как структурировано ваше приложение.
Для меня самым сложным был перевод элементов пользовательского интерфейса, потому что мне пришлось заново сгенерировать всю логику «элемент управления касался» инастроить рендеринг текста.Ни одна из этих проблем не является достаточно жесткой, чтобы разбираться в сделках, но я бы избежал их, если вы можете.Поскольку ваше приложение уже только 2d, вы можете избежать самых сложных частей изучения OpenGL, связанных с трехмерным измерением!Я бы начал с настройки gl.SurfaceView.Используйте glOrtho для настройки экстентов вашего мира GL, если ваша игра уже была независимой от разрешения, она должна иметь представление о том, насколько широко экран каким-то «независимым» образом.Просто настройте glOrtho для использования тех же экстентов.
Я создал простой класс спрайтов, который я использовал для всего моего рендеринга.У Sprite был простой вершинный буфер в качестве членов, я просто сделал его прямоугольником 1 на 1, затем использовал шкалу, чтобы установить размер.(Так что если бы это было действительно 30x30, я бы установил масштаб на ScaleX = 30 ScaleY = 30).
Это выглядело примерно так
ByteBuffer vbb = ByteBuffer.allocateDirect( mNumVerts * 2 * 4 );
vbb.order( ByteOrder.nativeOrder() );
mVtxBuf = vbb.asIntBuffer();
vbb = ByteBuffer.allocateDirect( mNumVerts * 2 * 4 );
vbb.order( ByteOrder.nativeOrder() );
mTexBuf = vbb.asIntBuffer();
mVtxBuf.put( -Fixed32.HALF ); mVtxBuf.put( -Fixed32.HALF ); mTexBuf.put( 0 ); mTexBuf.put( Fixed32.ONE );
mVtxBuf.put( Fixed32.HALF ); mVtxBuf.put( -Fixed32.HALF ); mTexBuf.put( Fixed32.ONE ); mTexBuf.put( Fixed32.ONE );
mVtxBuf.put( Fixed32.HALF ); mVtxBuf.put( Fixed32.HALF ); mTexBuf.put( Fixed32.ONE ); mTexBuf.put( 0 );
mVtxBuf.put( -Fixed32.HALF ); mVtxBuf.put( -Fixed32.HALF ); mTexBuf.put( 0 ); mTexBuf.put( Fixed32.ONE );
mVtxBuf.put( Fixed32.HALF ); mVtxBuf.put( Fixed32.HALF ); mTexBuf.put( Fixed32.ONE ); mTexBuf.put( 0 );
mVtxBuf.put( -Fixed32.HALF ); mVtxBuf.put( Fixed32.HALF ); mTexBuf.put( 0 ); mTexBuf.put( 0 );
mVtxBuf.position( 0 );
mTexBuf.position( 0 );
(Fixed32.HALF просто 0,5 вс фиксированной точкой, вы можете просто использовать 0.5 и изменить вызовы Draw на FLOAT вместо FIXED)
С кодом рисования ...
gl.glMatrixMode( GL10.GL_MODELVIEW );
gl.glLoadIdentity();
gl.glEnableClientState( GL10.GL_VERTEX_ARRAY );
gl.glEnableClientState( GL10.GL_TEXTURE_COORD_ARRAY );
gl.glColor4f( 1.0f * thing.getAlpha() , 1.0f * thing.getAlpha() , 1.0f * thing.getAlpha() , thing.getAlpha() );
gl.glTranslatef( thing.getX(), thing.getY(), thing.getZ() );
gl.glScalef( thing.getXScale(), thing.getYScale(), thing.getZScale() );
gl.glFrontFace( GL10.GL_CW );
gl.glVertexPointer( 2, GL10.GL_FIXED, 0, mdl.getVtxBuf() );
gl.glTexCoordPointer( 2, GL10.GL_FIXED, 0, mdl.getTexBuf() );
// gl.glColorPointer( 4, GL10.GL_FLOAT, 0, mColorBuffer );
gl.glDrawArrays( GL10.GL_TRIANGLES, 0, mdl.getVtxCount() );