#ios #opengl-es-2.0
#iOS #opengl-es-2.0
Вопрос:
На iOS4 GL_OES_standard_derivatives поддерживается только на устройстве (из того, что я вижу при выводе расширений), есть ли способ иметь возможность:
-
Определить в шейдере фрагмента, поддерживается расширение или нет
-
Если не поддерживается, есть ли у кого-нибудь код для dFdx и dFdy? Кажется, что ничего не могу найти в Google.
ТИА!
Ответ №1:
У меня была такая же проблема со сглаживанием шрифтов SDM. Вы можете вычислить аналогичный dfdx / dfdx, переведя 2 2d вектора с использованием текущей матрицы преобразования :
vec2 p1(0,0); vec2 p2(1,1);
p1=TransformUsingCurrentMatrix(p1);
p2=TransformUsingCurrentMatrix(p2);
float magic=35; // you'll need to play with this - it's linked to screen size I think :P
float dFdx=(p2.x-p1.x)/magic;
float dFdy=(p2.y-p1.y)/magic;
затем отправьте dFdx / dFdy в свой шейдер в виде униформы — и просто умножьте на свой параметр, чтобы получить ту же функциональность, т.Е.
dFdx(myval)
теперь становится
dFdx*myval;
dFdy(myval) dFdy*myval;
fwidth(myval) abs(dFdx*myval) abs(dFdy*myval);