0
我有一个GLSurfaceView渲染我的场景。我的场景正确显示,除了一些纹理,我有白色方块而不是真实纹理。我使用两种纹理:Android空白纹理(延迟加载纹理)
- 某些纹理位于项目的资源中。我创建它们在
onSurfaceCreated
,一切工作正常 - 其他一些需要从远程位置下载。这些纹理无法正确显示。
我下载并创建“懒质感”使用下面的代码:
public void onDrawFrame(GL10 gl) {
...
Texture3D.getDynamicTexture(gl, object.avatar).bind(gl);
...
}
public static Texture3D getDynamicTexture(GL10 gl, int key) {
Texture3D texture = dynamicTextures.get(key);
if (texture == null) {
dynamicTextures.put(key, new Texture3D(gl, key, Type.DYNAMIC));
texture = getStaticTexture(R.drawable.broken_img);
}
return texture;
}
public Texture3D(final GL10 gl, final int id, Type type) {
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
texture = newTextureID(gl);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
Utils.loadImage(id, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
_pBitmap = loadedImage;
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, _pBitmap, 0);
_pBitmap = null;
gl.glEnable(GL10.GL_BLEND);
}
});
我看到下载的作品,因为R.drawable.broken_img被一只白色正方形代替。纹理似乎出现,但它们都堆叠在一行上的屏幕顶部(请参见图片)。
我也试过Android OpenGL ES 1.1 white box textures但也不能工作。我看到的唯一区别是纹理不再出现在屏幕上。