2

Cinder で OpenGL を使用すると表示される視覚的な不具合があり、可能であれば WebGL で再現したいと考えています。

この効果は、テクスチャをサイズで初期化することから得られますが、データはありません。基本的には、GPU 上のジャンク メモリを表示しています (最終的には、デスクトップの断片化された変色した画像などになります)。

私が取り組んでいる特定の WebGL ディスプレイに非常に役立つ効果です。

以下の効果については、このページgl::Textureで説明しています。ヘッダーまでスクロールすると、次のようになります。

  http://libcinder.org/docs/v0.8.5/images_buffer.jpg

WebGL/js コンテキストでこれを実現するための手がかりはありますか? (ブラウザで効果が得られる場合は、他のリソース/フレームワークを使用することに完全にオープンです)

4

1 に答える 1

7

どのような状況でも WebGL でこれを生成する方法はありません。

OpenGL および OpenGL ES (WebGL のベース) では、割り当てられたメモリの初期化に必要な動作はなく、この「グリッチ」効果は未定義の動作の結果です。

WebGL は実際には、セキュリティの悪用を防ぐためにバッファ/テクスチャ メモリの追加要件を定義しています。その 1 つは、割り当てられたメモリが常に0に初期化されることです。したがって、この動作WebGL で定義されており、「グリッチ」効果が発生しないように定義されています。

WebGL 仕様-バージョン 1.0.2 - 2013 年 3 月

4 セキュリティ

4.1 リソースの制限

テクスチャや頂点バッファー オブジェクト (VBO) などの WebGL リソースには、初期ユーザー データ値なしで作成された場合でも、常に初期化されたデータが含まれている必要があります。初期値なしでリソースを作成することは、テクスチャまたは VBO 用のスペースを確保するために一般的に使用されます。これは、texSubImage または bufferSubData 呼び出しを使用して変更されます。これらの呼び出しに初期データが提供されない場合、WebGL 実装はその内容を 0 に初期化する必要があります。深度レンダーバッファは、デフォルトの 1.0 クリア深度にクリアする必要があります。これには、正しく初期化できるように、要求された VBO のサイズのゼロ化された一時バッファーを作成する必要がある場合があります。テクスチャまたは VBO にデータをロードする他のすべての形式には、ArrayBuffers または画像などの DOM オブジェクトが含まれるため、既に初期化する必要があります。

drawElements や drawArrays などの呼び出しを介してシェーダーが WebGL リソースにアクセスする場合、WebGL 実装は、シェーダーが範囲外または初期化されていないデータにアクセスできないようにする必要があります。WebGL 実装によって実施する必要がある制限については、有効な頂点属性と範囲チェックを参照してください。

于 2014-06-06T01:20:00.037 に答える