OpenGL과 Direct3의 비교d
Comparison of OpenGL and Direct3![]() |
Direct3D와 OpenGL은 2D와 3D 컴퓨터 그래픽을 렌더링하는 애플리케이션에서 사용할 수 있는 경쟁 애플리케이션 프로그래밍 인터페이스(API)이다.2005년[update] 현재, 그래픽 처리 장치(GPU)는 거의 항상 이러한 API의 한 버전을 구현한다.예를 들면 다음과 같다.DirectX 9 및 OpenGL 2 circa 2004, DirectX 10 및 OpenGL 3 circa 2008, 그리고 가장 최근에는 DirectX 11 및 OpenGL 4 circa 2011.보다 최신 버전의 표준을 지원하는 GPU는 이전 표준을 사용하는 애플리케이션과 역호환된다. 예를 들어, 보다 최신 DirectX 11 인증을 받은 GPU에서 구형 DirectX 9 게임을 실행할 수 있다.
유용성
Direct3D 애플리케이션 개발은 마이크로소프트 윈도우즈 플랫폼을 목표로 한다.null
OpenGL API는 오픈 표준으로, 다양한 하드웨어 제조업체와 운영체제 개발자가 자유롭게 OpenGL 구현을 시스템의 일부로 만들 수 있다는 것을 의미한다.다양한 플랫폼에 대해 OpenGL 구현이 존재한다.가장 주목할 만한 것은, OpenGL은 유닉스 같은 컴퓨터 시스템의 지배적인 그래픽 API이다.null
애플리케이션 개발자의 관점에서 Direct3D와 OpenGL은 똑같이 개방적이다. 전체 문서와 필요한 개발 도구는 제한 없이 이용할 수 있다.null
API | 데스크톱 지원 | 임베디드 시스템 지원 | 면허증 |
---|---|---|---|
다이렉트3D | Microsoft Windows, Xbox[citation needed] | Windows Embedded,[1] Windows CE(Direct3D Mobile 사용)[citation needed] | 소유권[2] |
오픈GL | 크로스[3] 플랫폼 | OpenGL ES를[4] 통한 크로스 플랫폼 | 개방형 표준,[3] 특허받은 일부 기능 |
좀 더 자세히 설명하자면, 두 개의 컴퓨터 그래픽 API는 다음과 같다.
- 다이렉트3D는 마이크로소프트가[2][5][6] 2차원(2D)과 3차원(3D) 그래픽을 렌더링할 수 있는 기능을 제공하는 전용 API로 그래픽 카드에 있으면 하드웨어 가속을 사용한다.마이크로소프트 사가 윈도 플랫폼에서 사용하도록 설계했다.
- OpenGL은 2D 및 3D 그래픽을 렌더링할 수 있는 많은 기능을 제공하는 개방형 표준 API로[7] 윈도, 맥OS, 리눅스를 포함하되 이에 국한되지 않는 대부분의 현대적 운영 체제에서 사용할 수 있다.[8]
많은 필수 OpenGL 확장 및 방법 또한 문서화되었지만 특허가 있으므로 이를 구현하는 데 심각한 법적 문제가 발생한다는 점에 유의하십시오(메사[9] 문제 참조).null
OpenGL과 Direct3D는 모두 디스플레이 장치 드라이버에서 구현된다.그러나 중요한 차이점은 Direct3D가 공통 런타임(마이크로소프트 제공)으로 API를 구현하고, 이는 다시 로우 레벨 장치 드라이버 인터페이스(DDI)와 대화한다는 점이다.OpenGL을 통해 모든 벤더는 드라이버에 전체 API를 구현한다.이는 일부 API 기능이 벤더마다 동작이 약간 다를 수 있다는 것을 의미한다.다른 벤더의 GLS 셰이더 컴파일러도 약간 다른 행동을 보인다.다음은 주로 게임 개발과 관련된 다양한 고려사항을 중심으로 구성된 두 API를 비교한 것이다.null
휴대성
독점적인 Direct3D는 Xbox 계열의 비디오 게임 콘솔과 Sega의 드림캐스트에서 사용되는 임베디드 버전을 포함하여 마이크로소프트의 윈도우 운영 체제 제품군에서만 공식적으로 구현된다.일반적인 Windows API를 Unix 유사 운영 체제에 포팅하는 프로젝트인 Wine과 Wine의 독점적인 포크인 Cedega와 같은 제3자에 의해 Direct3D API의 대부분 기능적 재구성이 이루어졌다.그러나, DirectX가 Windows의 다른 많은 독점적 요소들에 대한 상호의존성 때문에, 그리고 Direct3D의 독점적 특성은 역엔지니어링의 어려운 과정을 요구하기 때문에, 이 과정은 점진적으로 지연되고 있다.null
OpenGL은 마이크로소프트 윈도우즈, 맥 OS X, 리눅스 같은 유닉스 기반 시스템을 포함한 많은 플랫폼에서 구현이 가능하다.닌텐도와 소니는 OpenGL과 비슷하지만 같지 않은 그들만의 도서관을 개발했다.[citation needed]OpenGL ES 양식에서 Android, BlackBerry, iOS, Symbian용 메인 그래픽 라이브러리로 OpenGL의 하위 집합이 선택되었다.null
Microsoft의 OpenGL 드라이버는 Windows Vista에서 하드웨어 가속을 제공하며, Windows XP에서는 1990년대 후반 OpenGL-Direct3D 합병을 위한 Fahrenheit 그래픽 API 로우 레벨 지원을 제공하지 못하자 지원이 중단되었다.[citation needed]Windows에서 OpenGL 하드웨어 가속화는 사용자가 먼저 GPU 제조업체에서 개발한 설치 가능한 클라이언트 드라이버(ICD)를 설치함으로써 달성된다.[10]이러한 ICD는 거의 모든 경우에 하드웨어 공급업체(IHV)의 표준 드라이버 다운로드 패키지와 함께 번들로 제공되므로 최신 그래픽 드라이버를 설치하면 하드웨어 OpenGL 지원을 제공하기에 충분하다.[11]null
보다 최근에는 구글의 ANGLE(Bear Native Graphics Layer Engine) 프로젝트가 OpenGL ES 2.0 애플리케이션 호출을 DirectX 9로 전환하는 수단을 제공하고 있다.[12]이를 통해 WebGL(웹용 OpenGL의 서브셋 변형)이 공통 Direct3D 런타임에서 실행될 수 있으므로 벤더 간 변동이 적을 수 있다.null
사용의 용이성
다이렉트3D
1996년 Direct3D의 첫 버전은 상태 변경과 같은 간단한 운영조차도 실행 버퍼라고 불리는 개체를 만들고 제출하도록 요구했기 때문에 광범위한 비판을 이끌어냈다.이와는 대조적으로 OpenGL에서는 대부분의 상태 변경을 한 번의 함수 호출로 수행할 수 있다.Direct3D 모델은 많은 프로그래머들을 좌절시켰다.유명한 게임 개발자 존 D에 의해 매우 유명한 불만이 제기되었다. 카맥이 그의 옷을 입고 있다..plan
그가 마이크로소프트에게 OpenGL을 위해 Direct3D를 포기하라고 촉구한 [13]파일카맥은 "오픈GL은 사용이 간편하고 실험도 재밌다.D3D는 그렇지 않다. ...GL 코드의 한 줄인 많은 것들은 D3D 코드의 반 페이지가 필요하다 - 구조를 할당하고, 크기를 설정하고, 무언가를 채우고, COM 루틴을 호출하고, 결과를 추출하는 것이다."[14]크리스 헤커도 1997년 4~5월 게임 개발자 매거진 4~5월호 '마이크로소프트에 보내는 공개서한'에서 이와 비슷한 요청을 했다.[15]
버전 5(DirectX 5의 일부로 릴리즈된 것을 반영하여 명명된 두 번째 버전)는 실행 버퍼를 새로운 DrawPrimitive API로 대체했지만, 여전히 번거로운 것으로 여겨졌다.Chris Hecker의 "Microsoft에 보내는 공개 편지"는 DrawPrimitive를 "OpenGL을 빠르게 만드는 아키텍처 결정 중 일부를 놓치고 있는 미숙하고 형편없이 설계된 OpenGL의 복제품"[15]이라고 언급했다.
논란에도 불구하고 마이크로소프트는 API 진화를 계속했다.릴리스 및 추가된 기능에 대한 자세한 내역은 Microsoft Direct3D 웹 페이지에 나와 있다.null
이전의 Direct3D 비평가들은 현재 Direct3D가 성능과 사용 편의성에서 OpenGL보다 낫지 않더라도 훌륭하다는 것을 인정한다.2007년 1월, 존 카맥은 "DX9는 정말 훌륭한 API 수준이다.심지어 직접 3D 측면에서도, 내가 그것에 대해 적대적이라고 생각하는 사람들의 오랜 역사를 가지고 있다는 것을 알고 있다.Microsoft는 각 단계에서 이 기능을 매우, 아주 잘 발전시켜왔다. 즉, 역호환성을 깨는 것에 대해 걱정하지 않고 있으며, 이는 매우 깨끗한 API이다.특히 360에서 하고 있는 작업이 마음에 드는데, 아마 내가 작업한 감각적으로 설계된 것만큼 최고의 그래픽 API일 겁니다."
Direct3D의 일부 설계 기능은 버전 1 이후로 변경되지 않고 있으며, 특히 마이크로소프트의 컴포넌트 오브젝트 모델(COM)에 대한 의존도가 가장 높다. COM을 사용할 때의 장점 중 하나는 API를 어떤 COM 인식 언어에서도 사용할 수 있다는 것이다. 특히 Object Pascal(Delphi), 마이크로소프트 Visual C++, C#, Visual Basic.네트.
오픈GL
OpenGL은 프로그래밍 언어 C에서 구현되는 사양이지만 다른 언어에서는 사용할 수 있다.그것은 국가 기계라는 개념으로 만들어졌다.API로서 OpenGL은 하나의 프로그래밍 언어 기능에 의존하지 않으며, 적절한 바인딩으로 거의 모든 언어에서 호출이 가능하도록 할 수 있다.그러한 바인딩은 대부분의 최신 프로그래밍 언어에 존재한다.[16]null
비교
일반적으로 Direct3D는 3D 하드웨어 인터페이스를 가상화하도록 설계되어 있다.Direct3D는 게임 프로그래머가 그래픽 하드웨어를 수용하지 못하도록 한다.반면에 OpenGL은 소프트웨어에서 에뮬레이션될 수 있는 3D 하드웨어 가속 렌더링 시스템으로 설계되었다.이 두 API는 기본적으로 두 가지 별도의 사고방식 하에서 설계된다.null
이와 같이, 두 API의 작동 방식에는 기능적인 차이가 있다.API 간의 한 가지 기능적 차이점은 하드웨어 리소스를 관리하는 방법에 있다.Direct3D는 애플리케이션이 실행하기를 기대하며, OpenGL은 구현을 실행하도록 한다.OpenGL에 대한 이러한 트레이드오프는 API를 위한 개발의 어려움을 줄이는 동시에 성능이 우수한 구현(또는 드라이버)을 만드는 복잡성을 증가시킨다.Direct3D를 통해 개발자는 하드웨어 리소스를 독립적으로 관리해야 하지만 구현이 더 간단하고 개발자는 애플리케이션을 위해 가능한 가장 효율적인 방법으로 리소스를 할당할 수 있는 유연성을 가지고 있다.null
2005년경까지 API 간의 또 다른 기능적 차이는 텍스처에 렌더링을 처리하는 방식이었다.Direct3D 방법(SetRenderTarget()
이전 버전의 OpenGL에서는 픽셀 버퍼(P-buffer)를 조작해야 하는 반면 )는 편리하다.이것은 번거롭고 위험했다: 프로그램에 사용되는 코데패스가 드라이버 메이커에 의해 예상된 코데패스와 다르다면, 코드는 소프트웨어 렌더링으로 다시 떨어져 상당한 성능 저하를 야기할 것이다.그러나, Direct3D 방식과 동등한 OpenGL을 제공하는 프레임 버퍼 객체 확장에 대한 폭넓은 지원은 이러한 단점을 성공적으로 해결하였고, OpenGL의 렌더링 타겟 기능은 이 측면에서 Direct3D와 동등한 수준으로 끌어올렸다.null
몇 년 동안 대부분 해결되어 온 몇 가지 사소한 기능 차이점 외에도, 두 API는 거의 동일한 수준의 기능을 제공한다.하드웨어 및 소프트웨어 제조업체는 일반적으로 DirectX의 변경, 예를 들어 DirectX 10의 프로세서를 스트리밍하기 위한 DirectX 9의 픽셀 프로세서 및 셰이더 요구 사항과 같이 DirectX 11의 테셀레이션에 빠르게 대응한다.이와는 대조적으로 OpenGL의 새로운 기능은 대개 벤더에 의해 먼저 구현된 후 표준에 소급하여 적용한다.null
퍼포먼스
Direct3D와 OpenGL이 모두 실행 가능한 그래픽 라이브러리로 설립된 직후(1995년), 마이크로소프트와 SGI는 "API 전쟁"이라고 불린 것에 관여했다.논쟁의 대부분은 API가 우수한 성능을 제공하는 것에 초점을 맞췄다.이 질문은 이 기간 동안 전용 그래픽 프로세서의 비용이 매우 높기 때문에 관련성이 있었으며, 이는 소비자 시장이 Direct3D와 OpenGL 모두에 대해 마이크로소프트에 의해 구현된 소프트웨어 렌더러를 사용하고 있다는 것을 의미했다.null
조기토론
AutoCAD와 같은 DOS 비즈니스 소프트웨어와 ID Software's Jein과 같은 DOS 게임들은 원래 많은 다른 그래픽 칩셋에서 실행되도록 최적화되어야만 했다.3Dlabs(OpenGL Architecture Review Board) 같은 하드웨어 제조사가 OpenGL 호환 그래픽 액셀러레이터(예: GLint 칩)를 만들 때, ID Software의 John Carmack과 같은 개발자가 OpenGL에 자사의 제품을 최적화했다.유닉스급 시스템에서 윈도, X 윈도 시스템(X11) 등 멀티태스킹 사용자 환경이 보편화되면서 이 하드웨어의 관련성은 퇴색했다.null
마이크로소프트는 이 두 소프트웨어 라이브러리의 사내 성능 비교를 바탕으로 Direct3D를 더 빠르게 출시했다.성능 적자는 OpenGL이 요구하는 엄격한 사양과 적합성 탓이었다.이러한 인식은 1996년 GRAPICs 및 Interactive Technologies(SIGGGRAPH) 컨퍼런스에서 변경되었다.당시 실리콘그래픽스(SGI)는 다양한 데모에서 다이렉트3D의 성능을 일치시키거나 능가하는 OpenGL이라는 자체 최적화된 윈도 소프트웨어 구현으로 마이크로소프트에 도전했다.SGI의 경우, 이는 OpenGL의 소프트웨어 렌더링 성능 저하가 마이크로소프트의 참조 OpenGL 구현 때문이지 OpenGL의 설계 결함 때문은 아니라는 것을 보여주었기 때문에 중요한 이정표였다.null
이와는 대조적으로, 3D API에 의한 소프트웨어 렌더링은 Direct3D와 OpenGL 애플리케이션 둘 다와 크게 무관했다.Direct3를 사용한 DirectX 응용 프로그램이 많지 않음D의 소프트웨어 렌더링, 디스플레이 하드웨어에 접근하기 위해 DirectDraw의 설비를 사용하여 자체 소프트웨어 렌더링을 수행하는 것을 선호한다.OpenGL 애플리케이션의 경우 하드웨어 지원이 예상되었고 하드웨어 지원 속도가 훨씬 빨라서 OpenGL 애플리케이션에 의한 소프트웨어 폴백은 OpenGL 개발자에게 무례한 놀라움이 되었다.null
어쨌든, SGI가 OpenGL 소프트웨어 렌더링 성능이 Direct3D와 경쟁할 수 있음을 증명했을 때, 소프트웨어 렌더링은 저비용 3D 그래픽 하드웨어의 광범위한 가용성으로 인해 빠르게 무의미해지고 있었다.1998년까지 S3 ViRGE 그래픽 액셀러레이터조차도 Direct3D의 MMX 래스터저를 실행하는 가장 빠른 펜티엄 II보다 실질적으로 더 빨랐다.null
마시링
하드웨어 개발자가 제공하는 하드웨어 드라이버의 구조 때문에 보다 실질적이고 현대적인 성능 차이가 발생한다.DirectX에서 독립 하드웨어 벤더(IHV) 드라이버는 운영 체제에 설치된 커널 모드 드라이버다.API의 사용자 모드 부분은 마이크로소프트가 제공하는 DirectX 런타임에 의해 처리된다.그러나 OpenGL에서 IHV 드라이버는 OpenGL API를 구현하는 사용자 모드 부분과 사용자 모드 부분에서 호출되는 커널 모드 드라이버의 두 부분으로 나뉜다.null
사용자 모드에서 커널 모드 작업을 호출하려면 시스템 호출(즉, CPU를 커널 모드로 전환)을 수행해야 하기 때문에 이 문제가 발생한다.이 작업은 완료하는 데 마이크로초가 걸리는 느린 작업이다.[17]이 시간 동안 CPU는 어떤 작업도 수행할 수 없다.따라서 이 전환 작업이 발생하는 횟수를 최소화하면 성능이 향상된다.예를 들어 GPU의 명령 버퍼에 렌더링 데이터가 가득 차면 API는 요청된 렌더링 호출을 임시 버퍼에 저장하기만 하면 되며, 명령 버퍼가 거의 비어 있을 때 커널 모드로의 스위치를 수행하여 일괄적으로 저장된 명령 집합을 추가할 수 있다.이건 '마쉬링(mashling)라고 불린다.null
Direct3D IHV 드라이버는 커널모드이고, 사용자모드 코드는 IHV의 손을 벗어나기 때문에, 그러한 최적화가 일어날 가능성은 없다.API를 구현하는 사용자 모드 부분인 Direct3D 런타임은 운전자의 내부 작업에 대한 명시적 지식을 가질 수 없기 때문에 마슈팅을 효과적으로 지원할 수 없다.즉, 하드웨어에 명령을 전송하는 모든 Direct3D 호출은 커널 모드 스위치를 수행해야 하며, 이 역시 완료하는 데 마이크로초 단위로 시간이 걸린다.이로 인해 Direct3D 사용과 관련된 여러 가지 행동이 발생했는데, 가장 중요한 것은 하나의 함수 호출에 많은 삼각형 배치를 제출해야 한다는 것이다.[18]null
OpenGL의 IHV 드라이버에는 사용자 모드 구성요소가 있기 때문에, IHV는 마슈팅을 구현하는 능력을 갖추고 있어 성능을 향상시킨다.커널 모드 스위칭은 여전히 존재하지만 OpenGL 구현 시 이론적으로 최대 스위치 수는 Direct3D 표준 동작과 동일하다.null
윈도 비스타에 포함된 출시물인 다이렉트3D 10은 드라이버의 일부를 사용자 모드로 실행할 수 있게 해 IHV가 마슈팅을 구현함으로써 두 가지를 상대적 성능 패리티로 되돌릴 수 있게 한다.[19]Mac OS X의 OpenGL 시스템은 매우 유사하며, IHV는 OpenGL API의 단순한 버전(사용자 및 커널 모드 구성 요소 모두 포함)을 구현하고, 애플의 런타임 추가는 사용자 코드에 대한 직접 인터페이스를 제공하며, IHV의 작업을 용이하게 하기 위한 몇 가지 기본적인 작업을 제공한다.null
운전자 오버헤드 대비 경쟁
AMD에 의한 맨틀의 도입으로 API의 현대화에 대한 논의가 증가하였고, 모든 API가 사용하는 추상화 개념을 GPU(Graphics Processing Unit) 운영을 반영하기 위해 업데이트하였다.마이크로소프트와 OpenGL 벤더 모두 드라이버 오버헤드를 제한하거나 완전히 제거하는 비전(GPU 명령을 준비하기 위해 CPU가 수행해야 하는 작업량)을 제시하기 시작했다.null
2014년 3월에 마이크로소프트는 DirectX12 3D 구성요소에 대한 기본 가정과 목표를 제시하였다(2015년 12월 준비 예정).[20]OpenGL 벤더는 다른 접근 방식을 취했고, GDC 2014에서는 Nvidia, AMD, Intel의 구현에 이미 존재하는 빠른 경로를 보여주기 위해 OpenGL 4.3 & OpenGL 4.4 또는 이미 ARB 확장에 필수 기능을 혼합하여 제시하였다.[21]나중에 AMD가 Mantle을 Khronos 그룹에 기부했고, API는 Vulkan으로 이름이 바뀌었으며, 현재는 컴퓨팅 커널과 그래픽 셰이더의 통합 관리를 사용하여 여러 CPU와 GPU 코어 간에 작업을 더 잘 분배하는 동시에 드라이버 오버헤드를 줄이기 위해 전용의 현재의 교차 플랫폼 API이다.null
프리젠테이션 기간 동안, 유인원이 소개되었다.기존 API의 빠른 경로 탐색을 강조하는 문제에 대한 구체적인 솔루션을 마이크로벤치마킹하기 위한 새로운 툴이다.OpenGL 4.x와 Direct3D 11이 모두 지원된다.수집된 결과는 현대의 OpenGL이 Direct3D 11보다 몇 배 더 빠를 수 있다는 것을 보여주었다.[22]
구조
원래 강력한 SGI 워크스테이션용으로 설계된 OpenGL은 스테레오 렌더링과 이미징 서브셋과 같이 스테레오 렌더링과 이미징 서브셋과 같은 많은 기능을 포함하며, 비록 스테레오 게임이 소비자 수준의 3D 디스플레이의 개발로 더 많은 관심을 끌고 있지만, 일반적으로 게임에 제한적으로 사용된다고 여겨졌다.API는 전체적으로 약 250개의 통화를 포함하고 있지만, 100개의 부분 집합만이 게임 개발에 유용하다.[citation needed]그러나, 공식적인 게임별 하위 집합은 정의되지 않았다.3Dfx가 GLQuake 지원을 위한 미봉책으로 내놓은 MiniGL이 출발점으로 작용했을 수도 있지만, 스텐실 같은 추가 기능이 곧 게임에 채택되면서 풀 오픈GL 표준에 대한 지원이 이어졌다.오늘날 워크스테이션과 소비자 기계는 동일한 아키텍처와 운영 체제를 사용하며, 따라서 현대 버전의 OpenGL 표준은 특별한 워크스테이션급 비디오 카드만이 이러한 기능을 가속화하지만 여전히 이러한 기능을 포함하고 있다.null
확장
OpenGL 확장 메커니즘은 아마도 두 API들 사이에서 가장 논란이 많은 차이일 것이다.[citation needed]OpenGL은 어떤 드라이버라도 API에 자체 확장을 광고할 수 있는 메커니즘을 포함하고 있어, 혼합 모드, GPU로 데이터를 전송하는 새로운 방법, 또는 다른 텍스처 래핑 파라미터 등의 새로운 기능을 도입한다.이를 통해 새로운 기능이 빠르게 노출될 수 있지만 다른 벤더가 서로 다른 API로 유사한 확장을 구현할 경우 혼란을 초래할 수 있다.이러한 확장의 대부분은 OpenGL Architecture Review Board(ARB)에 의해 정기적으로 표준화되며, 일부는 향후 OpenGL 개정의 핵심 부분으로 만들어진다.null
반면 Direct3D는 한 벤더만 지정(Microsoft)하여 보다 일관된 API를 제공하지만 벤더별 기능에 대한 액세스는 거부한다.예를 들어 NVIDIA의 UltraShadow 기술은 작성 시점의 주식 Direct3D API에는 제공되지 않는다.[citation needed][when?]Direct3D는 FourCC를 통한 텍스처 포맷 확장을 지원한다.이것들은 한때 거의 알려지지 않았고 거의 사용되지 않았지만, 현재는 S3 텍스처 압축에 사용된다.null
그래픽 카드가 픽셀 셰이더(OpenGL에서 "파형 셰이더"로 알려져 있음)에 대한 지원을 추가하자 Direct3D는 GeForce 3 이상과 Radeon 8500 이상에서 광고한 호환성을 갖춘 "픽셀 셰이더 1.1"(PS1.1) 표준 하나를 제공했다.OpenGL에서는 다양한 사용자 지정 확장을 통해 동일한 기능에 액세스했다.null
이론적으로, 마이크로소프트의 접근방식은 두 가지 카드 브랜드 모두를 지원하는 하나의 코드 경로를 허용하는 반면, OpenGL에서는 프로그래머들이 두 개의 별도 시스템을 작성해야 한다.[clarification needed]그러나 실제로는 그러한 초기 카드의 픽셀 처리의 한계 때문에 픽셀 셰이더 1.1은 NVIDIA 특유의 OpenGL 확장자의 사이비 조립 언어 버전에 지나지 않았다.대부분의 경우 PS 1.1 기능을 주장하는 카드는 NVIDIA에 의한 것이었고, 그것은 PS 1.1 기능을 위해 기본적으로 제작되었기 때문이다.라데온 8500이 출시되자 마이크로소프트는 픽셀 셰이더 1.4가 포함된 Direct3D 업데이트를 발표했는데, 이는 ATI 전용 OpenGL 확장의 사이비 조립 언어 버전에 지나지 않았다.PS 1.4 지원을 주장한 유일한 카드는 ATI 카드였다. ATI 카드는 기능성을 실현하는 데 필요한 정밀한 하드웨어로 설계되었기 때문이다.null
이러한 상황은 두 API 하에서 짧은 시간 동안만 존재했다.2세대 픽셀 음영 카드는 각 아키텍처가 동일한 종류의 픽셀 처리 결론을 향해 진화하는 것과 훨씬 유사하게 기능했다.이와 같이 픽셀 셰이더 2.0은 Direct3D로 통일 코드 경로를 허용했다.비슷한 시기에 OpenGL은 자체 ARB 승인 정점 및 픽셀 셰이더 확장을 도입했다.GL_ARB_vertex_program
그리고GL_ARB_fragment_program
() 및 두 카드 세트 모두 이 표준을 지원했다.null
사용자
프로페셔널 그래픽스
오픈GL은 항상 다이렉트X보다 전문 그래픽 시장에서 더 많이 사용되어 왔으며, 다이렉트X는 주로 컴퓨터 게임에 사용된다.(프로페셔널이라는 용어는 생산된 그래픽이 프로페셔널이 아닌 최종 사용자의 개인적인 사용을 위한 게임과 반대로 컴퓨터 애니메이션 영화나 과학적인 시각화와 같은 그래픽의 전문적인 생산과 표시를 지칭하기 위해 여기서 사용된다.)현재 OpenGL과 DirectX는 대부분 공통적인 목적에 사용될 수 있는 기능성이 충분히 중복되어 있으며, 운영체제가 주로 사용되는 기준이 되기도 한다. DirectX는 Windows의 일반적인 선택이고, OpenGL은 다른 거의 모든 용도로 사용된다.일부 난해한 애플리케이션은 네트워크 연결에서 가속화된 3D를 수행하는 것은 예를 들어 OpenGL Extension이 있는 OpenGL에서 X Window 시스템(GLX)으로 직접 지원될 뿐이라는 두 API의 적용 가능성을 여전히 나눈다.null
과거에는 많은 전문 그래픽 카드가 OpenGL만 지원했다.2010년 현재, 윈도우 플랫폼에서 작동하는 거의 모든 프로페셔널 카드도 Direct3D를 지원할 것이다.이 중 일부는 SGI나 Suns와 같은 주로 유닉스 기반의 하드웨어에서 저비용의 PC 기반 시스템으로 전문 그래픽 시장의 변화를 가져왔으며, 이는 이 시장 부문에서 윈도우의 성장을 이끄는 동시에 리눅스나 Mac OS X를 실행하는 유닉스 기반의 소비자 시스템에서 OpenGL 소프트웨어의 새로운 시장을 제공하는 것이다.
오픈GL이 프로페셔널 시장에서 우위를 점한 주요 역사적 이유는 실적이었다.많은 전문 그래픽 애플리케이션(예: Softimage 3D, Alias PowerAnimator)은 원래 고급 SGI 워크스테이션용 IRIS GL에서 작성되었는데, 이 워크스테이션은 당시의 PC보다 그래픽적으로나 원시 CPU 전력으로 훨씬 성능이 뛰어났다.나중에, 개인용 컴퓨터가 일부 전문적인 그래픽 애플리케이션을 실행할 수 있을 만큼 강력한 시스템으로 진화하고 있을 때에도, 이들 중 많은 것들이 OpenGL에 포팅되었다.예를 들어 사용자들은 SGI나 Windows 기반 개인용 컴퓨터(그리고 오늘날 Linux, Mac OS X, Windows)에서 Alias PowerAnimator의 후계자를 실행할 수 있었다.가격 경쟁은 결국 SGI의 시장 지배력을 무너뜨렸지만, OpenGL 소프트웨어 엔지니어의 확립된 기반과 Apple, Linux 및 기타 운영 체제에서 OpenGL의 사용자 기반을 넓힌 결과 DirectX와 OpenGL 모두 실행 가능한, 널리 보급된 API를 제공하는 시장이 되었다.null
OpenGL이 역사적인 강점을 보인 또 다른 이유는 마케팅과 디자인이었다.다이렉트X는 전문 그래픽 어플리케이션용으로 판매되지 않았던 APIs 세트다.사실, 그것들은 그런 용도로 만들어지지도 않았다.DirectX는 게임 개발을 목적으로 널리 이용 가능한 저성능 소비자 가격 그래픽 하드웨어에 대한 낮은 수준의 고성능 액세스를 위해 설계된 API였다.OpenGL은 훨씬 더 범용적인 3D API로, 일반 소비자의 범위에서 훨씬 벗어난 로우엔드 범용 그래픽 카드에서 전문적이고 과학적인 그래픽 시각화까지 모든 범위의 그래픽 하드웨어를 대상으로 하며, 특정 유형의 사용자에게 반드시 배타적이지 않은 기능을 제공한다.null
게임 개발자들은 일반적으로 전문 그래픽 시스템 개발자들만큼 광범위한 API를 요구하지 않았다.많은 게임들은 오버레이 평면, 스텐실 등을 필요로 하지 않지만, 이것이 일부 게임 개발자들이 사용 가능할 때 그것을 사용하는 것을 막지는 못했다.구체적으로, 게임 디자이너들은 OpenGL 표준의 특정 부분에서 요구되는 픽셀 불변성에 거의 관심을 갖지 않는데, 이는 반대로 필름과 컴퓨터 지원 모델링에 매우 유용하다.null
한때 SGI와 마이크로소프트에 의해 OpenGL과 DirectX를 합병하려는 시도가 있었다.Fahrenheit 그래픽 API는 DirectX의 광범위한 저수준 지원과 함께 OpenGL의 하이엔드 능력을 모두 결합하기 위한 것이었다.마이크로소프트는 결국 렌더링 엔진의 일부를 생산하기에 충분한 자원을 할당하지 않고 프로젝트에서 물러났다.이러한 움직임은 파렌헤이트 API가 사실상의 표준 그래픽 API가 될 경우 손실될 Windows-DirectX 플랫폼에 개발자들의 잠금을 보장하기 위해 광범위하게 행해졌다.그러나, 파렌헤이트는 DirectX에 많은 개선을 가져왔고, 파렌헤이트의 주요 건축가는 현재 DirectX에 있는 마이크로소프트에서 일하고 있다.[citation needed]null
게임
3D 가속 게임 초기에는 성능과 신뢰성이 핵심 벤치마크였으며 여러 3D 가속기 카드가 우위를 다투었다.소프트웨어는 특정 상표의 그래픽 카드를 위해 쓰여졌다.그러나, 수년 동안 OpenGL과 Direct3D는 하드웨어 이상의 소프트웨어 계층으로 등장했는데, 주로 크로스 하드웨어 그래픽 라이브러리에 대한 업계의 지원 때문이었다.각 게임 개발자들이 둘 중 하나를 선택하게 되면서 두 사람의 경쟁은 고조되었다.null
3D 가속 게임 초기에는 대부분의 벤더가 완전한 OpenGL 드라이버를 공급하지 않았다.그 이유는 두 가지였다.첫째로, 대부분의 소비자 지향 가속기는 OpenGL을 적절하게 가속할 수 있는 충분한 기능을 구현하지 못했다.둘째, 많은 벤더가 성능과 호환성이 우수한 완전한 OpenGL 드라이버를 구현하기 위해 애썼다.대신, 그들은 GLQuake (그리고 후에 다른 OpenGL 게임들, 주로 퀘이크 엔진에 기반한)을 실행하기에 충분한 OpenGL의 서브셋만을 구현한 MiniGL 드라이버를 작성했다.하드웨어가 진화하면서 제대로 된 OpenGL 드라이버가 더 널리 보급되었고, 소비자 지향 가속기는 OpenGL이 원래 설계되었던 SGI 시스템을 따라잡았다.이것은 DirectX 6 또는 DirectX 7 무렵이 될 것이다.
콘솔에서는 일부 콘솔(예: PS3)이 기본 API 주위에 OpenGL 래퍼를 제공하는 등 세계 독점 네이티브 API가 지배적이다.기존 Xbox는 Direct3D 8.1을 기본 API로, Xbox 360은 DirectX9를[23] 기본 API로 지원했다.대부분의 콘솔 개발자들은 성능을 극대화하기 위해 콘솔마다 네이티브 API를 사용하는 것을 선호하기 때문에 OpenGL과 Direct3D 비교는 대부분 PC 플랫폼과 관련이 있다.null
휴대 전화 및 기타 임베디드 장치
![]() | 이 구간은 확장이 필요하다.추가하면 도움이 된다.(2010년 7월) |
OpenGL ES라고 불리는 OpenGL for Embedded Systems는 임베디드 장치를 위해 설계된 OpenGL 3D 그래픽 API의 하위 집합이다.다양한 버전의 스마트폰 운영체제는 안드로이드, iOS(iPad, iPhone, iPod Touch), 마에모(Nokia N900), 심비안 등 OpenGL ES를 지원한다.null
OpenGL ES는 OpenGL ES 1.0, 1.1, 2.0, 3.0, 3.1, 3.2의 6가지 모델로 제공된다.2.0의 출시는 GL ES 1.0 및 1.1의 고정 파이프라인 기능에 걸쳐 GL ES 2.0에서 사용할 수 있는 광범위한 프로그램 가능 파이프라인 기능 때문에 이전 버전과의 역호환성을 제거했다.OpenGL ES 3.0은 OpenGL ES 2.0보다 새로운 하드웨어가 필요했고, OpenGL ES 3.1은 소프트웨어 업데이트로서 새로운 드라이버만 필요했다.null
Direct3D 파생 모델인 Direct3D Mobile은 Windows CE가 지원한다.[24]현재 모든 Windows Phone 7 기기는 를 사용한다.퀄컴이 Adreno 200/205 통합 GPU에서 Direct3D Mobile 9에 의해 가속화된 NET Framework UInull
윈도폰 8은 Direct3D 11을 구현한다(피쳐 레벨 9_3으로 제한됨).[25]null
참조
- ^ "DevBlogs - Microsoft Developer Blogs".
- ^ a b "Microsoft DirectX License". legal.ubi.com. Retrieved 2015-07-21.
- ^ a b "About The Khronos Group - The Khronos Group Inc".
- ^ "OpenGL ES Overview - The Khronos Group Inc".
- ^ [1]
- ^ "Getting Started with Direct3D - Windows app development". msdn.microsoft.com. Retrieved 2015-07-21.
- ^ "Khronos Logos, Trademarks, and Guidelines". Khronos Group. Khronos Group. June 2016. Retrieved 25 July 2016.
- ^ Group, Khronos. "OpenGL Overview". www.opengl.org. Retrieved 2015-07-21.
- ^ idr: OpenGL 3 및 Mesa: X.Org Wiki - 이벤트/XDC2009/Notes.2011년 10월 28일 회수
- ^ Windows Vista 및 OpenGL - 사실, OpenGL 파이프라인 뉴스레터, 2007년 4월 20일자 003면.
- ^ "Archived copy". Archived from the original on 2011-09-13. Retrieved 2011-09-04.
{{cite web}}
: CS1 maint: 타이틀로 보관된 사본(링크) - ^ "ANGLE: Almost Native Graphics Layer Engine". code.google.com. Retrieved 2015-07-21.
- ^ "John Carmack's .plan 12/23/96". December 23, 1996.
- ^ "The Search for a Standard". Next Generation. No. 37. Imagine Media. January 1998. p. 82.
- ^ a b 크리스 헤커 1997년 4월~5월호 게임 개발자 매거진 '마이크로소프트에게 보내는 공개서한'
- ^ Khronos 그룹 - OpenGL - 언어 바인딩
- ^ Spinellis, Diomidis (2006). Code Quality: The Open Source Perspective. Addison Wesley. pp. 182–183. ISBN 0-321-16607-8.
- ^ DrawPrimitive에게 한 번의 통화를 사용하는 것이 더 나은가 아니면 많은 통화를 사용하는 것이 더 나은가?Wayback Machine Nexe에 2006-09-06 보관
- ^ Windows Vista의 그래픽 API
- ^ DirectX 12
- ^ https://www.khronos.org/assets/uploads/developers/library/2014-gdc/Khronos-OpenGL-Efficiency-GDC-Mar14.pdf OpenGL 효율성: AZDO
- ^ "Approaching zero driver overhead".
- ^ "DevBlogs - Microsoft Developer Blogs".
- ^ Direct3D Mobile, Microsoft, 2010년 1월 6일.
- ^ [2] Windows Phone 8에 대한 셰이더 모델 지원.