Андроид андегин плохое качество текстур - PullRequest
4 голосов
/ 03 октября 2011

Проблема: плохое качество текстур в приложении для Android, написанном с помощью Andengine (обертывание opengl), особенно на градиентах, которые отображаются в виде шагов в нескольких цветах. Проблема возникает на реальном и виртуальном устройстве

Настройки: текстура по умолчанию, полноэкранный режим, собственное разрешение, Android 2.2. Я пытался применить PixelFromat с помощью:

public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}

Ничего не изменилось.

Строка комментирования: GLHelper.disableDither(pGL); немного помог с текстурами, но заставил частицы выглядеть плохо, так что, думаю, это не источник проблем.

Пример кода загрузки:

public static void loadResources(StreamgameActivity game) {
    magnetTexture = new BitmapTextureAtlas(512, 512, TextureOptions.BILINEAR);
    magnetTextureRegion = BitmapTextureAtlasTextureRegionFactory
       .createFromAsset(magnetTexture, game,"bateria128CMatte_none.png", 0, 0);
    game.getEngine().getTextureManager().loadTexture(magnetTexture);
}

Ответы [ 3 ]

2 голосов
/ 27 июля 2012

Если кто-то испытывает плохое качество текстур и полос для GLES2, вот решение: просто переопределите preDraw() вашего Sprite и включите дизеринг следующим образом:

Sprite electricityOff = new Sprite(0, 0, mElectricityOffTextureRegion, getVertexBufferObjectManager()) {
    @Override
    protected void preDraw(GLState pGLState, Camera pCamera) {
        super.preDraw(pGLState, pCamera);
        pGLState.enableDither();
    }
};

Ключевым элементом является pGLState.enableDither();. Вам не понадобится что-то еще, но если вы хотите обеспечить 32-битный рендеринг для поверхности и активности, вы можете добавить:

@Override
protected void onSetContentView() {
    mRenderSurfaceView = new RenderSurfaceView(this);
    mRenderSurfaceView.setEGLConfigChooser(8, 8, 8, 8, 24, 0);
    mRenderSurfaceView.setRenderer(mEngine, this);
    mRenderSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888);

    this.setContentView(mRenderSurfaceView, BaseGameActivity.createSurfaceViewLayoutParams());
}


@Override
public void onAttachedToWindow() {
    super.onAttachedToWindow();
    Window window = getWindow();
    window.setFormat(PixelFormat.RGBA_8888);
}
2 голосов
/ 04 октября 2011

Andengine, похоже, использует режим рендеринга по умолчанию 16 бит. Чтобы изменить то, что я сделал:

this.mRenderSurfaceView = new RenderSurfaceView(this);
mRenderSurfaceView.setEGLConfigChooser(8,8,8,8,0,0);//!!
mRenderSurfaceView.setRenderer(mEngine);
mRenderSurfaceView.getHolder().setFormat(PixelFormat.RGBA_8888);//!!

в onSetContentView метод.

0 голосов
/ 20 апреля 2013

У меня была та же проблема, исправленная включением Dithering

EngineOptions options;
//..........
options.getRenderOptions().setDithering(true);
...