OpenGL

2차원 및 3차원 그래픽스 표준 API 규격

오픈 그래픽 라이브러리(영어: Open Graphics Library 줄여서 OpenGL)[4][5]는 1992년 실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표준 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원한다. 이 API는 약 250여개 가량의 함수 호출을 이용하여 단순한 기하도형에서부터 복잡한 삼차원 장면을 생성할 수 있다. OpenGL은 현재 CAD, 가상현실, 정보시각화, 비행 시뮬레이션 등의 분야에서 활용되고 있다. 또한 컴퓨터 게임 분야에서도 널리 활용되고 있으며, 마이크로소프트사의 Direct3D와 함께 컴퓨터 그래픽 세계를 양분하고 있다. Direct3D와는 달리, 표준안이 여러 관련 업체의 토론과 제안으로 이루어지기에 버전 업데이트는 느린 편이다. OpenGL을 사용하여 개발된 대표적인 게임은 이드 소프트웨어퀘이크, 둠3 시리즈이다. 현재 비영리 기술 컨소시엄인 크로노스 그룹에 의하여 관리되고 있다.

OpenGL
원저자실리콘 그래픽스
개발자크로노스 그룹
(구 ARB)
발표일1992년 1월(32년 전)(1992-01)
안정화 버전
4.6 / 2017년 7월 31일(6년 전)(2017-07-31)
프로그래밍 언어C[1]
종류3D 그래픽 API
라이선스S.I 사용을 위한 오픈 소스 라이선스[2]
OpenGL 상표 및 로고 및 청구 적합성을 사용하고자하는 신규 라이센스 사용자를위한 상표 사용권.[3]
웹사이트opengl.org

역사 편집

1980년대에 다양한 그래픽 하드웨어와 기능할 수 있는 소프트웨어를 개발하는 일은 큰 도전이었다. 소프트웨어 개발자들은 개별 하드웨어에 맞추어 맞춤식 인터페이스와 드라이버를 작성하였다. 이러한 일은 비용이 많이 들었고 노력이 크게 늘어나게 되었다.

1990년대 초, 실리콘 그래픽스(SGI)는 워크스테이션용 3차원 그래픽스의 리더였다. IRIS GL API[6]사실 상의 표준 산업이 되어 오픈 표준 기반의 PHIGS를 무색케 했다. IRIS GL이 사용하기 쉬운 것으로 간주되었을 뿐 아니라, 즉시 모드 렌더링을 지원하였기 때문이다. 이와 대조적으로, PHIGS는 사용하기 어렵고 기능이 시대에 뒤쳐진 것으로 간주되었다.

SGI의 경쟁사들(썬 마이크로시스템즈, 휴렛 패커드, IBM)은 PHIGS 표준의 확장을 지원하는 3차원 하드웨어를 마케팅할 수 있었다. 더 많은 3차원 그래픽스 제공자들이 시장에 진입하면서 SGI 시장 점유율을 약화시켰다. 시장에 영향을 주려는 노력으로 SGI는 IrisGL API를 오픈 표준으로 전환시키기로 결정하였는데, 이것이 OpenGL이다.

버전 역사 편집

OpenGL의 최초 버전은 1992년 6월 30일 마크 시걸(Mark Segal)과 커트 애클리(Kurt Akeley)에 의해 출시되었다. 그 이후로 새로운 버전의 사양을 출시함으로써 OpenGL은 확장되어왔다.

개요 편집

  • OpenGL 1.1
  • OpenGL 1.2[7]
  • OpenGL 1.3
  • OpenGL 1.4
  • OpenGL 1.5
  • OpenGL 2.0 - GLSL 1.1
  • OpenGL 2.1 - GLSL 1.2
  • OpenGL 3.0 - GLSL 1.3
  • OpenGL 3.1 - GLSL 1.4
  • OpenGL 3.2 - GLSL 1.5
  • OpenGL 3.3 - GLSL 3.30
  • OpenGL 4.0 - GLSL 4.00
  • OpenGL 4.1 - GLSL 4.10
  • OpenGL 4.2 - GLSL 4.20
  • OpenGL 4.3 - GLSL 4.30
  • OpenGL 4.4 - GLSL 4.40
  • OpenGL 4.5 - GLSL 4.50
  • OpenGL 4.6 - GLSL 4.60

