GLSL: встроенные атрибуты недоступны для приложений iPhone? - PullRequest
1 голос
/ 21 ноября 2011

Я действительно отчаялся здесь. Я работаю с XCode, пытаясь реализовать некоторые вещи OpenGL на iPhone. Я должен написать шейдер для Phong-Lighting. Я дошел до объявления своей геометрии (вершины, индексы, вычисления и т. Д.) И передачи соответствующих аргументов в качестве атрибутов шейдеру (написанному на GLSL). Использование этих атрибутов работает нормально, некоторые действительно базовые шейдерные программы правильно компилируются и выдают ожидаемый результат.

Теперь я пытаюсь начать с некоторых более сложных вычислений, для которых мне нужно использовать некоторые встроенные атрибуты GLSL, а именно, "gl_NormalMatrix", но всякий раз, когда я пытаюсь это сделать, программа вылетает, и я получить «ОШИБКА: 0: 3: Использование необъявленного идентификатора« gl_NormalMatrix »». Это происходит одинаково при использовании любых встроенных атрибутов, таких как gl_Vertex, gl_Normal и т. Д.

Эти атрибуты недоступны в GLSL на iPhone или я что-то упустил? Может быть, я не до конца понял, как это работает. Как уже упоминалось, передача моих собственных атрибутов вершин в шейдер работает нормально, и мне также интересно, как программа должна «знать» правильные значения «сама по себе» - так что вся концепция встроенных атрибутов все еще немного сбивает с толку мне. Но всякий раз, когда я пытаюсь запустить некоторые шейдеры, которые я нашел в сети, чтобы увидеть, что что-то происходит, я получаю эти ошибки, хотя все остальные, кажется, широко используют встроенные атрибуты при написании шейдеров.

Я действительно надеюсь, что кто-то здесь может пролить свет на это. Огромное спасибо заранее!

Julia

1 Ответ

7 голосов
/ 21 ноября 2011

Эти атрибуты недоступны в GL ES, будь то на iPhone или где-либо еще.И то же самое касается WebGL.Вам нужно написать собственный матричный код или использовать GLKit, если вы поддерживаете только iOS 5+, и предоставить атрибуты для себя.См. справочную карточку Kronos для получения невероятно сжатой сводной информации о том, что превратило ее в ES 2.0 - среди прочего в нем перечислены все доступные встроенные специальные переменные:

  • gl_Position
  • gl_PointSize
  • gl_FragCoord
  • gl_FrontFacing
  • gl_PointCoord
  • gl_FragColor
  • gl_FragData [n]

Математический материал GLKit действительно хорош, потому что он встроен и использует NEON SIMD от ARM.Я считаю достаточным основанием указывать iOS 5 как минимум во всех новых проектах GL.

...