gpt4 book ai didi

java - 使用函数 glGenerateMipmap() 初步创建 mipmap

转载 作者:行者123 更新时间:2023-12-01 17:48:58 25 4
gpt4 key购买 nike

使用 glGenerateMipmap() 命令在 Android (OpenGL ES 2.0/3.0) 中创建 mipmap:

public class Renderer implements GLSurfaceView.Renderer { 
private final int textureID;
public Renderer(Context context) {
textureID = loadTexture(bitmap)
}
public void onDrawFrame(GL10 glUnused) { // render loop
...
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureID);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
// use bilinear interpolation
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_NEAREST);
...
GLES20.glDrawElements(GLES20.GL_TRIANGLES, NUMBER_INDICES, GLES20.GL_UNSIGNED_INT, 0);
...
}
}

加载纹理的函数(Kotlin):

private fun loadTexture(bitmap: Bitmap): Int {
val textureId = IntArray(1)
GLES20.glGenTextures(1, textureId, 0)
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId[0])
// loading two-dimensional texture image
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0)
// set filtering modes
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST_MIPMAP_NEAREST)
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR)
return textureId[0]
}

结果,伪像消失了,即 mipmap 可以工作了。但是,当在某些物理设备上使用多个带有纹理的 3D 对象时,渲染速度会变慢(FPS 降低)。我将其与渲染循环中的 mipmap 生成相关联:

public void onDrawFrame(GL10 glUnused) {  
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D)
}

问题:是否可以提前(在渲染循环开始之前)生成 mipmap,例如在 loadTexture() 函数中?

最佳答案

在 loadTexture() 函数末尾添加了 glGenerateMipmap() 命令:

...
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D)
return textureId[0]
...

并从函数 onDrawFrame() 中删除了 glGenerateMipmap() 命令。我不完全确定这是否正确,但似乎效果很好。

关于java - 使用函数 glGenerateMipmap() 初步创建 mipmap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60823382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com