OpenGL 1.1 편집

출시일: 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

OpenGL 1.2 편집

출시일: 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

OpenGL 1.2.1 편집

출시일: 1998년 10월 14일

OpenGL 1.3 편집

출시일: 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

OpenGL 1.4 편집

출시일: 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

OpenGL 1.5 편집

출시일: 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

OpenGL 2.0 편집

출시일: 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

OpenGL 2.1 편집

출시일: 2006년 7월 2일

Extension Name Sort #Number
ARB_pixel_buffer_object ARB Extension #42
EXT_texture_sRGB Extension #315

OpenGL 3.0 편집

출시일: 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

OpenGL 3.1 편집

출시일: 2009년 3월 24일

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

OpenGL 3.2 편집

출시일: 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

OpenGL 3.3 편집

출시일: 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

OpenGL 4.0 편집

출시일: 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

OpenGL 4.1 편집

출시일: 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

OpenGL 4.2 편집

출시일: 2011년 8월 8일[8]

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

OpenGL 4.3 편집

출시일: 2012년 8월 6일[9]

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

OpenGL 4.4 편집

출시일: 2013년 7월 22일[10]

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


OpenGL 4.5 편집

출시일: 2014년 8월 11일[11][12]

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


OpenGL 4.6 편집

출시일: 2017년 7월 31일[11][13][14]

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은 두 가지의 주된 용도를 제공한다:

  • 프로그래머에게 단일한 API를 제공함으로써 서로 다른 3차원 가속기 사이의 복잡한 상호 정보교환 방식을 간단하게 한다.
  • (필요하다면 소프트웨어적인 에뮬레이션을 이용하더라도) 모든 구현이 완전한 OpenGL 기능 집합을 지원하도록 강제함으로써 각각의 하드웨어 플랫폼마다 다른 능력 차이를 감추는 역할을 한다.

OpenGL의 동작은 점, 선, 다각형과 같은 기본 도형을 그리고, 이를 픽셀 형식으로 변환하는 것을 허용하고 있다. 이러한 일은 OpenGL 상태 머신(OpenGL State Machine)이라는 그래픽스 파이프라인을 통하여 이루어진다.

예제 편집

glClear( GL_COLOR_BUFFER_BIT );
이 문장은 색상 버퍼를 소거하여 화면을 빈화면으로 만든다.
glMatrixMode( GL_PROJECTION ); /* 뒤이어 나타나는 행렬 명령이 투영행렬에 영향을 줌 */
glLoadIdentity(); /* 투영행렬을 단위 행렬로 초기화 함 */
glFrustum( -1, 1, -1, 1, 1, 1000 ); /* 투시투영행렬을 적용시킴 */
위 문장은 투영행렬을 초기화한 후, 가시 영역을 표현하는 행렬로 삼차원 절두체 행렬을 사용한다는 명령이다. 이 행렬은 카메라에 상대적인 공간에서 표현되는 객체를 OpenGL의 투영 공간으로 변환시키는 일을 한다.
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(); /* 다각형 만드는 일을 종료시킨다 */
위의 명령은 XY 평면 위에 녹색의 다각형을 그리는 일을 한다.

같이 보기 편집

  • GLSL - OpenGL의 상위 레벨 셰이딩 언어.
  • 글라이드 - 부두 그래픽 가속 카드를 위한 3D 그래픽스 API.
  • OpenGL ES - 임베디드 단말을 위한 OpenGL.

OpenGL 지원 라이브러리 편집

  • GLUT – OpenGL 유틸리티 툴킷으로 윈도 시스템에 독립적인 OpenGL 프로그램을 작성하도록 도와주는 도구.
  • SDL – Simple DirectMedia Layer.
  • GLU – OpenGL 프로그램을 위한 추가적인 함수를 제공.
  • GLee - OpenGL 프로그램을 위한 단순한 추가 라이브러리 제공.
  • GLEW – OpenGL 확장 Wrangler 라이브러리 제공.
  • GLUI - GLUT로 만들어진 GUI 툴킷으로 버튼, 체크박스 등의 GUI 기능을 제공.
  • GLFW - OpenGL 응용 프로그램 개발을 위한 이식 가능한 프레임워크.
  • GLM - GLSL 규격에 기반한 OpenGL을 위한 C++ 수학 툴킷.
  • SFML - 간단하고 빠른 멀티미디어 라이브러리.
  • Glux - OpenGL 유틸리티 및 보조 라이브러리.

