我在创建纹理时创建自己的mipmap,并且只要通过GL_LINEAR_MIPMAP_NEAREST(或任何MIPMAP)启用mipmap,纹理就会变得非常黑暗,模糊。如果我切换到GL_LINEAR,他们就没事了。
以下是我创建纹理的方法:
glGenTextures(1, &m_TextureId);
glBindTexture( GL_TEXTURE_2D, id );
int level = 0;
jobject mippedBitmap = srcBitmap;
while (width >= 2 && height >= 2) {
jniEnv->CallStaticVoidMethod(s_GLUtilsClass, s_texImage2DMethodID,
GL_TEXTURE_2D, level, mippedBitmap, 0);
width >>= 1;
height >>= 1;
level++;
mippedBitmap = createScaledBitmap(jniEnv, srcBitmap, width, height, true);
}
为简洁起见,我省略了所有Bitmap.recycle()/ NewGlobalRef()调用。 createScaledBitmap
显然是对Bitmap.createScaledBitmap()的JNI调用。
我还尝试了另一个版本的texImage2D,它采用了位图的格式和类型。我已经确认它总是RGBA。
编辑:要详细说明纹理 - 它们几乎是黑色的。我在明亮的颜色的mips上尝试了eraseColor(),它们仍然非常黑。
答案 0 :(得分:2)
您显示的代码不会生成较低的mip级别(例如,1x1将丢失),因此您的纹理将不完整。这应该使渲染好像根本不存在纹理。从您的描述中不清楚这是否是您正在观察的内容。
在所有情况下,您应该将mipmap一直提供到1x1(对于非方形纹理,这需要对新纹理大小的计算进行一些更改以保持传递1,如4x1中所示 - > 2x1 - > 1x1)
答案 1 :(得分:2)
glGenerateMipmap
可以更快,更方便地完成此任务。
答案 2 :(得分:0)
可能是Bitmap.createScaledBitmap没有更正伽玛的情况。有关创建经过伽马校正的mipmap的代码,请查看this thread