29

短い質問があります。OpenGLに、int、unsigned int、charなどの標準型用の独自のデータ型が付属しているのはなぜですか?そして、C ++データ型のビルドの代わりにそれらを使用する必要がありますか?

たとえば、OpenGLunsigned intはisGLuintに相当し、ac文字列の場合は。GLchar*の代わりにありchar*ます。

4

2 に答える 2

34

たとえば、OpenGL に相当するものunsigned intは次のとおりです。GLuint

いいえ、そうではありません。それこそが、OpenGL とやり取りするときに OpenGL のデータ型を使用する必要がある理由です。

GLuintと「同等」ではありませんunsigned int。サイズは 32 ビットでGLuintある必要があります。サイズは常に32 ビットです。unsigned int サイズが32 ビットの場合があります。64ビットかもしれません。あなたは知らないし、C はあなたに教えようとはしない (の外側でsizeof)。

これらのデータ型はプラットフォームごとに定義され、プラットフォームごとに異なる定義になる場合があります。定義が異なっていても、常に同じサイズになるため、それらを使用します。OpenGL API が期待し、必要とするサイズ。

于 2012-09-05T16:09:34.577 に答える
10

私はの専門家ではありませんが、通常、、OpenGLなどのフレームワーク/プラットフォームは、基になるデータ型の意味と容量が異なるOS間で同じになるように、独自のデータ型を定義します。通常、この動作はC / C ++プリプロセッサマクロを使用して取得されますが、懸念事項としては、次のようになります。OpenGLQtGLuinttypedefgl.h

typedef unsigned int GLuint;

だから答えはイエスです。フレームワークのデータ型を使用して、OS間でそのフレームワーク内のコードの移植性を確保する必要があります。

于 2012-09-05T16:14:59.893 に答える