Производная текстура OpenGL ES 2.0 - PullRequest
4 голосов
/ 12 марта 2012

У меня есть приложение для iPhone на базе OpenGL ES 2.0, которое я запускаю из-за проблем с OpenGL ES.

Я пытаюсь скомпилировать фрагментный шейдер, который вычисляет / отображает производную входной текстуры. Мой код фрагмента шейдера:

 varying highp vec2 textureCoordinate;

 uniform sampler2D inputImageTexture;
 uniform sampler2D inputImageTexture2;

 void main(void)
 {
   mediump vec4 derivData = vec4(dFdx(texture2D(inputImageTexture, textureCoordinate).xyz, 0.0);

   gl_FragColor = derivData;
 }

Однако компиляция не удалась. Если я достану dFdX, он прекрасно скомпилируется.

У кого-нибудь есть опыт с этим? В конце концов, я бы хотел также вычислить производную по Y, а затем объединить их, увидев, что входная текстура является изображением.

Я боролся с этим уже несколько дней, поэтому любые ваши советы будут с благодарностью приняты!

1 Ответ

17 голосов
/ 03 ноября 2012

Все оборудование iOS, поддерживающее ES 2.0, будет поддерживать расширение GL_OES_standard_derivatives: https://developer.apple.com/library/ios/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/OpenGLESPlatforms/OpenGLESPlatforms.html

Однако вы не получите его «бесплатно». В вашем фрагментном шейдере вы должны добавить следующее вверху (от http://www.khronos.org/registry/gles/extensions/OES/OES_standard_derivatives.txt):

#extension GL_OES_standard_derivatives : enable

Вся информация в комментариях к первому ответу в основном точна, но без этой части вы продолжите получать следующую ошибку:

ERROR: 0:15: Call to undeclared function 'dFdx'
ERROR: 0:16: Call to undeclared function 'dFdy'

Это заставило меня задуматься о цикле, но как только я добавил строку включения, кажется, что она работает как на устройстве, так и на симуляторе (на самом деле я не знаю, работает ли он на обоих, но компилируется).

...