2011-01-26 9 views
1

OpenGLテクスチャを使用せずにシェーダプログラムにテクスチャデータを渡す必要があります。これは、2つのテクスチャを使用していないためですが、このフラグメントシェーダでエラーが発生します。GLSL(OpenGL ES2)で「整数定数オーバーフロー」

varying highp vec2 texcoord; 
uniform ivec4 texdata[172800]; 
void main(){ 
int pixel = int(360.0 * texcoord.y + texcoord.x); 
gl_FragColor = vec4(texdata[pixel].x,texdata[pixel].y,texdata[pixel].z,1); 
} 

どうすればこのデータを渡すことができますか?

答えて

2

実際、OpenGL ES 2.0をサポートする新しいiOSモデルは、OpenGL ES 2.0仕様で提供されているため、2の2のべき乗以外のテクスチャを使用することができます。これらのデバイスは、GL_APPLE_texture_2D_limited_npot拡張を介してOpenGL ES 1.1で使用される非2のテクスチャも可能にします。これについては、私の答えhereで詳しく説明しています。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

私は私のOpenGL ES 2.0で、このようなテクスチャを使用します。

これらの非パワー・オブ・2つのテクスチャの制限アップルの場所は、彼らがミップマップされてはならないと、彼らはラッピング用GL_CLAMP_TO_EDGEを使用しなければならないということですサンプルアプリケーションhere

テクスチャをこれらのデバイス上のシェーダに渡す別の方法を見つける必要はありません。

+0

ありがとう、非常にありがとうございます。だから私はクランプパラメータを設定する必要があり、それは動作するはずですか?現時点では、私のアプリにはiOS 4以上とカメラが必要です。この拡張機能はどのデバイスに対応していますか? –

+0

テクスチャパディングが機能するかどうかをテストする前に、別のものを試してみる必要があります。より多くのデバイスをサポートできるということを意味するのであれば、パディング方法を使用することもできます。 –

+0

"npot"と "pot"のどちらを使うかを簡単に選択できるはずですが、パディングのテクニックが遅い場合はおそらく気になりません。少なくとも私は次のバージョンをAppleに提出しています。 –

0

2の非累乗テクスチャターゲットがあるため、これを行う理由はありません。 http://www.opengl.org/registry/specs/ARB/texture_rectangle.txt

または、2の累乗以外のデータを2のべき乗のフレームに貼り付けます。

+0

ありがとうございます。 ARB_texture_rectangleはどのように使用しますか? –

+1

これはOpenGL拡張であり、OpenGL ESを使用しているようです。 –

+0

私はパディングを使用する必要がありますか?うーん。私は2つのテクスチャの力に画像をフィットさせるためにメモリを割り当て、各行にmemcpyを使用する必要があります。私はすでに別の店舗にデータをコピーしていますので、その部分を少し変更してフィードバックを返します。みんなありがとう。 –

4

OpenGL/ES 2仕様では、GLSLの整数は少なくとも17ビット([-2^16,2^16]の範囲を表すことができる)であることが必要で、整数は配列インデックスに使用されるため、 65535以上の要素を持つ配列を確実に作成できます。いずれにせよ大きなものを作成することはできないかもしれません。一様なデータの総量にははるかに低い可能性があります。大量のデータにアクセスするには、テクスチャを使用する必要があります。

このエラーはおそらく整数定数172800から発生している可能性があります。これは明らかに、ご使用のプラットフォームのGLSL実装には大きすぎます。

+0

ありがとうございます。私は詰め物のアイデアを試してみます。あなたが2つのテクスチャの力を持たなければならないのは馬鹿だ。私が見つけた唯一の理由は、ミップマッピングです。私はミップマップを使っていません。これのおかげで私は記憶を浪費しなければならない。 Appleはこれを修正する必要があります(人々が何か不足している場合を除きます)。 –

+0

@MatthewMitchell、OpenGLはリンゴによって作られていません... – fabspro

関連する問題