이제 아주 기본적인 이론들을 끝내고 본격적으로 OpenGL을 다루는 시간이 왔네요.(서적에서는 "To begin to unlock the power of Open GL"이라고 언급 하는 군요 :-D)
OpenGL이라 함은 상태기계(state machine)이라고도 불리는데, 다양한 상태를 이용해서 다른 모습을 볼 수 있습니다. 그럼, 어떠한 "상태" 라는 것만 존재한다면 그걸 이용 할 수 있어야 겠죠? 현재 어떠한 상태인지 가져오는 것과 상태를 다시 설정 해주는 것이 필요 할 것 입니다.
가져오는 것은 게터 함수(getter function)으로 할 수 있습니다. 함수의 사용은 아래와 같습니다. glGet뒤에 가져올 상태의 타입을 적어주고 두 번째 인자에 해당 타입의 포인터를 가져 오게 됩니다. 첫 번째 인자로는 상태의 이름을 적어주게 되죠.
이 처럼 값을 가져오는 함수는 아래와 같습니다.
void glGetBooleanv(GLenum pname, GLboolean *params);
void glGetDoublev(GLenum pname, GLdouble *params);
void glGetFloatv(GLenum pname, GLfloat *params);
void glGetIntegerv(GLenum pname, GLint *params);
첫 번째 인자로 들어가게 되는 이름들은 아래와 같습니다. 너무 커서 잠시 닫아 뒀어요 :-D
GL_ACCUM_ALPHA_BITS
GL_ACCUM_BLUE_BITS
GL_ACCUM_CLEAR_VALUE
GL_ACCUM_GREEN_BITS
GL_ACCUM_RED_BITS
GL_ALPHA_BIAS
GL_ALPHA_BITS
GL_ALPHA_SCALE
GL_ALPHA_TEST
GL_ALPHA_TEST_FUNC
GL_ALPHA_TEST_REF
GL_ATTRIB_STACK_DEPTH
GL_AUTO_NORMAL
GL_AUX_BUFFERS
GL_BLEND
GL_BLEND_DST
GL_BLEND_SRC
GL_BLUE_BIAS
GL_BLUE_BITS
GL_BLUE_SCALE
GL_CLIENT_ATTRIB_STACK_DEPTH
GL_CLIP_PLANEn (n ranges from 0 to GL_MAX_CLIP_PLANES ? 1)
GL_COLOR_ARRAY
GL_COLOR_ARRAY_SIZE
GL_COLOR_ARRAY_STRIDE
GL_COLOR_ARRAY_TYPE
GL_COLOR_CLEAR_VALUE
GL_COLOR_LOGIC_OP
GL_COLOR_MATERIAL
GL_COLOR_MATERIAL_FACE
GL_COLOR_MATERIAL_PARAMETER
GL_COLOR_WRITEMASK
GL_CULL_FACE
GL_CULL_FACE_MODE
GL_CURRENT_COLOR
GL_CURRENT_INDEX
GL_CURRENT_NORMAL
GL_CURRENT_RASTER_COLOR
GL_CURRENT_RASTER_DISTANCE
GL_CURRENT_RASTER_INDEX
GL_CURRENT_RASTER_POSITION
GL_CURRENT_RASTER_POSITION_VALID
GL_CURRENT_RASTER_TEXTURE_COORDS
GL_CURRENT_TEXTURE_COORDS
GL_DEPTH_BIAS
GL_DEPTH_BITS
GL_DEPTH_CLEAR_VALUE
GL_DEPTH_FUNC
GL_DEPTH_RANGE
GL_DEPTH_SCALE
GL_DEPTH_TEST
GL_DEPTH_WRITEMASK
GL_DITHER
GL_DOUBLEBUFFER
GL_DRAW_BUFFER
GL_EDGE_FLAG
GL_EDGE_FLAG_ARRAY
GL_EDGE_FLAG_ARRAY_STRIDE
GL_FOG
GL_FOG_COLOR
GL_FOG_DENSITY
GL_FOG_END
GL_FOG_HINT
GL_FOG_INDEX
GL_FOG_MODE
GL_FOG_START
GL_FRONT_FACE
GL_GREEN_BIAS
GL_GREEN_BITS
GL_GREEN_SCALE
GL_INDEX_ARRAY
GL_INDEX_ARRAY_STRIDE
GL_INDEX_ARRAY_TYPE
GL_INDEX_BITS
GL_INDEX_CLEAR_VALUE
GL_INDEX_LOGIC_OP
GL_INDEX_MODE
GL_INDEX_OFFSET
GL_INDEX_SHIFT
GL_INDEX_WRITEMASK
GL_LIGHTn (n ranges from 0 to GL_MAX_LIGHTS ? 1)
GL_LIGHTING
GL_LIGHT_MODEL_AMBIENT
GL_LIGHT_MODEL_LOCAL_VIEWER
GL_LIGHT_MODEL_TWO_SIDE
GL_LINE_SMOOTH
GL_LINE_SMOOTH_HINT
GL_LINE_STIPPLE
GL_LINE_STIPPLE_PATTERN
GL_LINE_STIPPLE_REPEAT
GL_LINE_WIDTH
GL_LINE_WIDTH_GRANULARITY
GL_LINE_WIDTH_RANGE
GL_LIST_BASE
GL_LIST_INDEX
GL_LIST_MODE
GL_LOGIC_OP
GL_LOGIC_OP_MODE
GL_MAP1_COLOR_4
GL_MAP1_GRID_DOMAIN
GL_MAP1_GRID_SEGMENTS
GL_MAP1_INDEX
GL_MAP1_NORMAL
GL_MAP1_TEXTURE_COORD_1
GL_MAP1_TEXTURE_COORD_2
GL_MAP1_TEXTURE_COORD_3
GL_MAP1_TEXTURE_COORD_4
GL_MAP1_VERTEX_3
GL_MAP1_VERTEX_4
GL_MAP2_COLOR_4
GL_MAP2_GRID_DOMAIN
GL_MAP2_GRID_SEGMENTS
GL_MAP2_INDEX
GL_MAP2_NORMAL
GL_MAP2_TEXTURE_COORD_1
GL_MAP2_TEXTURE_COORD_2
GL_MAP2_TEXTURE_COORD_3
GL_MAP2_TEXTURE_COORD_4
GL_MAP2_VERTEX_3
GL_MAP2_VERTEX_4
GL_MAP_COLOR
GL_MAP_STENCIL
GL_MATRIX_MODE
GL_MAX_CLIENT_ATTRIB_STACK_DEPTH
GL_MAX_ATTRIB_STACK_DEPTH
GL_MAX_CLIP_PLANES
GL_MAX_EVAL_ORDER
GL_MAX_LIGHTS
GL_MAX_LIST_NESTING
GL_MAX_MODELVIEW_STACK_DEPTH
GL_MAX_NAME_STACK_DEPTH
GL_MAX_PIXEL_MAP_TABLE
GL_MAX_PROJECTION_STACK_DEPTH
GL_MAX_TEXTURE_SIZE
GL_MAX_TEXTURE_STACK_DEPTH
GL_MAX_VIEWPORT_DIMS
GL_MODELVIEW_MATRIX
GL_MODELVIEW_STACK_DEPTH
GL_NAME_STACK_DEPTH
GL_NORMAL_ARRAY
GL_NORMAL_ARRAY_STRIDE
GL_NORMAL_ARRAY_TYPE
GL_NORMALIZE
GL_PACK_ALIGNMENT
GL_PACK_LSB_FIRST
GL_PACK_ROW_LENGTH
GL_PACK_SKIP_PIXELS
GL_PACK_SKIP_ROWS
GL_PACK_SWAP_BYTES
GL_PERSPECTIVE_CORRECTION_HINT
GL_PIXEL_MAP_A_TO_A_SIZE
GL_PIXEL_MAP_B_TO_B_SIZE
GL_PIXEL_MAP_G_TO_G_SIZE
GL_PIXEL_MAP_I_TO_A_SIZE
GL_PIXEL_MAP_I_TO_B_SIZE
GL_PIXEL_MAP_I_TO_G_SIZE
GL_PIXEL_MAP_I_TO_I_SIZE
GL_PIXEL_MAP_I_TO_R_SIZE
GL_PIXEL_MAP_R_TO_R_SIZE
GL_PIXEL_MAP_S_TO_S_SIZE
GL_POINT_SIZE
GL_POINT_SIZE_GRANULARITY
GL_POINT_SIZE_RANGE
GL_POINT_SMOOTH
GL_POINT_SMOOTH_HINT
GL_POLYGON_MODE
GL_POLYGON_OFFSET_FACTOR
GL_POLYGON_OFFSET_UNITS
GL_POLYGON_OFFSET_FILL
GL_POLYGON_OFFSET_LINE
GL_POLYGON_OFFSET_POINT
GL_POLYGON_SMOOTH
GL_POLYGON_SMOOTH_HINT
GL_POLYGON_STIPPLE
GL_PROJECTION_MATRIX
GL_PROJECTION_STACK_DEPTH
GL_READ_BUFFER
GL_RED_BIAS
GL_RED_BITS
GL_RED_SCALE
GL_RENDER_MODE
GL_RGBA_MODE
GL_SCISSOR_BOX
GL_SCISSOR_TEST
GL_SHADE_MODEL
GL_STENCIL_BITS
GL_STENCIL_CLEAR_VALUE
GL_STENCIL_FAIL
GL_STENCIL_FUNC
GL_STENCIL_PASS_DEPTH_FAIL
GL_STENCIL_PASS_DEPTH_PASS
GL_STENCIL_REF
GL_STENCIL_TEST
GL_STENCIL_VALUE_MASK
GL_STENCIL_WRITEMASK
GL_STEREO
GL_SUBPIXEL_BITS
GL_TEXTURE_1D
GL_TEXTURE_2D
GL_TEXTURE_COORD_ARRAY
GL_TEXTURE_COORD_ARRAY_SIZE
GL_TEXTURE_COORD_ARRAY_STRIDE
GL_TEXTURE_COORD_ARRAY_TYPE
GL_TEXTURE_ENV_COLOR
GL_TEXTURE_ENV_MODE
GL_TEXTURE_GEN_Q
GL_TEXTURE_GEN_R
GL_TEXTURE_GEN_S
GL_TEXTURE_GEN_T
GL_TEXTURE_MATRIX
GL_TEXTURE_STACK_DEPTH
GL_UNPACK_ALIGNMENT
GL_UNPACK_LSB_FIRST
GL_UNPACK_ROW_LENGTH
GL_UNPACK_SKIP_PIXELS
GL_UNPACK_SKIP_ROWS
GL_UNPACK_SWAP_BYTES
GL_VERTEX_ARRAY
GL_VERTEX_ARRAY_SIZE
GL_VERTEX_ARRAY_STRIDE
GL_VERTEX_ARRAY_TYPE
GL_VIEWPORT
GL_ZOOM_X
GL_ZOOM_Y
glGet..(..) 첫 번째 인자 닫기
하지만 이러한 것은 값이 필요 할 때 사용해야 하는 방법이긴 하지만, 실제로 값을 가져오는 것보다 값이 세팅이 되어 있는지 확인 하는 것을 더 많이 하겠죠? boolean값으로 가져오게 되는 쿼리의 원형은 아래와 같습니다. 현재 설정 중(enabled)이라면 GL_TRUE를, 현재 설정되어 있지 않다면(disabled) GL_FALSE를 반환 하게 됩니다.
GLboolean glIsEnabled(GLenum cap);
인자로 들어가는 값은 아래와 같습니다. 역시 너무 많아서 접어 둘게요 :-D
GL_ALPHA_TEST
GL_AUTO_NORMAL
GL_BLEND
GL_CLIP_PLANEn (n ranges from 0 to GL_MAX_CLIP_PLANES ? 1)
GL_COLOR_ARRAY
GL_COLOR_LOGIC_OP
GL_COLOR_MATERIAL
GL_CULL_FACE
GL_DEPTH_TEST
GL_DITHER
GL_FOG
GL_INDEX_ARRAY
GL_INDEX_LOGIC_OP
GL_LIGHTn (n ranges from 0 to GL_MAX_LIGHTS ? 1)
GL_LIGHTING
GL_LINE_SMOOTH
GL_LINE_STIPPLE
GL_LOGIC_OP
GL_MAP1_COLOR_4
GL_MAP1_INDEX
GL_MAP1_NORMAL
GL_MAP1_TEXTURE_COORD_1
GL_MAP1_TEXTURE_COORD_2
GL_MAP1_TEXTURE_COORD_3
GL_MAP1_TEXTURE_COORD_4
GL_MAP1_VERTEX_3
GL_MAP1_VERTEX_4
GL_MAP2_COLOR_4
GL_MAP2_INDEX
GL_MAP2_NORMAL
GL_MAP2_TEXTURE_COORD_1
GL_MAP2_TEXTURE_COORD_2
GL_MAP2_TEXTURE_COORD_3
GL_MAP2_TEXTURE_COORD_4
GL_MAP2_VERTEX_3
GL_MAP2_VERTEX_4
GL_NORMAL_ARRAY
GL_NORMALIZE
GL_POINT_SMOOTH
GL_POLYGON_OFFSET_FILL
GL_POLYGON_OFFSET_LINE
GL_POLYGON_OFFSET_POINT
GL_POLYGON_SMOOTH
GL_POLYGON_STIPPLE
GL_SCISSOR_TEST
GL_STENCIL_TEST
GL_TEXTURE_1D
GL_TEXTURE_2D
GL_TEXTURE_COORD_ARRAY
GL_TEXTURE_GEN_Q
GL_TEXTURE_GEN_R
GL_TEXTURE_GEN_S
GL_TEXTURE_GEN_T
GL_VERTEX_ARRAY
glIsEnable(..) 첫 번째 인자 닫기
엄청나게 많네요 :-D 하지만 대부분 하나에 대해서 여러가지 내용들이 많고, 천천히 하다보면 뭐가 뭔지 알 수 있으니까 너무 급할 필요는 없을 거 같아요.
참조 : OPENGL GAME PROGRAMMING(Foreword by Mark J.Kilgard)