2011-04-16 64 views
0

如何設置opengl使用glTextParameteriv正確。下面的代碼可以在模擬器中運行,但是不能在我的HTC模擬器7上運行。也許有人可以用他自己的手機來試試嗎?opengles 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:ERROR/AndroidRuntime(2524):致命異常:GLThread 10 04-19 20:24:23.225:ERROR/AndroidRuntime(2524 ):android.opengl.GLException:invalid value 04-19 20:24:23.225:ERROR/AndroidRuntime(2524):at 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):at dk.opengltest.GLView.onSurfaceCreated(GLView.java:93) 04-19 20:24:23.225:ERROR/AndroidRuntime( 2524):at android.opengl.GLSurfaceView $ GLThread.guardedRun(GLSurfaceView.java:1348) 04-19 20:24:23.225:ERROR/AndroidRuntime(2524):at android.opengl.GLSurfaceView $ GLThread.run(GLSurfaceView。 java:1118)

glDebugFlags處於活動狀態。複製品島使用相同的技術來繪製作品,所以我認爲我只是錯過了一些東西,但我不知道什麼...

+0

如果我不啓用glDebugFlags繪製的矩形僅僅是灰色的。 ..也許我的圖像格式有問題? – SACO 2011-04-19 18:33:12

+0

沒有人知道任何答案? – SACO 2011-04-22 17:03:23

回答

1

我知道我的三星手機處理紋理不同於我的Nexus之一。爲了使它正常工作,我必須確保我的紋理精確到2。

看看你的紋理的分辨率是,改變他們要麼是2,4,8,16,32,64,128,256 ...等