問題タブ [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.

0 投票する
1 に答える
1212 参照

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.

0 投票する
2 に答える
3957 参照

opengl - 解像度に互換性がない場合にglTexImage2Dエラーをキャッチするにはどうすればよいですか?

互換性のない画像テクスチャ解像度に起因するエラーをキャッチしようとしています

glTexImage2Dが#1の解像度で正常に動作し、#2の解像度でエラーが発生する理由がわかりません。次の解像度パターンを抽出できませんでした。これは、一部の解像度が正常に機能している場合とそうでない場合があることを意味します。どうしてか分かりません。

問題は、ユーザーが互換性のない解像度でテクスチャを作成しようとすると、OpenGLがエラーをキャッチし、テクスチャが作成されていない場合は0を取得する必要がありますが、glTexImage2Dは何も返さないため、ユーザーに安全なものを作成できません。「この解像度はサポートされていません。使用しないでください。」しかし、問題は、OpenGLがglTexImage2Dエラーをキャッチしないことです。

実行時の実行中

だから、どうすればglTexImage2Dエラーをキャッチできるか知っている人はいますか?エラーが発生した場合は、「この画像は使用しないで、別の画像を使用してください」と表示します。そして0を返します。

このタスクを達成する方法は?また、一部の解像度でのみユーザーを制限することも考えましたが、これは解決策ではありません。右 ?

0 投票する
1 に答える
1409 参照

opengl - OpenGL が glTexImage2D とアルファ ブレンディングを繰り返し呼び出す

これは、実用的な目的というよりも好奇心によるものです。OpenGL 仕様に、glTexImage2D何度も呼び出すこと (たとえば、フレームごとに 1 回) が違法であることを示唆するものはありますか? 非効率的であるだけでなく、「間違った結果が生じる可能性がある」という意味で違法を意味します(代わりに使用しないことによるパフォーマンスへの影響は気にしないとしglTexSubImage2Dます)。

私が尋ねている理由は、いくつかの非常に奇妙なアーティファクトに気付いたからです。オーバーラップし、テクスチャ マップされたプリミティブを描画するときに、部分的に透明なテクスチャを使用します。このテクスチャは、フレームごとに 1 回読み込まれglTexImage2Dます (添付の図を参照): 数秒後 (つまり、 、数百フレーム)、小さな長方形の黒いパッチが画面に表示されます (実際には、連続するフレーム間で黒と通常の間で反転しています)。

アーティファクト

問題を示す、私が記述できる最も単純なコード例を以下に添付します。

ノート:

  1. 私は SDL を使用していますが、wxWidgets でも同じことが起こっているのを見たことがあるので、SDL 関連の問題ではありません。

  2. glTexSubImage2D代わりにすべてのフレームに使用するupdate = 1と ( で使用createTexture)、アーティファクトは消えます。

  3. ブレンディングを無効にすると、アーティファクトはなくなります。

  4. 私はこれを 2010 年後半の MacBook Air でテストしてきたが、特に関連性があるとは思えない。

0 投票する
1 に答える
687 参照

python - Pythonフロートの配列からテクスチャへ

floats([0..1])のマトリックスからテクスチャを作成する必要があります。テクスチャは灰色の正方形を表示する必要がありますが、白い長方形のみを表示します:(

私はこのコードを持っています:

ありがとう!

0 投票する
2 に答える
1103 参照

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 と同じデータを持ち、ピクセルの上位バイトはどこにも見られません。

ここで何か不足していますか?

または、誰かが別のアプローチを提案できますか?

0 投票する
1 に答える
533 参照

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 です。

0 投票する
1 に答える
2246 参照

c++ - glGenTextures と glBindTexture は、glTexImage2D と glTexSubImage2D を実行する前に呼び出す必要がありますか?

こんにちは、ディスプレイに描画する 35 枚の画像があります。私は7X5グリッドでそれを描いています。画像はインターネットからダウンロードしたものです。画像がダウンロードされるたびに、35 枚の画像全体を描画しようとします。しかし、それらのいくつかはまだダウンロードされていません。そのため、代わりにデフォルトのタイルをいくつか描画します。問題は、画像がダウンロードされるたびに、以前に描画した画像も再度描画していることです。減らしたい。そこで、Texture Atlas のようなものを作ろうと考えていました。私は手動でそれをやろうとしています。で大きな画像を作成し、 でglTexImage2Dサブ画像を追加することでそれを行っていglTexSubImage2Dます。

35 を呼び出しglTexSubImage2Dて、35 枚すべての画像を big に追加しますglTexImage2D。ここでは、説明を簡単にするために 1 つだけ書きました。それから最後に私はします

今私が混乱しているのは、glTexSubImage2D?? または、1回だけで十分です。テクスチャをバインドするものを理解していない実際の問題は、それで何かをしなければなりません。ありがとう。

0 投票する
1 に答える
1427 参照

webgl - WebGL texImage2d:rasterizeHTML.js を使用した SECURITY_ERR

私は rasterizeHTML.js を使用して Web ページの DOM 要素 (ページのスクリーンショットなど) を表すキャンバスを作成し、それを texImage2d に渡して、このキャンバスをテクスチャとして使用しています。Firefox 21.0 では正常に動作しますが、他のブラウザー (Chrome、Safari など) では次のエラーが発生します。

セキュリティ ポリシーをバイパスする方法はありますか? 現地で使いたい。同じオリジンポリシーのために可能だと思ったので、ローカルWebサーバー(MAMP)も使用しようとしましたが、エラーは同じです...どうもありがとう!

0 投票する
0 に答える
858 参照

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_SIZEpageWidth と pageHeight は、たとえば 240 X 600 など、任意の値 ( より小さい値) にすることができます。では、この問題をどのように解決すればよいでしょうか?

0 投票する
2 に答える
1846 参照

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 など) をどのように理解できますか?