問題タブ [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.
opengl-es-2.0 - How to properly use GL_HALF_FLOAT_OES for textures?
I'm using OpenGL ES 2.0 on an iPad 2 / 3. I'd like to use GL_FLOAT when creating textures:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_FLOAT, rawData);
but the problem is that GL_LINEAR is not supported as a GL_TEXTURE_MAG_FILTER when GL_FLOAT is used if you don't have GL_OES_texture_float_linear showing up in your list of supported extensions. (None of the iPads do.)
But I do have GL_OES_texture_half_float_linear in my list of extensions. So using a half-float texture ought to work with linear interpolation.
Problem is, switching my texture creation to:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_HALF_FLOAT_OES, rawData);
causes EXC_BAD_ACCESS when I run the app. (libGPUSupportMercury.dlylib'gpus_ReturnGuiltyForHardwareRestart)
I haven't changed the format of the data since calling it with GL_FLOAT. Does the input data need to change for HALF_FLOAT somehow? If so, how? I don't know how I would split my input floats in half. Each component is GLfloat currently.
opengl - 解像度に互換性がない場合にglTexImage2Dエラーをキャッチするにはどうすればよいですか?
互換性のない画像テクスチャ解像度に起因するエラーをキャッチしようとしています
glTexImage2Dが#1の解像度で正常に動作し、#2の解像度でエラーが発生する理由がわかりません。次の解像度パターンを抽出できませんでした。これは、一部の解像度が正常に機能している場合とそうでない場合があることを意味します。どうしてか分かりません。
問題は、ユーザーが互換性のない解像度でテクスチャを作成しようとすると、OpenGLがエラーをキャッチし、テクスチャが作成されていない場合は0を取得する必要がありますが、glTexImage2Dは何も返さないため、ユーザーに安全なものを作成できません。「この解像度はサポートされていません。使用しないでください。」しかし、問題は、OpenGLがglTexImage2Dエラーをキャッチしないことです。
実行時の実行中
だから、どうすればglTexImage2Dエラーをキャッチできるか知っている人はいますか?エラーが発生した場合は、「この画像は使用しないで、別の画像を使用してください」と表示します。そして0を返します。
このタスクを達成する方法は?また、一部の解像度でのみユーザーを制限することも考えましたが、これは解決策ではありません。右 ?
opengl - OpenGL が glTexImage2D とアルファ ブレンディングを繰り返し呼び出す
これは、実用的な目的というよりも好奇心によるものです。OpenGL 仕様に、glTexImage2D
何度も呼び出すこと (たとえば、フレームごとに 1 回) が違法であることを示唆するものはありますか? 非効率的であるだけでなく、「間違った結果が生じる可能性がある」という意味で違法を意味します(代わりに使用しないことによるパフォーマンスへの影響は気にしないとしglTexSubImage2D
ます)。
私が尋ねている理由は、いくつかの非常に奇妙なアーティファクトに気付いたからです。オーバーラップし、テクスチャ マップされたプリミティブを描画するときに、部分的に透明なテクスチャを使用します。このテクスチャは、フレームごとに 1 回読み込まれglTexImage2D
ます (添付の図を参照): 数秒後 (つまり、 、数百フレーム)、小さな長方形の黒いパッチが画面に表示されます (実際には、連続するフレーム間で黒と通常の間で反転しています)。
問題を示す、私が記述できる最も単純なコード例を以下に添付します。
ノート:
私は SDL を使用していますが、wxWidgets でも同じことが起こっているのを見たことがあるので、SDL 関連の問題ではありません。
glTexSubImage2D
代わりにすべてのフレームに使用するupdate = 1
と ( で使用createTexture
)、アーティファクトは消えます。ブレンディングを無効にすると、アーティファクトはなくなります。
私はこれを 2010 年後半の MacBook Air でテストしてきたが、特に関連性があるとは思えない。
python - Pythonフロートの配列からテクスチャへ
floats([0..1])のマトリックスからテクスチャを作成する必要があります。テクスチャは灰色の正方形を表示する必要がありますが、白い長方形のみを表示します:(
私はこのコードを持っています:
ありがとう!
android - GL_LUMINANCE_ALPHA を使用して GLES20.glTexImage2D によってロードされた破損したデータ
Androidで16ビットグレースケールデータをレンダリングするためにopengl ES2.0を使用しています。(シェーダーで 16 ビットから 8 ビットへのダイナミック レンジ スケーリングを処理しています。データの入力形式であるため、16 ビット入力は必須です。) 解像度は 640x512 です。
現時点では、一度に 2 つのピクセルを 320x512 32 ビット RGBA テクスチャにプッシュすることで、これを機能させています。すなわち:
texture2D(thData, vTextureCoord)[0]
はピクセルi
下位バイト、
texture2D(thData, vTextureCoord)[1]
はピクセルi
の上位バイト、
texture2D(thData, vTextureCoord)[2]
はピクセルi+1
下位バイト、
texture2D(thData, vTextureCoord)[3]
ピクセルi+1
の上位バイトです。
これからデータを再構築することはできますが、640x512 バッファにレンダリングし、gl_FragCoord.x と条件ステートメントを使用してピクセルをチャネル 0,1 または 2,3 から描画するかどうかを決定することにより、元の解像度を再構築しました。コードは次のようになります。
これは原則としては問題ありませんが、何らかの理由でいくつかの列がスワップされているように見えます。私の推測では、丸めエラーが原因で条件ステートメントから誤った結果が生じる可能性があります。
私がやりたいことは、最初に 16 ビットのフル解像度のテクスチャを使用してダウン サンプリングを回避することです。これは非常に簡単に思えます。glTexImage2D コードを次のように変更しました。
に
ただし、これを行うと、テクスチャに奇妙なデータが表示されるようです。texture2D(thData, vTextureCoord)[0]
正しいように見えますがtexture2D(thData, vTextureCoord)[1]
、要素 0 と同じデータを持ち、ピクセルの上位バイトはどこにも見られません。
ここで何か不足していますか?
または、誰かが別のアプローチを提案できますか?
android - Android 4.2.2 では glTexImage2D が 4.2.0 よりも大幅に遅くなる
最近、Android デバイスを 4.2.0 から 4.2.2 にアップグレードしましたが、すべてが狂ったように途切れていることに気付きました。
Android 4.2.0 以下では、この呼び出しに約15 ミリ秒かかりました。
Android 4.2.2 では、同じ呼び出しに100 ~ 195 ミリ秒かかります。いったい何が変わって、これを引き起こしたのでしょうか? 私たちは複数のデバイスでテストしている複数の開発者であり、全員がこれを取得しています. これに影響を与える変更ログには何も表示されません。ここから先に進む方法がわかりません。
注意として、上記の呼び出しのバッファは、MediaCodec から返された ByteBuffer です。
c++ - glGenTextures と glBindTexture は、glTexImage2D と glTexSubImage2D を実行する前に呼び出す必要がありますか?
こんにちは、ディスプレイに描画する 35 枚の画像があります。私は7X5グリッドでそれを描いています。画像はインターネットからダウンロードしたものです。画像がダウンロードされるたびに、35 枚の画像全体を描画しようとします。しかし、それらのいくつかはまだダウンロードされていません。そのため、代わりにデフォルトのタイルをいくつか描画します。問題は、画像がダウンロードされるたびに、以前に描画した画像も再度描画していることです。減らしたい。そこで、Texture Atlas のようなものを作ろうと考えていました。私は手動でそれをやろうとしています。で大きな画像を作成し、 でglTexImage2D
サブ画像を追加することでそれを行っていglTexSubImage2D
ます。
35 を呼び出しglTexSubImage2D
て、35 枚すべての画像を big に追加しますglTexImage2D
。ここでは、説明を簡単にするために 1 つだけ書きました。それから最後に私はします
今私が混乱しているのは、glTexSubImage2D
?? または、1回だけで十分です。テクスチャをバインドするものを理解していない実際の問題は、それで何かをしなければなりません。ありがとう。
webgl - WebGL texImage2d:rasterizeHTML.js を使用した SECURITY_ERR
私は rasterizeHTML.js を使用して Web ページの DOM 要素 (ページのスクリーンショットなど) を表すキャンバスを作成し、それを texImage2d に渡して、このキャンバスをテクスチャとして使用しています。Firefox 21.0 では正常に動作しますが、他のブラウザー (Chrome、Safari など) では次のエラーが発生します。
セキュリティ ポリシーをバイパスする方法はありますか? 現地で使いたい。同じオリジンポリシーのために可能だと思ったので、ローカルWebサーバー(MAMP)も使用しようとしましたが、エラーは同じです...どうもありがとう!
opengl - 幅または高さを 2k + 2 として表すことができないため、GL_INVALID_VALUE を与える glTexImage2D
2番目のopenglキャンバスに描画する必要がある最初のopenglキャンバスから取得したスクリーンショットがあります。を使用してスクリーンショットを撮りましたglReadPixels
:
最初の OpenGL キャンバスには、いくつかの線とテキスト データを含む 2 つ以上の画像があります。2番目のopenglキャンバスを使用して、周囲のデータ全体で画像のタイリングを表示しています.2番目のopenglキャンバスで同じものを再描画したくないため、スクリーンショットを撮り、スクリーンショットのタイリング部分を描画したい2 番目のキャンバスで。
また、取り込んだスナップショットをjpgファイルに保存しましたが、これは完璧です。
しかし、使用されている pageWidth または pageHeight が 2K+ 2 として表現できないため、glTexImage2d を使用してピクセル データを描画する必要がある場合に問題が発生します。したがって、エラーはGL_INVALID_VALUE
.
GL_MAX_TEXTURE_SIZE
pageWidth と pageHeight は、たとえば 240 X 600 など、任意の値 ( より小さい値) にすることができます。では、この問題をどのように解決すればよいでしょうか?
c++ - GL_UNSIGNED_SHORT_5_6_5 未宣言?
SDL ライブラリを使用してテクスチャをロードする際に問題があります。
通常は Linux でプログラムを作成しますが、Visual Studio と互換性のあるコードを作成するようにしています。Linux では問題ありませんが、Visual Studio では glTexImage2D(...) 関数の "GL_UNSIGNED_SHORT_5_6_5" でクラッシュします。
以下は、このチュートリアルに触発された、私がやりたいことに関する一般的なアイデアです。
エラーは次のとおりです。
エラー C2065: 'GL_UNSIGNED_SHORT_5_6_5': 宣言されていない識別子
これが私が読み込もうとしている画像で、GIMP 2.8でビットマップ(8ビット5 6 5)として構成されています
注: Linux では不要な#include < GL/glext.h >のコメントを外すと、上記のメッセージが表示されます。
一般に、ビットマップ イメージを (ペイントなどで) 保存する場合、入力するタイプ (GL_UNSIGNED_SHORT_5_6_5、GL_UNSIGNED_BYTE など) をどのように理解できますか?