【问题标题】:How to continiously display bitmaps in OpenGL如何在OpenGL中连续显示位图
【发布时间】:2012-05-30 17:22:45
【问题描述】:

我一直在按照本指南在 OpenGL 中显示位图

http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

但是,我有一个位图队列,我想一个一个地显示。

我是否应该每次在 onDrawFrame 中为 Bitmap 创建一个新纹理?

Bitmap bitmap = ...

// generate one texture pointer
gl.glGenTextures(1, textures, 0);
// ...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

// create nearest filtered texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

// Use Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

// Clean up
bitmap.recycle();

或者我可以以某种方式仅执行部分操作,可能会在 onSurfaceChanged 上移动一些其他操作吗?

【问题讨论】:

    标签: android opengl-es bitmap glsurfaceview


    【解决方案1】:

    如果你想用另一个纹理替换一个纹理(并且你不打算保留第一个纹理),那么第二次调用glTexImage2DGLUtils.texImage2D 是你唯一需要做的事情。这只是用新数据替换现有纹理数据。您可以从任何有有效 OpenGL 上下文的地方调用它。

    如果纹理大小相同,我可能会建议使用glTexSubImage2D 会有所改进,因为它不会改变纹理大小,然后可能避免在 gpu 上分配一些内存(只是重用相同的后备内存) .

    【讨论】:

    • @Tim 你写的“你并没有打算保留第一个纹理”..如果我想保留旧的两个,我应该如何更改纹理。我想每隔几秒钟在两者之间切换一次。
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多