2017-03-05 16 views
0

GL_APPLE_clip_distanceのドキュメントには、ES2.0とES3.0の両方でサポートされていることが記載されています。私はES3.0をサポートしていないデバイスでも動作させようとしています。GL_APPLE_clip_distance in opengl es 2.0

シェーダファイルの先頭に#extensionがあります。

#extension GL_APPLE_clip_distance : require 

シェーダファイルは、構文に問題がないことを示すエラーなしでコンパイルされます。私はES2の文脈を読み込んだ。しかし、初めてクリッププレーンを有効にしようとしました。

glEnable (GL_CLIP_DISTANCE0_APPLE) 

すべてのその後のglDrawArray呼び出しがエラーで失敗します。指定された操作は、現在のOpenGL状態では無効です。すべての描画呼び出しが失敗したため、GLKViewは黒く表示されます。

興味深いことに、私は状態を無効にしても、

glDisable (GL_CLIP_DISTANCE0_APPLE) 

以降の描画コールはすべて引き続き失敗します。したがって、glEnable(GL_CLIP_DISTANCE0_APPLE)への最初の呼び出しは、取り消すことができないいくつかの不可逆状態をトリガします。

回避策に関するヒントやご提案は素晴らしいと思います!

答えて

0

私はこの問題を数日間、最終的にstackoverflowに投稿してからわずか30分後に修正されました。それは他の人にも役立つ場合の答えです。

浮動小数点精度をlowpからhighpに変更しました。なんとかlowpは3.0ではうまく動作しますが、es 2.0ではうまく動作しません。

varying highp float gl_ClipDistance[4]; 
:に変更

varying lowp float gl_ClipDistance[4];