2011-04-16 1 views
0

comment configurer opengl pour utiliser glTextParameteriv correct. Le code suivant fonctionne dans l'émulateur mais pas sur mon désir htc avec le mod cyanogen 7. Peut-être que quelqu'un peut l'essayer avec son propre téléphone?openglaps glTexParameteriv

public class GLView extends GLSurfaceView implements GLSurfaceView.Renderer { 

public GLView(Context context) { 
    super(context); 
    setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS); 
    setRenderer(this); 
} 

int textureID; 

@Override 
public void onDrawFrame(GL10 gl) { 
    gl.glMatrixMode(GL10.GL_MODELVIEW); 
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);   
    ((GL11Ext)gl).glDrawTexfOES(10, 10, 0, 100, 100); 
} 

@Override 
public void onSurfaceChanged(GL10 gl, int width, int height) { 
    gl.glViewport(0, 0, width, height); 
} 

@Override 
public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    Bitmap bitmap; 
    int[] textures; 
    InputStream is; 

    is = getResources().openRawResource(R.drawable.skater_idle_roll); 

    try { 
     BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options(); 
     // Set our bitmaps to 16-bit, 565 format. 
     sBitmapOptions.inPreferredConfig = Bitmap.Config.RGB_565; 
     bitmap = BitmapFactory.decodeStream(is, null, sBitmapOptions); 
    } finally { 
     try { 
      is.close(); 
     } catch (IOException e) { 
      // Ignore. 
     } 
    } 

    //gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST); 
    gl.glClearColor(0.5f, 0.5f, 0.5f, 1); 
    gl.glShadeModel(GL10.GL_FLAT); 

    gl.glDisable(GL10.GL_DEPTH_TEST); 
    gl.glDisable(GL10.GL_DITHER); 
    gl.glDisable(GL10.GL_LIGHTING); 

    gl.glEnable(GL10.GL_TEXTURE_2D); 
    gl.glEnable(GL10.GL_BLEND); 
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA); 
    gl.glColor4x(0x10000, 0x10000, 0x10000, 0x10000); 

    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    textures = new int[1]; 
    gl.glGenTextures(1, textures, 0); 
    textureID = textures[0]; 

    int[] crop = new int[4]; 

    crop[0] = 0; 
    crop[1] = bitmap.getHeight(); 
    crop[2] = bitmap.getWidth(); 
    crop[3] = -bitmap.getHeight(); 

    gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID); 
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);   

    // here EXCEPTION is thrown 
    ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, crop, 0); 
} 

} 

DDMS Ausgabe:

04-19 20: 24: 23,225: ERREUR/AndroidRuntime (2524): Exception irrécupérable: GLTHREAD 10 19/04 20: 24: 23,225: ERREUR/AndroidRuntime (2524): android.opengl.GLException: valeur non valide 04-19 20: 24: 23.225: ERROR/AndroidRuntime (2524): à android.opengl.GLErrorWrapper.checkError (GLErrorWrapper.java:62) 04-19 20:24: 23.225: ERROR/AndroidRuntime (2524): à android.opengl.GLErrorWrapper.glTexParameteriv (GLErrorWrapper.java:803) 04-19 20: 24: 23.225: ERROR/AndroidRuntime (2524): à android.opengl.GLLogWrapper.glTexParameteriv (GLLogWrapper.jav a: 2512) 04-19 20: 24: 23.225: ERROR/AndroidRuntime (2524): à dk.opengltest.GLView.onSurfaceCreated (GLView.java:93) 04-19 20: 24: 23.225: ERROR/AndroidRuntime (2524): à android.opengl.GLSurfaceView $ GLThread.guardedRun (GLSurfaceView.java:1348) 04-19 20: 24: 23.225: ERROR/AndroidRuntime (2524): à android.opengl.GLSurfaceView $ GLThread.run (GLSurfaceView. java: 1118)

glDebugFlags sont actifs. Replica Island qui utilise le même technik pour dessiner des œuvres, donc je pense que je manque quelque chose mais je ne sais pas quoi ...

+0

si je ne le permet pas glDebugFlags rectangle dessiné est juste gris. .. peut-être quelque chose de mal avec mon format d'image? – SACO

+0

Personne ne connaît de réponse? – SACO

Répondre

1

Je sais que mon téléphone Samsung a traité les textures différemment de celui de mon Nexus. Je devais m'assurer que ma texture était des puissances exactes de 2 pour qu'elle fonctionne correctement.

Voyez ce que la résolution de vos textures sont et de les changer pour être soit 2,4,8,16,32,64,128,256 ... etc