Ответ 1
Ответ
Одна из ситуаций, когда вы можете получить это предупреждение в Xcode, - это использование приложения, использующего шейдеры, такие как приложение "Карты", с MKMapView
. Вы обнаружите, что отображение карты работает так, как ожидалось, без этого предупреждения на реальном устройстве с реальной аппаратной/собственной ОС.
В симе шейдер SolidRibbonShader
не способен читать вывод вершинного шейдера v_gradient
либо потому, что он является ошибкой бета-версии или выпуском Xcode. Однако шейдеры распознаются на реальном устройстве.
Объяснение
Эти шейдеры относятся к OpenGL Rendering Pipeline. Rendering Pipeline - это последовательность шагов, которые выполняет OpenGL при рендеринге объектов.
Конвейер рендеринга отвечает за такие вещи, как применение текстуры, преобразование вершин в правильную систему координат и отображение символа на экране и т.д.
В этом конвейере есть шесть этапов.
- Операция на вершине.
- Примитивное собрание
- Примитивная обработка
- растеризации
- Обработка фрагментов
- Работа с фрагментами
Наконец, изображение появляется на экране вашего устройства. Эти шесть этапов называются OpenGL Rendering Pipeline, и все данные, используемые для рендеринга, должны пройти через него.
Что такое шейдер?
Шейдер - небольшая программа, разработанная вами, которая живет в GPU. Шейдер написан на специальном графическом языке под названием OpenGL Shading Language (GLSL).
Шейдер заменяет два важных этапа в OpenGL Rendering Pipeline: Per-Vertex Processing и Per-Fragment Processing. Для каждого из этих двух этапов есть один шейдер.
Конечной целью Vertex Shader
является предоставление окончательного преобразования вершин сетки в конвейер рендеринга. Целью Fragment shader
является предоставление данных Coloring and Texture для каждого заголовка пикселя в фреймбуфере.
Vertex shaders
преобразовать вершины треугольника из локальной системы координат модели в положение экрана. Fragment shaders
вычислить цвет пикселя внутри растрового треугольника на экране.
Раздельная компоновка и привязка скорости шейдерных объектов
Многие приложения OpenGL ES используют несколько шейдеров вершин и фрагментов, и часто бывает полезно повторно использовать один и тот же шейдер фрагментов с разными шейдерами вершин или наоборот. Поскольку основная спецификация OpenGL ES требует связывания вершин и фрагментов, которые должны быть связаны друг с другом в одной программе шейдеров, смешивание и сопоставление шейдеров приводит к большому количеству программ, что увеличивает общее количество шейдеров и время связывания при инициализации вашего приложения.