6

OpenGL を使用して、1 つの頂点シェーダーと 1 つのフラグメント シェーダーを組み合わせて GPGPU 計算を実行しています。異なるスケールで画像を計算する必要があります。ミップマップの生成は自動でハードウェア アクセラレーションが可能なため、ミップマップを使用したいと考えています。しかし、フラグメント シェーダーのミップマップ テクスチャにアクセスできません。

自動ミップマップ生成を有効にしました: glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);

シェーダーで texture2DLod を使用してみましたが、うまくいきませんでした。単純に通常のテクスチャを与え続けました。メインプログラムで glTextureParameteri(GL_BASE_LEVEL, X) も使用してみましたが、何も変わりませんでした。

どうやってそれをしますか?

Linux を使用しています。私のグラフィック カードはかなり古い Nvidia Quadro です。これは、サポートされているすべての拡張機能を含む私のglxinfo出力です。

4

3 に答える 3

3
gvec4 textureLod (gsampler1D sampler, float P, float lod)
gvec4 textureLod (gsampler2D sampler, vec2 P, float lod)
gvec4 textureLod (gsampler3D sampler, vec3 P, float lod)
gvec4 textureLod (gsamplerCube sampler, vec3 P, float lod)
float textureLod (sampler1DShadow sampler, vec3 P, float lod)
float textureLod (sampler2DShadow sampler, vec3 P, float lod)
gvec4 textureLod (gsampler1DArray sampler, vec2 P, float lod)
gvec4 textureLod (gsampler2DArray sampler, vec3 P, float lod)
float textureLod (sampler1DArrayShadow sampler, vec3 P, float lod)

それらの組み込みのいずれかを試しましたか?またlod、float 型である必要があります。GLSL コンパイラが報告しているエラー/警告は何ですか?

于 2010-09-03T13:56:24.113 に答える
1

GLSL 1.20仕様(セクション8.7)は、フラグメントシェーダーが独自のミップマップレベルを選択できないことを示しています(また、texture * Lod関数は頂点シェーダーでのみ使用可能です)。どちらかといえば、Lod以外のバリアントへのバイアスパラメータを使用してミップマップレベルを変更できる場合がありますが、変更できるのは、カードがすでに計算したものに関連する場合のみです。

GLSLの後者のバージョンがそれを変更した可能性があるかどうかはわかりません。

于 2011-09-29T18:44:55.047 に答える
1

試す:

glGenerateMipmapEXT(GL_TEXTURE_2D);

テクスチャをバインドした後。(そしてもちろんレンダリングを行う前に)

glTexParameteri-GL_GENERATE_MIPMAP非推奨だと思います... MfG Digi

于 2010-11-30T12:28:30.960 に答える