2012-03-12 19 views
3

私は、OpenGL ESに少し問題があるように走っているOpenGL ES 2.0ベースのiPhoneアプリを持っています。OpenGL ES 2.0デリバティブテクスチャ

私は、入力テクスチャの派生物を計算/表示するフラグメントシェーダをコンパイルしようとしています。私のフラグメントシェーダコードは:

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に関しても同様に微係数を計算して、入力テクスチャがどのように画像であるかを見てマージしたいと思います。

私は数日間このことに苦労していますので、アドバイスをいただければ幸いです! https://developer.apple.com/library/ios/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/OpenGLESPlatforms/OpenGLESPlatforms.html

は、しかし、あなたが「自由のために」それを得ることはありません:ES 2.0をサポートしています

+0

残念ながら、 'dFdx()'はOpenGL ES 2.0のビルトイン関数ではありません。これらの機能の完全なリストはこの便利なリファレンスカードにあります:http://www.khronos.org/opengles/sdk/docs/reference_cards/OpenGL-ES-2_-Reference-card.pdf –

+2

実際には、私はそれはやや間違っています。 'GL_OES_standard_derivatives'拡張がiOSデバイス上に存在し、これをサポートしているようです:http://stackoverflow.com/questions/5959542/ios-simulator-gl-oes-standard-derivatives。しかし、シミュレータにはこのサポートが欠けているようです。 –

+1

"しかし、これはコンパイルに失敗します。"コンパイルに失敗したときに、何らかのエラーメッセージが表示されましたか?そのエラーメッセージを投稿できますか? –

答えて

16

すべてのiOSハードウェアはGL_OES_standard_derivatives拡張をサポートします。

#extension GL_OES_standard_derivatives : enable 

最初の回答にコメントのすべての情報はほとんど正確ですが、この作品ずに取得するために継続されます:あなたのフラグメントシェーダでは、(http://www.khronos.org/registry/gles/extensions/OES/OES_standard_derivatives.txtから)一番上で次のように追加する必要があります次のエラー:

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

これは、ループのために私を投げたが、私は有効ラインを追加したら、実際にそれが両方で動作することをevaulateしていないデバイスとシミュレータ(両方で動作するようですが、それコンパイルします)。

+1

ありがとうございました!これにより、fwidth関数の使用も許可されます。 – chris838

+0

ちょうど私が知る必要があったもの。ありがとう! – Tovi7