OpenGL масштабирование вида поверхности для различных точек на дюйм - PullRequest
8 голосов
/ 04 февраля 2012

У меня есть устройство с разрешением 800x480.Когда я создаю GLSurfaceView, я получаю вызов onSurfaceChanged с 533x320 (очевидно, с примененным модификатором 1,5 HDPI), и поверхность масштабируется.Поэтому, когда я рисую линию толщиной в 1 пиксель, это выглядит очень плохо, и я не могу получить идеальный пиксельный рендеринг.

То, что я хочу, - это поверхность с собственным разрешением (800x480).

Просмотрсоздается таким образом (как в примерах NDK OpenGL), в Activity onCreate:

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
            WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
            WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
            WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

    view = new MyGLSurfaceView(this);
    setContentView(view);

Я не использую никаких макетов и т. д.

Ответы [ 2 ]

4 голосов
/ 08 февраля 2012

Я нашел решение: когда я добавляю

<uses-sdk android:targetSdkVersion="8" android:minSdkVersion="8"/>

в AndroidManifest.xml, я получаю правильное разрешение. Если честно, Android - очень странная платформа для меня после нескольких лет с iOS ...

Решение, найденное здесь: Приложения MonoDroid не используют рисования с правильной плотностью

0 голосов
/ 08 февраля 2012

Кажется, корень проблемы лежит в команде onSurfaceChanged, передающей (предположительно измененную) ширину и высоту.

В коде, создающем представление, может не быть ничего плохого, но мы хотим убедиться, что он создан с фактическим разрешением устройства. Возможно, вызов setLayout (int width, int height) явно с желаемой шириной и высотой поможет вам увеличить пробег ...

Очевидно, что вам придется определить фактический физический размер экрана, прежде чем сделать это. И вам лучше всего получить реальные физические пиксели с помощью widthPixels и heightPixels из DisplayMetrics: http://developer.android.com/reference/android/util/DisplayMetrics.html

Если это не сработает, возможно, попытка вашего кода на другом устройстве может дать правильный результат. В этом случае это может быть проблема, зависящая от устройства ...

...