Opengl es 如何在OpenGL ES中强制24位颜色深度

Opengl es 如何在OpenGL ES中强制24位颜色深度,opengl-es,Opengl Es,我正在尝试在OpenGL ES中加载和显示纹理。我遇到的问题是,即使我的图像是ARGB_8888格式,纹理似乎是以RGB_565格式绘制的。毫不犹豫,我的形象看起来很糟糕 我在一部支持16m颜色的手机上运行我的程序,因此,纹理应该可以在它最初的荣耀中查看 编辑代码: 正在加载位图: background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null); 生成纹理: public void

我正在尝试在OpenGL ES中加载和显示纹理。我遇到的问题是,即使我的图像是ARGB_8888格式,纹理似乎是以RGB_565格式绘制的。毫不犹豫,我的形象看起来很糟糕

我在一部支持16m颜色的手机上运行我的程序,因此,纹理应该可以在它最初的荣耀中查看

编辑代码:

正在加载位图:

background = BitmapFactory.decodeResource(getResources(), R.drawable.background, null); 
生成纹理:

public void loadBackground(GL10 gl) {
    gl.glGenTextures(1, textures, 0);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);     
    GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0, background,0);
    background.recycle();
}
图纸:

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, backgroundVertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0,4);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
onSurfaceCreated:

public void onSurfaceCreated(GL10 gl, EGLConfig config) {   
    gl.glEnable(GL10.GL_TEXTURE_2D);         
}
表面变化

public void onSurfaceChanged(GL10 gl, int width, int height) {
    gl.glViewport(0, 0, width, height);
    gl.glLoadIdentity();
    gl.glOrthof(0, width, height, 0, -1, 1);

默认情况下,
GLSurfaceView
使用RGB_565作为其像素格式,因此需要在绑定渲染器之前指定需要32位曲面。有关详细信息,请查看其中一种
setEGLConfigChooser
方法。

ARGB_8888是一种32位格式,顾名思义:8+8+8+8=32!是的,你是对的。我的图像仍以较低的颜色深度渲染,但您能否提供您的OpenGL设置代码以及用于加载纹理的代码?当然,现在就发布了。啊,是的,您是对的。如果我将其更改为RGBA_8888格式,但设备无法支持那么多颜色,你知道会发生什么吗?我觉得奇怪的是,出于性能原因选择了defaultRGB_565:当主要瓶颈是带宽时,将所有内容减少2是一个巨大的收益。对于我所做的,我很高兴RGB_565是默认的。我不确定如果你使用的比特数超过可用比特数会发生什么,但要么你得到了最接近的可用配置,要么它崩溃得很惨。好吧,我想你现在可以试试,要求每个通道32位,看看结果。非常感谢你的回答。鉴于此,我想我也会坚持使用RGB_565。如果我有时间,我会试试看:)