OpenGL ES 2.0衍生纹理
问题描述:
我有一个基于OpenGL ES 2.0的iPhone应用程序,我正在运行一些OpenGL ES故障。OpenGL ES 2.0衍生纹理
我想complile片段着色器计算/显示输入纹理的派生。我的片段着色器代码是:
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的导数,然后合并它们,看看输入纹理是如何成像的。
我一直在这里挣扎几天,所以你有任何意见将不胜感激!
答
支持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
所有的意见,第一个答案的信息大多是准确的,但没有这一块,你会继续得到以下错误:
ERROR: 0:15: Call to undeclared function 'dFdx'
ERROR: 0:16: Call to undeclared function 'dFdy'
这扔我一个循环,但一旦我添加启动线上,似乎器件和模拟器(包括上工作并没有真正evaulate它工作在两个,但它编译)。
不幸的是,'dFdx()'不是OpenGL ES 2.0中的内置函数。这些功能的完整列表可以在这个方便的参考卡中找到:http://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_0-Reference-card.pdf – 2012-03-12 17:35:36
其实,我可能是有点错了。它看起来像'GL_OES_standard_derivatives'扩展名可能出现在iOS设备上,为此提供支持:http://stackoverflow.com/questions/5959542/ios-simulator-gl-oes-standard-derivatives。但是,模拟器似乎缺乏这种支持。 – 2012-03-12 17:40:14
“但是,编译失败。”当它编译失败时,它是否会给你一些错误信息?你能发布该错误消息吗? – 2012-03-12 17:42:33