Как заставить 24-битную глубину цвета в OpenGL ES - PullRequest
0 голосов
/ 14 декабря 2011

Я пытаюсь загрузить и отобразить текстуру в OpenGL ES.У меня проблема в том, что, хотя мое изображение в формате ARGB_8888, текстура, кажется, нарисована в формате RGB_565.Без сглаживания мое изображение выглядит довольно ужасно.

Я запускаю свою программу на телефоне, который поддерживает 16 м цветов, поэтому текстура должна быть доступна для просмотра во всем ее первоначальном великолепии.

РЕДАКТИРОВАТЬ код:

загрузка растрового изображения:

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);         
}

onSurfaceChanged

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);

1 Ответ

0 голосов
/ 14 декабря 2011

По умолчанию GLSurfaceView использует RGB_565 для своего формата пикселей, поэтому вам нужно указать, что вы хотите 32-битную поверхность, прежде чем связывать рендерер. Больше информации на http://developer.android.com/reference/android/opengl/GLSurfaceView.html, посмотрите на один из setEGLConfigChooser методов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...