在iOS4上,仅设备支持GL_OES_standard_derivatives(从我输出扩展名时所看到的),有没有一种方法可以:

  • 在片段着色器中检测是否支持扩展
  • 如果不支持,是否有人拥有dFdx和dFdy的代码?似乎无法在Google上找到任何东西。

  • TIA!

    最佳答案

    我对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);
    

    09-12 17:46