2012-02-04 2 views
8

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

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

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

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

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

+0

вы можете разместить код, как расположение этой точки зрения GLSurface используется в? Я не могу вытаскивать ответы из воздуха. –

+0

Конечно, я добавлю его к вопросу. – Mark

ответ

4

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

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

к AndroidManifest.xml, я получаю правильный resolution.To быть честным, Android является очень странная платформа для меня после того, как несколько лет с прошивкой ...

Решение здесь: MonoDroid apps don't use correct density drawables

+0

Ну, это фрагментация устройства андроидов для вас на работе ... В любом случае, хороший вызов файла манифеста. – Erik

0

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

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

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

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

+0

Я пробовал, но на удивление DisplayMetrics также кажется неправильным. Результаты для HTC Desire Z: widthPixels 533 heightPixels 320 xdpi 254.000000 ydpi 254.000000 плотность 1.500000 densDPI 240 (устройство имеет родное разрешение 800x480) – Mark

+0

Спасибо за помощь, Erik, DisplayMetrics был хорошим намеком! – Mark

Смежные вопросы