問題タブ [glteximage2d]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ を使用した OpenGL: クラス配列を glTexImage2d に渡すときの vtable の問題
Color
float r、float g、float b、float alphaでクラスを作りました。仮想デストラクタを持つ基本クラスがあります。
私は色の配列をopengl関数に渡そうとしています.float型glTexImage2D
のGL_RGBA
編成です(これは{float r、float g、float b、float alpha}の配列になります)。これにはColor
、4 つの float (サイズ 16 バイト) のみを含める必要があります。
ただし、デストラクタのおかげで、 vtableを持つ基本クラスのために、クラスのサイズが 20 バイトでsizeof(Color)
あることがわかります。Color
vtable を保持したまま Color 配列を に渡すにはどうすればよいglTexImage2D
ですか?
opengl - glBindImageTexture() と glBindTexture() の違いは何ですか?
glBindImageTexture と glBindTexture の違いは何ですか? また、シェーダーでの次の宣言の違いは何ですか:
と
c++ - OpenGL ES 3.1 - glTexImage2D で不変のテクスチャを作成できない
glTexImage2D()
私はそれを使用してバインドできる不変のテクスチャを作成しようとしていますglBindImageTexture()
ここに私のC++コードがあります:
Mipmap レベルは必要ないので、 に設定GL_TEXTURE_MAX_LEVEL
し0
ます。次に、すべてのテクスチャのレベル (ここでは 1 つだけ) をセットアップするため
に呼び出しますが、エラーは発生しません。glTexImage2D()
残念ながら、の結果は
glGetTexParameteriv(GL_TEXTURE_2D,GL_TEXTURE_IMMUTABLE_FORMAT,&status)
、0
テクスチャがimmutableではないことを意味します。
を呼び出そうとするとglBindImageTexture()
、エラー1282が発生します。これは、クロノスのドキュメントに書かれているように、この opengl 関数には不変のテクスチャが必要なためです。
私が間違っていることについてのアイデアはありますか?
前もって感謝します ;)
編集 :
お二人ともお時間を割いて情報を提供していただきありがとうございますが、わからないことがあります。
男性のこの段落glTexStorage2D()
(khronos documentation)は私を混乱させます:
glTexStorage2D の動作は、ターゲット パラメータによって異なります。ターゲットが GL_TEXTURE_2D の場合、glTexStorage2D を呼び出すことは、エラーが生成されないと仮定すると、次の疑似コードを実行することと同じです。
実際にはテクスチャ データが提供されないため、
pseudo-code
for のフォーマットとタイプで使用される値は無関係であり、選択された internalformat 列挙子に有効な任意の値と見なされる場合があります。internalformat は、表 1 に示されているサイズの内部形式のいずれか、または以下の表 2 に示されている圧縮された内部形式のいずれかでなければなりません。成功すると、 の値は次のようにGL_TEXTURE_IMMUTABLE_FORMAT
なります。GL_TRUE
. GL_TEXTURE_IMMUTABLE_FORMAT の値は、pname を GL_TEXTURE_IMMUTABLE_FORMAT に設定して glGetTexParameter を呼び出すことによって検出できます。テクスチャ オブジェクトの寸法や形式をこれ以上変更することはできません。テクスチャ オブジェクトの寸法やフォーマットを変更する可能性のあるコマンド (glTexImage2D や glTexStorage2D への別の呼び出しなど) を使用すると、実際には寸法やフォーマットを変更しない場合でも、GL_INVALID_OPERATION エラーが生成されます。物体。
上記の段落が についてなのglTexImage2D()
かglTexStorage2D()
、
さらに、私の根底にある質問は次のとおりです。使用して作成されたテクスチャをバインドできますか? glTexImage2D()
glBindImageTexture()
(たとえば
、これら 2 つの関数が実際に一緒に使用されているコード サンプルを見ました)
ios - iOS で gl テクスチャ サンプラーが常に vec4(0.,0.,0.,1.) を返す (ただし、OSX/Android では機能する)
人工的なデータをテクスチャにアップロードするだけのコードがあります。
そして、シェーダーでそのテクスチャからサンプリングするだけのコード:
OSX と Android では、このテクスチャは私のシェーダーで読み取ることができます (sampler2D を介して - 派手なものはありません) - 動作します。iOS では、その sampler2D からのサンプルはvec4(0.,0.,0.,1.)
、入力されたデータに関係なく を返します。
( に変更GL_ALPHA
するGL_RGBA
と、テクスチャをフレームバッファにアタッチし、プラットフォームに関係なく、入力した正確なデータが返された後に呼び出し、glReadPixels
機能glTexImage2D
(または iOS での欠如) は同じままであることに注意してください。に必要なフレームバッファにアタッチするためだけに必要でした.これは、デバッグ目的でのみ気にします.tl;dr:データがすべてのプラットフォームでテクスチャに正しくアップロードされていることをかなり確信しています.)GL_RGBA
glReadPixels
他の情報:
gl_sim_texture_active_n
は 6 で、gl_sim_texture_buff_id
14 です (どちらも正当に取得され、エラーなしで取得されます)。glGetError()
orglCheckFramebufferStatus(GL_FRAMEBUFFER)
の前または後に両方を呼び出すと、クリーンが返されます。glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS)
8 を返します (テスト用の Android デバイスと同じです。
これがiOSではなくOSX/Androidで機能する理由がまったくわかりません。ここからどこへ行くべきかについての方向性は役に立ちます!
opengl - OpenGL は整数ピクセル データを浮動小数点または UNORM に変換できますか?
glTexImage2D
internalFormat
(ビット数とデータ型/エンコーディングを指定)、(format
ビット数とエンコーディングなし) とtype
.
たとえば、OpenGL が 32 ビット整数を含む渡されたピクセル データを形式GL_RGB_INTEGER
と型GL_INT
から内部形式に変換できるようにすることは可能ですGL_RGB32F
か?
ウィキの記事https://www.khronos.org/opengl/wiki/Pixel_Transfer#Format_conversionは、次のように述べることで可能であることを示唆しています。
ユーザーが指定したピクセルは、ユーザーが指定した形式 (形式と型を使用) と、画像の画像形式によって制御される内部表現との間で変換する必要があります。
しかし、シェーダーで浮動小数点サンプラーから読み取ることができませんでした。