Хобрук: Ваш путь к мастерству в программировании

Android glsurfaceview растягивается, чтобы соответствовать

Я использую glsurfaceview и его рендерер для отображения GLES на весь экран устройства. Это работает, как и ожидалось.

Теперь я хочу добавить возможность «увеличения» выходного размера. Под этим я подразумеваю (например) рендеринг GLES в области просмотра на четверть экрана, а затем растягивание на весь экран при отображении. Это позволит более медленным шейдерам рендериться быстрее с небольшой блочностью.

В настоящее время я могу уменьшить размер GLES, изменив glViewPort, и он отображается в левом нижнем углу экрана. Как я могу растянуть эту нижнюю четверть, чтобы заполнить весь экран?

Большое спасибо за любые советы/ответы.

Решение после еще нескольких проб и ошибок и поиска в Google. Это делается для рендеринга изображения размером в четверть на весь экран.

Сразу после создания glsurfaceview;

glSurfaceView.getHolder().setFixedSize(glWidth,glHeight);

glHeight и glWidth — это внутренний размер рендеринга GLES. Таким образом, чтобы отобразить изображение на 1/4 экрана, используйте glWidth=screenWidth/2 и glHeight=screenHeight/2.

А затем в onSurfaceChanged установите glViewPort;

glViewport(0, 0, screenWidth/2, screenHeight/2);

Бинго. Более быстрый рендеринг (но 2x2 блочных пикселя).

Надеюсь, что это поможет кому-то еще с этой проблемой.


Ответы:


1

У вас уже есть ответ на ваш вопрос, но я уточню некоторые ссылки.

Размер поверхности не зависит от размера представления. Если они отличаются, аппаратное обеспечение дисплея масштабирует поверхность, когда она находится на пути к дисплею. Это означает, что вы можете установить произвольный размер для Surface с помощью setFixedSize(), который можно использовать для уменьшения количества пикселей, которые должны быть обновлены Canvas или GLES.

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

Существует официальный пост в блоге о функцию и пример ее использования в Grafika (видео здесь).

15.10.2015
  • Есть ли способ указать алгоритм масштабирования? По умолчанию при растяжении создается линейное или билинейное размытие. Возможно ли, чтобы растяжение не фильтровалось, чтобы в результате были квадратные пиксели? 16.10.2015
  • Фильтрация определяется аппаратным обеспечением дисплея и обычно является билинейной. Вы получаете квадратные пиксели, делая размер поверхности пропорциональным размеру представления; обратите внимание на нечетные размеры поверхности, используемой в демонстрации Grafika, указанной в ответе. Вы получаете четкие пиксели, делая Surface того же размера, что и View, и выполняя операции с толстыми пикселями в GLES — у вас нет контроля над масштабированием дисплея. 16.10.2015
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

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

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..