[解決済み] OpenGL - GLenumはどのように符号なし32ビット整数ですか?
質問
そもそもOpenGLには8種類のBuffer Objectsがあります。
- gl_array_buffer
- gl_element_array_buffer。
- gl_COPY_read_buffer
- ...
これらは列挙型、より具体的にはGLenumのものです。GLenumは符号なし32ビット整数で、最大4,743,222,432までの値を持ちます。
バッファオブジェクトの使い方のほとんどは、このように特定のターゲットにバインドすることです。
glBindBuffer (GL_ARRAY_BUFFER, Buffers [size]);
[void glBindBuffer (GLenum target, GLuint buffer)] documentation
質問ですが、もしenumであれば、その値はそれぞれ0,1,2,3,4...7でなければならないのに、なぜわざわざ7までの値しかない32ビット整数にするのでしょうか?私のCSとOpenGLの知識で申し訳ありませんが、それはちょうど非倫理的なように思われます。
解決方法は?
列挙型はバッファにだけ使われるのではなく、シンボリックな定数が必要なところにはどこでも使われます。現在、数千のenum値が割り当てられています(あなたのGL.hと、最新の glext.h . ベンダは、他のベンダと干渉することなくベンダ固有の拡張を実装できるように、公式の列挙範囲を割り当てられていることに留意してください。さらに、最近の CPU アーキテクチャでは 32Bit 未満を使用しても効率が悪くならないので、性能面でも問題ありません。
UPDATEしてください。 Andon M. Colemanが指摘したように、現在16Bitの列挙範囲のみが割り当てられています。のリンクが便利かもしれません。 OpenGL Enumerant Allocation Policies (OpenGL列挙者割り当て方針) には、以下のような記載があります。
歴史的に、いくつかの単一ベンダーの拡張機能の列挙値は1000のブロックで割り当てられ、ブロック[102000,102999]から始まり、上に向かって増加します。この範囲の値は、16ビットの符号なし整数として表現することができない。このため、一部の実装では、重大かつ不必要な性能上のペナルティが課せられます。既にベンダーに割り当てられたブロックは、ベンダーが自発的にブロック全体を解放しない限り、割り当てられたままであるが、この範囲のブロックは今後割り当てられることはないだろう。
ほとんどが16Bit値で削除されたようですが、32Bit値も使用されています。現在のglext.hでは、0xffffより上の(古い)列挙子がまだ見つかっています。
#ifndef GL_PGI_misc_hints
#define GL_PGI_misc_hints 1
#define GL_PREFER_DOUBLEBUFFER_HINT_PGI 0x1A1F8
#define GL_CONSERVE_MEMORY_HINT_PGI 0x1A1FD
#define GL_RECLAIM_MEMORY_HINT_PGI 0x1A1FE
...
関連
-
[解決済み] glEnableVertexAttribArrayは具体的に何をするのですか?
-
[解決済み] OpenGL GLXエクステンションはサポートされていません
-
[解決済み] glutSpecialFuncを正しく使うには?
-
[解決済み] glDeleteBuffers()はいつ呼び出すべきですか?
-
[解決済み] GL_COLOR_BUFFER_BITとGL_DEPTH_BUFFER_BITは何のためにあるのでしょうか?
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] Pythonで'Enum'を表現するにはどうしたらいいですか?
-
[解決済み] バーテックスシェーダとフラグメントシェーダの比較 [重複].
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] FreeGLUTとGLFWの違いは何ですか?[クローズド]
-
[解決済み] OpenGL - なぜ、インデックスのためのGL_ELEMENT_ARRAY_BUFFERなのですか?
-
[解決済み] gl_FragColorとout vec4カラーを使用する?
-
[解決済み] glRotate(angle,x,y,z), この場合のx,y,zは何ですか?
-
[解決済み] Ken Silverman氏のVoxlapエンジンで使用されているアルゴリズムについて、どなたか教えてください。
-
[解決済み] gl_FragColorとout vec4カラーを使用する?
-
[解決済み] GL_COLOR_BUFFER_BITとGL_DEPTH_BUFFER_BITは何のためにあるのでしょうか?
-
[解決済み] gluPerspectiveパラメータ - その意味するところは?
-
[解決済み】OpenGLのテキストレンダリングは、バージョン4.1現在、何が最先端なのでしょうか?[クローズド]。
-
[解決済み] バーテックスシェーダとフラグメントシェーダの比較 [重複].