好吧,我发现很多示例如何从GLSurfaceView.Renderer::onSurfaceCreated
函数中的资源中读取纹理。
如果我想在我的活动中打开库中的文件怎么办?我将函数public int loadTexture (String filename)
添加到我的MyGLRenderer中,它看起来像是:
public int loadTexture (String filename)
{
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false;
// Read in the resource
final Bitmap bitmap = BitmapFactory.decodeFile(filename, options);
int[] textureId = new int[1];
GLES20.glGenTextures ( 1, textureId, 0 );
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] );
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR );
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR );
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE );
GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE );
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);
try{
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
}
catch(Exception ex)
{
ex.printStackTrace();
}
textures[0] = textureId[0];
return textureId[0];
}
当用户从图库中打开文件时,在MyActivity
课程中,我会调用
((MyGLSurfaceView)mGLView).getRenderer().loadTexture(filePath);
问题是glGenTextures不会生成纹理。我读到这是因为某些上下文会丢失。但是loadTexture
函数中的代码不需要任何上下文!
官方文档教程仅考虑从资源创建纹理。
github上有许多示例项目,但它们也可以使用onSurfaceCreated
中的资源纹理上传。
请给我一些代码链接,在运行时将纹理加载到GLSurfaceView.Renderer
。我在相当基础的层面上认识Android,所以一般的建议有点“创建新线程并传递gl上下文”是不够的。 :)