기타 3D 그래픽스 API 편집

  • Mesa 3D - OpenGL의 공개소스 판.
  • VirtualGL - 원격지 X 서버로 렌더링된 이미지를 보내주는 OpenGL 3D 모델 서버.
  • Direct3D - 마이크로소프트사에서 개발한 OpenGL의 대항 API.
  • RISpec - 픽사에서 개발한 실사 오프라인 렌더링을 위한 공개 API.

기타 2D 그래픽스 API 편집

  • 카이로 - 여러 운영체제에서 사용할 수 있는 벡터 그래픽 툴킷.
  • GTK+ - 여러 운영체제에서 사용할 수 있는 그래픽 위젯 툴킷.
  • Qt - 여러 운영체제에서 사용할 수 있는 그래픽 위젯 툴킷.
  • wxWidgets - 여러 운영체제에서 사용할 수 있는 그래픽 위젯 툴킷.

벌컨 편집

과거 이름이 "Next Generation OpenGL Initiative"(glNext)이었던 벌칸(Vulkan)은[15][16] OpenGL과 OpenGL ES를 기존 OpenGL 버전들과 하위 호환되지 않는 하나의 공통된 API로 통합하려는 재설계적 일환이다.[17][18][19]

벌컨 API의 최초 버전은 2016년 2월 16일에 출시되었다.

각주 편집

  1. Lextrait, Vincent (January 2010). “The Programming Languages Beacon, v10.0”. May 30, 2012에 원본 문서에서 보존된 문서. March 14, 2010에 확인함. 
  2. 이것은 BSD, X 및 Mozilla 라이선스에 대해 자세히 모델링 된 자유 소프트웨어 라이선스 B이다.
  3. “Products: Software: OpenGL: Licensing and Logos”. SGI. 2012년 11월 1일에 원본 문서에서 보존된 문서. 2012년 11월 7일에 확인함. 
  4. “OpenGL 4.0 Specification” (PDF). 2017년 7월 31일에 확인함. 
  5. “CS 370 → Labs”. faculty.ycp.edu. 2019년 2월 25일에 원본 문서에서 보존된 문서. 2019년 4월 3일에 확인함. 
  6. “IRIS GL, SGI's property”. 
  7. Astle, Dave (2003년 4월 1일). “Moving Beyond OpenGL 1.1 for Windows”. 《gamedev.net》. 2007년 11월 15일에 확인함. 
  8. “Khronos Enriches Cross-Platform 3D Graphics with Release of OpenGL 4.2 Specification”. 
  9. “Khronos Releases OpenGL 4.3 Specification with Major Enhancements”. 
  10. “Khronos Releases OpenGL 4.4 Specification”. 
  11. “Khronos OpenGL Registry”. Khronos Group. 2017년 7월 31일에 확인함. 
  12. “Khronos Group Announces Key Advances in OpenGL Ecosystem – Khronos Group Press Release”. The Khronos Group Inc. 2015년 4월 17일에 확인함. 
  13. “Khronos Releases OpenGL 4.6 with SPIR-V Support”. The Khronos Group Inc. 2017년 7월 31일에 확인함. 
  14. https://www.khronos.org/registry/OpenGL/specs/gl/GLSLangSpec.4.60.pdf
  15. Dingman, Hayden (2015년 3월 3일). “Meet Vulkan, the powerful, platform-agnostic gaming tech taking aim at DirectX 12”. 《PC World. 2015년 3월 3일에 확인함. 
  16. Bright, Peter (2015년 3월 3일). “Khronos unveils Vulkan: OpenGL built for modern systems”. 《Ars Technica. 2015년 3월 3일에 확인함. 
  17. “Khronos Announces Next Generation OpenGL Initiative”. AnandTech. 2014년 8월 20일에 확인함. 
  18. “OpenGL 4.5 released, next-gen OpenGL unveiled: Cross-platform Mantle killer, DX12 competitor”. 2014년 8월 20일에 확인함. 
  19. “Khronos Publishes Its Slides About OpenGL-Next”. Phoronix. 2014년 8월 22일에 확인함. 

외부 링크 편집