Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I was in a similar situation.<br> The way I started with openGL with start by looking at the very basic GLSurfaceView samples/demos. </p> <p>Start, by setting up your app activity, and set up the basic canvas.</p> <p>Take a loot at the replica island source code file: GameRenderer.java for how to setup your canvas with the proper GL flags for 2D (sprite) rendering. You should really take a look at SpriteMethodTest by the same author of replica island: <a href="http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest" rel="nofollow noreferrer">http://code.google.com/p/apps-for-android/source/browse/trunk/SpriteMethodTest</a></p> <p>See this question where I posted my own code: <a href="https://stackoverflow.com/questions/3597323/using-opengl-to-replace-canvas-android/3607943#3607943">Using OpenGL to replace Canvas - Android</a></p> <p>After you have your canvas set up, you start by calling something like: gl.glClear(GL10.GL_COLOR_BUFFER_BIT);</p> <p>After that you're ready to render a sprite. First, you'll need to load the sprite into a texture: <a href="http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html" rel="nofollow noreferrer">http://qdevarena.blogspot.com/2009/02/how-to-load-texture-in-android-opengl.html</a></p> <p>However, this is the tutorial that really helped me out with loading sprites: <a href="http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html" rel="nofollow noreferrer">http://tkcodesharing.blogspot.com/2008/05/working-with-textures-in-androids.html</a></p> <p>This is how I do it, I have a class named Texture.java:</p> <pre><code>public class Texture { /*Begin public declarations*/ public float x = 0; public float y = 0; public float z = 0; public float width = 0; public float height = 0; /*Begin Private Declarations*/ private GL10 gl; public int[] texture; //holds the texture in integer form private int texture_name; private int[] mCropWorkspace; private final BitmapFactory.Options sBitmapOptions; /*Begin Methods*/ public Texture( GL10 gl_obj ) { gl = gl_obj; texture = new int[1]; mCropWorkspace = new int[4]; sBitmapOptions = new BitmapFactory.Options(); sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; //Log.d(TAG, "Initializing Texture Object"); } public int get_texture_name( ) { return texture_name; } /*Loads the resource to memory*/ public boolean Load( Bitmap bitmap ) //rename this to glLoad and don't have it as an initializer parameter { /*many thanks to sprite method test if this works*/ if ( gl == null ) { Log.e(TAG, "Failed to load resource. Context/GL is NULL"); return false; } int error; int textureName = -1; gl.glGenTextures(1, texture, 0); textureName = texture[0]; //Log.d(TAG, "Generated texture: " + textureName); gl.glBindTexture(GL10.GL_TEXTURE_2D, textureName); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_REPLACE); GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); mCropWorkspace[0] = 0; mCropWorkspace[1] = bitmap.getHeight(); mCropWorkspace[2] = bitmap.getWidth(); mCropWorkspace[3] = -bitmap.getHeight(); ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, mCropWorkspace, 0); error = gl.glGetError(); if (error != GL10.GL_NO_ERROR) { Log.e(TAG, "GL Texture Load Error: " + error); } //Log.d(TAG, "Loaded texture: " + textureName); return true; } } </code></pre> <p>Then in my onDrawFrame() method I simply do:</p> <pre><code>Texture texture = ... gl.glBindTexture(GL10.GL_TEXTURE_2D, texture.texture[0]); ((GL11Ext) gl).glDrawTexfOES((float)(draw_x + 0.5), (float)(draw_y + 0.5), 0, tile_width, tile_height); </code></pre> <p>That should get you going with drawing 2D sprites on an openGL canvas. I've noticed that there is really no straightforward tutorial on this. Hopefully in the future I will post one in my dev blog: <a href="http://developingthedream.blogspot.com/" rel="nofollow noreferrer">http://developingthedream.blogspot.com/</a></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload