OpenGL по сравнению с OpenGL ES 2.0 - приложение OpenGL может быть легко портирован?

HTML

<div class="row">
    <div class="col-xs-2 pull-bottom"
         style="height:100px;background:blue">
    </div>
    <div class="col-xs-8 pull-bottom"
         style="height:50px;background:yellow">
    </div>
</div>

CSS

.pull-bottom {
    display: inline-block;
    vertical-align: bottom;
    float: none;
}
42
задан Heat Miser 24 July 2009 в 18:07
поделиться

3 ответа

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

  1. Нет, нацеливание на OpenGL для настольных ПК не равнозначно нацеливанию на OpenGL ES, потому что ES является подмножеством. ES не реализует функции немедленного режима ( glBegin () / glEnd () , glVertex * () , ...) Массивы вершин - это основной способ отправки материалов в конвейер.

    Кроме того, это зависит от того, на какой профиль вы нацеливаетесь: по крайней мере, в профиле Lite, ES не требует реализации функций с плавающей запятой. Вместо этого вы получаете функции с фиксированной точкой; подумайте о 32-битных целых числах, где первые 16 битов означают цифры до десятичной точки, а следующие 16 битов означают цифры после десятичной точки.

    Другими словами, даже простой код может быть непереносимым, если он использует числа с плавающей запятой. (вам придется заменить вызовы функций gl * f () на вызовы функций gl * x () .

    Посмотрите, как вы можете решить эту проблему в ] Пример Trolltech (в частности, файл qtwidget.cpp ; это пример Qt, но все же ...). Вы увидите, что они делают этот вызов:

    q_glClearColor (f2vt (0.1f), f2vt (0.1f), f2vt (0.2f), f2vt (1.0f));

    Это предназначено для замены вызова glClearColorf (). Кроме того, они используют макрос f2vt () - то есть float в тип вершины - который автоматически преобразует аргумент из float в правильный тип данных.

  2. Пока я разрабатывал несколько небольших демонстраций Три года назад в одной компании я успешно работал с SDK PowerVR . Это для Visual C ++ под Windows; Я не пробовал его под Linux (в этом нет необходимости, поскольку я работал на корпоративном ПК).


Небольшое обновление, отражающее мой недавний опыт работы с ES. (7 июня 2011 г.)

  • Сегодняшние платформы, вероятно, не используют профиль Lite, поэтому вам, вероятно, не нужно беспокоиться о десятичных дробях с фиксированной точкой
  • При переносе кода рабочего стола для мобильных устройств (например, iOS),
    • заменить glBegin () / glEnd () на массивы вершин
    • заменить некоторые вызовы таких функций, как glClearColor () , на такие вызовы, как glClearColorf ()
    • перепишите вашу оконную систему и систему ввода
    • , если нацелена на OpenGL ES 2.0, чтобы получить функциональность шейдера, теперь у вас будет , чтобы полностью заменить встроенное поведение конвейера фиксированных функций шейдерами - по крайней мере, базовые, которые повторно реализуют конвейер фиксированных функций
  • . Действительно важно: если ваша мобильная система не ограничена памятью, вы действительно хотите изучить использование сжатия текстур для вашего графического чипа; например, на устройствах iOS вы будете выгружать данные, сжатые PVRTC, в чип
40
ответ дан 26 November 2019 в 23:56
поделиться

Насколько я понимаю, OpenGL ES является подмножеством OpenGL. Я думаю, что если вы воздержитесь от использования вещей в немедленном режиме, таких как glBegin () и glEnd (), все будет в порядке. Я не особо много работал с OpenGL за последние пару месяцев, но когда я работал с ES 1.0, пока я не использовал glBegin / glEnd, работал весь код, который я узнал из стандартного OpenGL.

Я знаю, что симулятор iPhone запускает код OpenGL ES. Насчет Android не уверен.

Вот эмулятор Windows.

3
ответ дан 26 November 2019 в 23:56
поделиться

В OpenGL ES 2.0, которую используют новые гаджеты, вы также должны предоставить свои собственные шейдеры вершин и фрагментов, так как старый фиксированный конвейер функций ушел. Это означает, что вы должны сами выполнять любые шейдерные вычисления и т.д., что было бы довольно сложно, но вы можете найти существующие реализации на учебниках GLSL.

Тем не менее, поскольку GLES является подмножеством настольной OpenGL, можно запускать одну и ту же программу на обеих платформах.

4
ответ дан 26 November 2019 в 23:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: