I get it. I forget this lines. gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
Thanks again. It works fine now. It only takes 15-20ms to draw one frame. lol. On 12月13日, 下午12时04分, Eong <eong.c...@gmail.com> wrote: > Thanks! > You are right, the GL_INVALID_VALUE error is caused by the dimensions. > Now the glTexImage2D seems to be okay. But it only gives me a white > screen on my phone.(It works on the emulator) > Any idea? > > On 12月13日, 上午9时57分, Jack Palevich <jack.palev...@gmail.com> wrote: > > > My guess is that your problem is that you are trying to create a non- > > power-of-two sized texture, which is not supported on the G1. Try > > using 512 x 512 as your texture dimensions. You can continue to use > > 480 x 320 for glDrawTexOES. > > > Here's how you can debug problems like this by yourself in the future: > > > First, convert the error code to its symbolic value: > > > 1281 is GL_INVALID_VALUE > > > Then, read the OpenGL ES docs for the function that failed. Look at > > the "ERRORS" section. Check each of the possible reasons for the error > > code that you received. > > > In this case you'll see that for glTexImage2D, you will see that > > GL_INVALID_VALUE is generated for these reasons: > > > If width or height is less than 0 or greater than 2 + > > GL_MAX_TEXTURE_SIZE. > > > If level is less than 0. > > > If level is greater than log 2 max , where max is the returned value > > of GL_MAX_TEXTURE_SIZE. > > > If internalFormat is not 1, 2, 3, 4, or one of the accepted resolution > > and format symbolic constants. > > > If non-power-of-two textures are not supported and the width or height > > cannot be represented as 2 k + 2 border for some integer value of k. > > > If border is not 0 or 1. > > > On Dec 13, 1:14 am, Eong <eong.c...@gmail.com> wrote: > > > > I used a ndk library to decode the frames and update the ShortBuffer > > > with RGB565 format. > > > I allocate the buffer in the activity like below. > > > > ShortBuffer m_byteCanvas = ShortBuffer.allocate(m_width * m_height); > > > ....... > > > And I use GLSurfaceView and set the renderer for it. > > > > mGLSurfaceView = new GLSurfaceView(this); > > > > > > mGLSurfaceView.setDebugFlags(GLSurfaceView.DEBUG_LOG_GL_CALLS); > > > mGLSurfaceView.setRenderer(new GRenderer()); > > > setContentView(mGLSurfaceView); > > > > In the GRenderer class, I just need to update the ShortBuffer to > > > screen. > > > ..... > > > gl.glBindTexture(GL10.GL_TEXTURE_2D, tex); > > > gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGB, m_width, m_height, > > > 0, GL10.GL_RGB, GL10.GL_UNSIGNED_SHORT_5_6_5, m_byteCanvas); > > > l_gl.glTexParameteriv(GL10.GL_TEXTURE_2D, > > > GL11Ext.GL_TEXTURE_CROP_RECT_OES, > > > new int[] {0, 0, 480, 320}, 0); > > > > public void onDrawFrame(GL10 gl) { > > > gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGB, m_width, m_height, > > > 0, GL10.GL_RGB, GL10.GL_UNSIGNED_SHORT_5_6_5, m_byteCanvas); > > > ((GL11Ext)gl).glDrawTexiOES(0, 0, 0, 480, 320); > > > > } > > > > This works fine on the emulator (1.5 and 1.6), but when I tested it on > > > my G2 and G1, it gave me glError 1281 on glTexImage2D. If anybody can > > > help with this? > > > > PS: > > > I tried Canvas and the performance is not good enough, it takes more > > > than 30ms to draw a frame.(480x320). -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to android-developers+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/android-developers?hl=en