2013年1月27日日曜日

GLuint等のOpenGL型の根拠となる仕様

GLuint, GLint, GLenum など OpenGL のC APIを少なくとも直接叩くには必要なOpenGLの型に関する知識について、その根拠となる仕様は意外にgoogle先生から用意に教わり難い(╹◡╹)

どういう事か。

当然 OpenGL の仕様書にはこれらの型に関する仕様が明記されてはいる。しかし、OpenGLの仕様書には GLint がたった一度だけ登場しているのみで、他のOpenGLのAPIで用いるべき型 GLenumであるとか GLuint であるとかその他一切の定義は無い。

実は、OpenGLの仕様書ではOpenGL内部としての型(≈APIより内側での型システム)を単に int, uint, enum などとして表に纏めている。その上で、表の但し書きに、「以上に纏めるOpenGL内部で扱う型の一覧はCの互換型には非ずOpenGLの型なり。これらはOpenGLより外の世界では例えばこのintはGLintなどと呼ぶ。」とかなんとかそんな様な事が書いてある。


なるほどGLuintについて調べてみても実装例ばかりで仕様書の文言が見当たらない訳だ(╹◡╹)

以下、OpenGL4.3(Core)仕様書よりGL型の表を引用。それぞれGL Typeの前にGL文字列を結合した型が一般にOpenGLのAPI型として認識されている型に等しい。

GL Type Bit Width Description
boolean 1 or more Boolean
byte 8 Signed two's complement binary integer
ubyte 8 Unsigned binary integer
char 8 Characters making up strings
short 16 Signed two's complement binary integer
ushort 16 Unsigned binary integer
int 32 Signed two's complement binary integer
uint 32 Unsigned binary integer
fixed 32 Signed two's complement 16.16 scaled integer
int64 64 Signed two's complement 16.16 scaled integer
uint64 64 Unsigned binary integer
sizei 32 Non-negative binary integer size
enum 32 Enumerated binary integer value
intptr ptrbits Signed twos complement binary integer
sizeiptr ptrbits Non-negative binary integer size
sync ptrbits Sync object handle (see section 4.1)
bitfield 32 Bit field
half 16 Half-precision floating-point value encoded in an unsigned scalar
float 32 Floating-point value
clanmpf 32 Floating-point value clamped to [0,1]
double 64 Floating-point value
clampd 64 Floating-point value clamped to [0,1]

0 件のコメント:

コメントを投稿