我已成功解码视频并根据https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java重新编码 它使用基于https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/TextureRender.java
的textureRenderer现在我想更改de drawFrame
函数以覆盖位图。我尝试使用GlUtils.TextSubImage2D
和GlUtils.TextImage2D
,两者都返回GlError = 1280。
我是OpenGl-es的新手,我真的很感激如果有人可以建议我或者告诉我如何叠加位图。我看过这篇文章:http://www.jayway.com/2010/12/30/opengl-es-tutorial-for-android-part-vi-textures/
但我想我必须将已创建的纹理与GlUtils.TextSubImage2D
一起使用。
我应该将渲染器更改为使用GLES20.GL_TEXTURE_2D
而不是GLES11Ext.Gl_Texture_External_Oes
的{{3}}中的帧缓冲区吗?
有人可以帮我吗?感谢
public void drawFrame(SurfaceTexture st)
{
checkGlError("onDrawFrame start");
st.GetTransformMatrix(mSTMatrix);
GLES20.GlClearColor(0.0f, 1.0f, 0.0f, 1.0f);
GLES20.GlClear(GLES20.GlDepthBufferBit | GLES20.GlColorBufferBit);
// Select the program.
GLES20.GlUseProgram(mProgram);
checkGlError("glUseProgram");
// Set the texture.
GLES20.GlActiveTexture(GLES20.GlTexture0);
GLES20.GlBindTexture(GLES11Ext.GlTextureExternalOes, mTextureID);
mTriangleVertices.Position(TRIANGLE_VERTICES_DATA_POS_OFFSET);
GLES20.GlVertexAttribPointer(maPositionHandle, 3, GLES20.GlFloat, false,
TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
checkGlError("glVertexAttribPointer maPosition");
GLES20.GlEnableVertexAttribArray(maPositionHandle);
checkGlError("glEnableVertexAttribArray maPositionHandle");
mTriangleVertices.Position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
GLES20.GlVertexAttribPointer(maTextureHandle, 2, GLES20.GlFloat, false,
TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
checkGlError("glVertexAttribPointer maTextureHandle");
// Enable the "aPosition" vertex attribute.
GLES20.GlEnableVertexAttribArray(maTextureHandle);
checkGlError("glEnableVertexAttribArray maTextureHandle");
Android.Opengl.Matrix.SetIdentityM(mMVPMatrix, 0);
// Copy the model / view / projection matrix over.
GLES20.GlUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
GLES20.GlUniformMatrix4fv(muSTMatrixHandle, 1, false, mSTMatrix, 0);
// Draw the rect.
GLES20.GlDrawArrays(GLES20.GlTriangleStrip, 0, 4);
checkGlError("glDrawArrays");
GLUtils.TexSubImage2D(GLES11Ext.GlTextureExternalOes, 0, 0, 0, bitmap, GLES20.GlRgb, GLES20.GlUnsignedByte);
//GLUtils.TexImage2D(GLES11Ext.GlTextureExternalOes, 0, bitmap, 0);
checkGlError("TexSubImage2D");
GLES20.GlFinish();
}