OpenGL
2차원 및 3차원 그래픽스 표준 API 규격 위키백과, 무료 백과사전
2차원 및 3차원 그래픽스 표준 API 규격 위키백과, 무료 백과사전
오픈 그래픽 라이브러리(영어: Open Graphics Library 줄여서 OpenGL)[5][6]는 1992년 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원한다. 이 API는 약 250여개 가량의 함수 호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다. OpenGL은 현재 CAD, 가상현실, 정보시각화, 비행 시뮬레이션 등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어의 퀘이크, 둠3 시리즈이다. 현재 비영리 기술 컨소시엄인 크로노스 그룹에 의하여 관리되고 있다.
1980년대에 다양한 그래픽 하드웨어와 기능할 수 있는 소프트웨어를 개발하는 일은 큰 도전이었다. 소프트웨어 개발자들은 개별 하드웨어에 맞추어 맞춤식 인터페이스와 드라이버를 작성하였다. 이러한 일은 비용이 많이 들었고 노력이 크게 늘어나게 되었다.
1990년대 초, 실리콘 그래픽스(SGI)는 워크스테이션용 3차원 그래픽스의 리더였다. IRIS GL API[7]는 사실 상의 표준 산업이 되어 오픈 표준 기반의 PHIGS를 무색케 했다. IRIS GL이 사용하기 쉬운 것으로 간주되었을 뿐 아니라, 즉시 모드 렌더링을 지원하였기 때문이다. 이와 대조적으로, PHIGS는 사용하기 어렵고 기능이 시대에 뒤쳐진 것으로 간주되었다.
SGI의 경쟁사들(썬 마이크로시스템즈, 휴렛 패커드, IBM)은 PHIGS 표준의 확장을 지원하는 3차원 하드웨어를 마케팅할 수 있었다. 더 많은 3차원 그래픽스 제공자들이 시장에 진입하면서 SGI 시장 점유율을 약화시켰다. 시장에 영향을 주려는 노력으로 SGI는 IrisGL API를 오픈 표준으로 전환시키기로 결정하였는데, 이것이 OpenGL이다.
OpenGL의 최초 버전은 1992년 6월 30일 마크 시걸(Mark Segal)과 커트 애클리(Kurt Akeley)에 의해 출시되었다. 그 이후로 새로운 버전의 사양을 출시함으로써 OpenGL은 확장되어왔다.
출시일: 1997년 3월 4일
Extension Name | Sort #Number |
---|---|
EXT_polygon_offset | Extension #3 |
EXT_texture | Extension #4 |
EXT_subtexture EXT_copy_texture |
Extension #9 Extension #10 |
EXT_texture_object | Extension #20 |
EXT_vertex_array | Extension #30 |
EXT_blend_logic_op | Extension #39 |
출시일: 1998년 3월 16일
Extension Name | Sort #Number |
---|---|
EXT_texture3D | Extension #6 |
EXT_packed_pixels | Extension #23 |
SGIS_texture_lod | Extension #24 |
EXT_rescale_normal | Extension #27 |
SGIS_texture_edge_clamp | Extension #35 |
EXT_draw_range_elements | Extension #112 |
EXT_bgra | Extension #129 |
EXT_separate_specular_color | Extension #144 |
출시일: 1998년 10월 14일
출시일: 2001년 8월 14일
Extension Name | Sort #Number |
---|---|
ARB_multitexture | in OpenGL 1.2.1 integrated |
ARB_transpose_matrix | ARB Extension #3 |
ARB_multisample | ARB Extension #5 |
ARB_texture_cube_map | ARB Extension #7 |
ARB_texture_env_add ARB_texture_env_combine ARB_texture_env_dot3 |
ARB Extension #6 ARB Extension #17 ARB Extension #19 |
ARB_texture_compression | ARB Extension #12 |
ARB_texture_border_clamp | ARB Extension #13 |
출시일: 2002년 7월 24일
Extension Name | Sort #Number |
---|---|
SGIS_generate_mipmap | Extension 32 |
EXT_blend_color EXT_blend_subtract |
Extension #2 Extension #38 |
EXT_blend_minmax | OpenGL Extension #37 |
EXT_secondary_color | Extension #145 |
EXT_multi_draw_arrays | Extension #148 |
EXT_fog_coord | Extension #149 |
EXT_blend_func_separate | Extension #173 |
EXT_stencil_wrap | Extension #176 |
EXT_texture_lod_bias | OpenGL Extension #186 |
NV_blend_square | Extension 194 |
ARB_point_parameters | ARB Extension #14 |
ARB_texture_env_crossbar | ARB Extension #18 |
ARB_texture_mirrored_repeat | ARB Extension #21 |
ARB_depth_texture ARB_shadow |
ARB Extension #22 ARB Extension #23 |
ARB_window_pos | ARB Extension #25 |
ARB_vertex_program | ARB Extension #26 |
출시일: 2003년 7월 29일
Extension Name | Sort #Number |
---|---|
ARB_vertex_buffer_object | ARB Extension #28 |
ARB_occlusion_query | ARB Extension #29 |
EXT_shadow_funcs | Extension #267 |
출시일: 2004년 9월 7일
Extension Name | Sort #Number |
---|---|
ARB_shader_objects ARB_vertex_shader ARB_fragment_shader ARB_shading_language_100 |
ARB Extension #30 ARB Extension #31 ARB Extension #32 ARB Extension #33 |
ARB_texture_non_power_of_two | ARB Extension #34 |
ARB_point_sprite | ARB Extension #35 |
ARB_draw_buffers | ARB Extension #37 |
EXT_stencil_two_side ATI_separate_stencil |
Extension #268 Extension #289 |
EXT_blend_equation_separate | Extension #299 |
출시일: 2006년 7월 2일
Extension Name | Sort #Number |
---|---|
ARB_pixel_buffer_object | ARB Extension #42 |
EXT_texture_sRGB | Extension #315 |
출시일: 2008년 8월 11일
Extension | Details |
---|---|
EXT_gpu_shader4 | Extension #326 |
ARB_color_buffer_float | ARB Extension #39 |
ARB_half_float_pixel | ARB Extension #40 |
ARB_texture_float | ARB Extension #41 |
ARB_depth_buffer_float | ARB Extension #43 |
ARB_framebuffer_object | ARB Extension #45 |
ARB_half_float_vertex | ARB Extension #48 |
ARB_map_buffer_range | ARB Extension #50 |
ARB_texture_rg | ARB Extension #53 |
ARB_vertex_array_object | ARB Extension #54 |
GLX_ARB_create_context | ARB Extension #56 (GLX_ARB_create_context), ARB Extension #75 (GLX_ARB_create_context_profile) |
ARB_framebuffer_object | ARB Extension #45 |
NV_half_float | Extension #283 |
EXT_framebuffer_object | Extension #310 |
EXT_packed_depth_stencil | Extension #312 |
EXT_framebuffer_blit EXT_framebuffer_multisample |
Extension #316, #317 |
EXT_packed_float | Extension #328 |
EXT_texture_array | Extension #329 |
EXT_texture_compression_rgtc | OpenGL Extension #332 |
EXT_texture_shared_exponent | Extension #333 |
NV_depth_buffer_float | Extension #334 |
EXT_framebuffer_sRGB | Extension #337 |
EXT_draw_buffers2 | Extension #340 |
EXT_texture_integer | Extension #343 |
NV_conditional_render | OpenGL Extension #346 |
EXT_transform_feedback | Extension #352 |
출시일: 2009년 3월 24일
Extension | Details |
---|---|
ARB_texture_rectangle | ARB Extension #38 |
ARB_draw_instanced | ARB Extension #44 |
ARB_texture_buffer_object | ARB Extension #51 |
ARB_uniform_buffer_object | ARB Extension #57 |
ARB_copy_buffer | ARB Extension #59 |
NV_primitive_restart | Extension Number 285 |
EXT_texture_snorm | Extension Number 365 |
출시일: 2009년 8월 3일
Extension | Details |
---|---|
ARB_geometry_shader4 (heavily modified) |
ARB Extension #47 (NVIDIA Revision: 26) |
ARB_depth_clamp | ARB Extension #61 |
ARB_draw_elements_base_vertex | ARB Extension #62 |
ARB_fragment_coord_conventions | ARB Extension #63 |
ARB_provoking_vertex | ARB Extension #64 |
ARB_seamless_cube_map | ARB Extension #65 |
ARB_sync | ARB Extension #66 |
ARB_texture_multisample | ARB Extension #67 |
ARB_vertex_array_bgra | ARB Extension #68 |
출시일: 2010년 3월 11일
Extension | Details |
---|---|
ARB_instanced_arrays | ARB Extension #49 |
ARB_blend_func_extended | ARB Extension #78 |
ARB_explicit_attrib_location | ARB Extension #79 |
ARB_occlusion_query2 | ARB Extension #80 |
ARB_sampler_objects | ARB Extension #81 |
ARB_shader_bit_encoding | ARB Extension #82 |
ARB_texture_rgb10_a2ui | ARB Extension #83 |
ARB_texture_swizzle | ARB Extension #84 |
ARB_timer_query | ARB Extension #85 |
ARB_vertex_type_2_10_10_10_rev | ARB Extension #86 |
출시일: 2010년 3월 11일
Extension | Details |
---|---|
ARB_draw_buffers_blend | ARB Extension #69 |
ARB_sample_shading | ARB Extension #70 |
ARB_texture_cube_map_array | ARB Extension #71 |
ARB_texture_gather | ARB Extension #72 |
ARB_texture_query_lod | ARB Extension #73 |
ARB_draw_indirect | ARB Extension #87 |
ARB_gpu_shader5 | ARB Extension #88 |
ARB_gpu_shader_fp64 | ARB Extension #89 |
ARB_shader_subroutine | ARB Extension #90 |
ARB_tessellation_shader | ARB Extension #91 |
ARB_texture_buffer_object_rgb32 | ARB Extension #92 |
ARB_transform_feedback2 | ARB Extension #93 |
ARB_transform_feedback3 | ARB Extension #94 |
출시일: 2010년 7월 26일
Extension | Details |
---|---|
ARB_ES2_compatibility | ARB Extension #95 |
ARB_get_program_binary | ARB Extension #96 |
ARB_separate_shader_objects | ARB Extension #97 |
ARB_shader_precision | ARB Extension #98 |
ARB_vertex_attrib_64bit | ARB Extension #99 |
ARB_viewport_array | ARB Extension #100 |
출시일: 2011년 8월 8일[9]
Extension | Details |
---|---|
ARB_texture_compression_bptc | ARB Extension #77 |
ARB_compressed_texture_pixel_storage | ARB Extension #110 |
ARB_shader_atomic_counters | ARB Extension #114 |
ARB_texture_storage | ARB Extension #117 |
ARB_transform_feedback_instanced | ARB Extension #109 |
ARB_base_instance | ARB Extension #107 |
ARB_shader_image_load_store | ARB Extension #115 |
ARB_conservative_depth | ARB Extension #111 |
ARB_shading_language_420pack | ARB Extension #108 |
ARB_internalformat_query | ARB Extension #112 |
ARB_map_buffer_alignment | ARB Extension #113 |
ARB_shading_language_packing | ARB Extension #116 |
출시일: 2012년 8월 6일[10]
Extension | Details |
---|---|
KHR_debug | ARB Extension #119 |
ARB_arrays_of_arrays | ARB Extension #120 |
ARB_clear_buffer_object | ARB Extension #121 |
ARB_compute_shader | ARB Extension #122 |
ARB_copy_image | ARB Extension #123 |
ARB_texture_view | ARB Extension #124 |
ARB_vertex_attrib_binding | ARB Extension #125 |
ARB_ES3_compatibility | ARB Extension #127 |
ARB_explicit_uniform_location | ARB Extension #128 |
ARB_fragment_layer_viewport | ARB Extension #129 |
ARB_framebuffer_no_attachments | ARB Extension #130 |
ARB_internalformat_query2 | ARB Extension #131 |
ARB_invalidate_subdata | ARB Extension #132 |
ARB_multi_draw_indirect | ARB Extension #133 |
ARB_program_interface_query | ARB Extension #134 |
ARB_robust_buffer_access_behavior | ARB Extension #135 |
ARB_shader_image_size | ARB Extension #136 |
ARB_shader_storage_buffer_object | ARB Extension #137 |
ARB_stencil_texturing | ARB Extension #138 |
ARB_texture_buffer_range | ARB Extension #139 |
ARB_texture_query_levels | ARB Extension #140 |
ARB_texture_storage_multisample | ARB Extension #141 |
출시일: 2013년 7월 22일[11]
Extension | Details |
---|---|
ARB_buffer_storage | ARB Extension #144 |
ARB_clear_texture | ARB Extension #145 |
ARB_enhanced_layouts | ARB Extension #146 |
ARB_multi_bind | ARB Extension #147 |
ARB_query_buffer_object | ARB Extension #148 |
ARB_texture_mirror_clamp_to_edge | ARB Extension #149 |
ARB_texture_stencil8 | ARB Extension #150 |
ARB_vertex_type_10f_11f_11f_rev | ARB Extension #151 |
Extension | Details |
---|---|
ARB_ES3_1_compatibility | ARB Extension #159 |
ARB_clip_control | ARB Extension #160, |
ARB_conditional_render_inverted | ARB Extension #161 |
ARB_cull_distance | ARB Extension #162 |
ARB_derivative_control | ARB Extension #163 |
ARB_direct_state_access | ARB Extension #164 |
ARB_get_texture_sub_image | ARB Extension #165 |
ARB_shader_texture_image_samples | ARB Extension #166 |
ARB_texture_barrier | ARB Extension #167 |
KHR_context_flush_control | ARB Extension #168 |
KHR_robustness | ARB Extension #170 |
EXT_shader_integer_mix | OpenGL Extension #437 |
Extension | Details |
---|---|
ARB_indirect_parameters | ARB Extension #154, |
ARB_shader_draw_parameters | ARB Extension #156, |
ARB_shader_group_vote | ARB Extension #157 |
ARB_pipeline_statistics_query | ARB Extension #171 |
ARB_transform_feedback_overflow_query | ARB Extension #173 |
KHR_no_error | ARB Extension #175 |
ARB_shader_atomic_counter_ops | ARB Extension #182 |
ARB_gl_spirv | ARB Extension #190 |
ARB_polygon_offset_clamp | ARB Extension #193 |
ARB_spirv_extensions | ARB Extension #194 |
ARB_texture_filter_anisotropic | ARB Extension #195 |
OpenGL은 두 가지의 주된 용도를 제공한다:
OpenGL의 동작은 점, 선, 다각형과 같은 기본 도형을 그리고, 이를 픽셀 형식으로 변환하는 것을 허용하고 있다. 이러한 일은 OpenGL 상태 머신(OpenGL State Machine)이라는 그래픽스 파이프라인을 통하여 이루어진다.
glClear( GL_COLOR_BUFFER_BIT );
glMatrixMode( GL_PROJECTION ); /* 뒤이어 나타나는 행렬 명령이 투영행렬에 영향을 줌 */
glLoadIdentity(); /* 투영행렬을 단위 행렬로 초기화 함 */
glFrustum( -1, 1, -1, 1, 1, 1000 ); /* 투시투영행렬을 적용시킴 */
glMatrixMode( GL_MODELVIEW ); /* 뒤이어 나타나는 행렬 명령이 모델뷰행렬에 영향을 줌 */
glLoadIdentity(); /* 모델뷰행렬을 단위행렬로 초기화 함 */
glTranslatef( 0, 0, -3 ); /* z 축으로 3 단위만큼 모델뷰를 평행이동시킴 */
glBegin( GL_POLYGON ); /* 다각형을 만든다 */
glColor3f( 0, 1, 0 ); /* 현재 색상을 녹색으로 설정한다 */
glVertex3f( -1, -1, 0 ); /* 다각형에 필요한 정점을 만든다 */
glVertex3f( -1, 1, 0 ); /* 다각형에 필요한 정점을 만든다 */
glVertex3f( 1, 1, 0 ); /* 다각형에 필요한 정점을 만든다 */
glVertex3f( 1, -1, 0 ); /* 다각형에 필요한 정점을 만든다 */
glEnd(); /* 다각형 만드는 일을 종료시킨다 */
과거 이름이 "Next Generation OpenGL Initiative"(glNext)이었던 벌칸(Vulkan)은[16][17] OpenGL과 OpenGL ES를 기존 OpenGL 버전들과 하위 호환되지 않는 하나의 공통된 API로 통합하려는 재설계적 일환이다.[18][19][20]
벌컨 API의 최초 버전은 2016년 2월 16일에 출시되었다.