OpenGL ES 2.0衍生纹理

Bre*_*ett 4 iphone opengl-es glsl objective-c

我有一个基于OpenGL ES 2.0的iPhone应用程序,我遇到了一些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;
 }
Run Code Online (Sandbox Code Playgroud)

但是,这无法编译.如果我拿出dFdX,它编译得很好.

有人对这个有经验么?我最终还想计算关于Y的导数,然后合并它们看看输入纹理是一个图像.

我已经在这几天苦苦挣扎,所以任何建议都会非常感激!

mob*_*bob 17

所有支持ES 2.0的iOS硬件都支持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
Run Code Online (Sandbox Code Playgroud)

第一个答案的评论中的所有信息都是准确的,但如果没有这篇文章,您将继续收到以下错误:

ERROR: 0:15: Call to undeclared function 'dFdx'
ERROR: 0:16: Call to undeclared function 'dFdy'
Run Code Online (Sandbox Code Playgroud)

这让我陷入了一个循环,但是一旦我添加了启用线,它似乎在设备和模拟器上工作(实际上并没有考虑它在两者上都有效,但它确实编译).