2012-03-12 188 views
3

我有一個基於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的導數,然後合併它們,看看輸入紋理是如何成像的。

我一直在這裏掙扎幾天,所以你有任何意見將不勝感激!

+0

不幸的是,'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

+2

其實,我可能是有點錯了。它看起來像'GL_OES_standard_derivatives'擴展名可能出現在iOS設備上,爲此提供支持:http://stackoverflow.com/questions/5959542/ios-simulator-gl-oes-standard-derivatives。但是,模擬器似乎缺乏這種支持。 – 2012-03-12 17:40:14

+1

「但是,編譯失敗。」當它編譯失敗時,它是否會給你一些錯誤信息?你能發佈該錯誤消息嗎? – 2012-03-12 17:42:33

回答

16

支持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它工作在兩個,但它編譯)。

+1

謝謝!這也將允許使用fwidth函數。 – chris838 2013-03-29 22:47:33

+0

正是我需要知道的。謝謝! – Tovi7 2015-02-13 09:17:34