Как я могу автоматически масштабировать окно OpenGL ES 2.0? - PullRequest
2 голосов
/ 05 октября 2011

Я пишу движок Android и iOS на C ++ и в настоящее время фокусируюсь на Android с помощью NDK.

Я хотел бы сделать рендеринг в область просмотра меньшего размера (скажем, 600x360) и автоматически масштабировать этона родной рез (скажем, 800x480.) В настоящее время меньший видовой экран отображается в нижнем углу моего экрана с черными областями.

Моя проблема в том, что я не знаю простого способа сделать это прозрачно с использованием NDK.На уровне API 11 есть функция GLSurfaceview.setScaleX (и Y), которая была бы идеальной, но не существует на уровне API 9, на который я нацеливаюсь.Другим плохим решением является рендеринг в FBO и перетаскивание его на экран в качестве последнего шага.

Я рассматриваю просто историю построения матрицы масштабирования и прошу пользователя движка (на данный момент только меня) всегда умножатьвершины по этому при рисовании на экран.Это было бы похоже на использование glPushMatrix.

Я некоторое время искал и не мог найти хорошее решение.Кто-нибудь знает, как помочь?

1 Ответ

5 голосов
/ 11 октября 2011

Что вы можете сделать, это получить SurfaceHolder из GLSurfaceView , GLSurfaceView.getHolder () и затем установить желаемое разрешение, вызвав SurfaceHolder.setFixedSize (ширина, высота) .

В моем случае у GLSurfaceView есть корень FrameLayout , который заполняет экран, я не уверен, требуется ли это - у меня это есть, потому что я добавляю другие элементы сверху - но если вы установитеразмер, и он не заполняет экран, тогда вы знаете, чего не хватает!

Использование FrameBuffer также является правильным способом, и вы можете нарисовать с ним и некоторые классные эффекты, способ выше простобыстрее, когда единственное, что вы хотите сделать, это уменьшить масштаб рендеринга (или, возможно, увеличить? Я не пробовал).

...