【问题标题】:OpenGL ES 2.0 Derivative TextureOpenGL ES 2.0 衍生纹理
【发布时间】:2012-03-29 03:01:43
【问题描述】:

我有一个基于 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;
 }

但是,这会导致编译失败。如果我取出 dFdX,它编译就好了。

有人有这方面的经验吗?我最终也想计算关于 Y 的导数,然后合并它们,看看输入纹理是如何成为图像的。

我已经为此苦苦挣扎了几天,因此非常感谢您的任何建议!

【问题讨论】:

  • 很遗憾,dFdx() 不是 OpenGL ES 2.0 中的内置函数。这些函数的完整列表可以在这张方便的参考卡中找到:khronos.org/opengles/sdk/docs/reference_cards/…
  • 实际上,我可能有点错误。看起来 GL_OES_standard_derivatives 扩展可能存在于 iOS 设备上,为此提供支持:stackoverflow.com/questions/5959542/…。然而,模拟器似乎缺乏这种支持。
  • "但是,编译失败。"当它编译失败时,它会给你一些错误信息吗?你能发布那个错误信息吗?
  • 我可以确认 GL_OES_standard_derivatives 出现在我的 iPhone 4 上,当我上次获取支持的扩展程序列表时。所以我认为布拉德的第二条评论是一个答案。
  • 一个右括号丢失

标签: iphone objective-c opengl-es glsl


【解决方案1】:

所有支持 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

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

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

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

【讨论】:

  • 谢谢!这也将允许使用 fwidth 函数。
  • 正是我需要知道的。谢谢!
猜你喜欢
  • 2011-05-19
  • 2012-04-08
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
相关资源
最近更新 更多