Для большинства ES 1.1 это выглядит довольно просто. Все типичные фиксированные функции, такие как преобразования, источники света и материалы, преобразуются непосредственно в шейдерный код.
Для полной замены вам, очевидно, придется реализовать всю функциональность. Из-за перехода на точки входа ES 1.1 я заметил несколько элементов, которые не будут напрямую переводить на ES 2.0, где последний из них выглядит особенно проблематичным:
- Произвольные обтравочные плоскости. Это не доступно в ES 2.0, но не очень сложно эмулировать в шейдерах, вычисляя расстояние в вершинном шейдере, а затем отбрасывая обрезанные фрагменты в шейдере фрагмента.
- ES 1.1 имеет нечто, называемое «текстуры палитры». По моему мнению, в ES 2.0 выглядит несколько больно, но возможно. Вам, вероятно, понадобятся две текстуры: одна для индексов и одна для палитры с двумя уровнями выборки в шейдере фрагментов.
- ES 1.1 поддерживает логические операции (
glLogicOp
) как часть операций над фрагментами, которые выполняются после шейдера фрагмента. ES 2.0 этого не имеет, и я не могу придумать хороший способ его репликации. Единственное, что приходит на ум - это визуализировать, считывать результат, выполнять логическую операцию на CPU и затем визуализировать полученный образ. И вам придется делать это каждый раз, когда операция будет изменена.
Я читал, что что-то подобное происходит на некоторых устройствах Android, так что им не нужно поддерживать две разные версии OpenGl. –