내 질문은 : 왜 오픈 gl, sfml, sdl과 같은 것을 사용하여 귀찮게하면 단순히 버퍼를 할당하고 비트 맵을 전달하고 화면에 그리는 것입니까?
짧음 : 빠르기 때문에 (OpenGL, DirectX).
긴:
이 모든 것을 스스로 할 수 있다고 생각할 수도 있습니다. 화면에 픽셀을 그립니다. 사각형이나 삼각형과 같은 모양을 그리기 위해 작은 라이브러리를 작성할 수 있습니다. 이것은 물론 작동합니다. 정확하게이 작업을 수행 할 라이브러리가 많이 있습니다. 그들 중 일부는 심지어 Casey Muratori가하는 일을 정확하게 수행하는 OpenGL 사양 (opengl의 소프트웨어 측면과 유사)도 구현합니다. 소프트웨어 측의 모든 것을 계산하고 소프트웨어 측의 픽셀을 설정 한 후 결과를 화면에 씁니다.
그러나 이것은 느립니다 . 이 모든 것을 결국 실행할 CPU는이 시나리오를 위해 만들어지지 않았습니다. 그것이 GPU의 목적입니다. OpenGL이하는 것은 (물론 소프트웨어 구현이 아닌 한) 모든 데이터, 모든 드로우 콜, 거의 모든 것을 그래픽 카드에 푸시하고 GPU 에게 작업을 수행하도록 지시하는 모든 것을 취합니다 . GPU는 이러한 종류의 작업을 위해 특별히 만들어졌습니다. 부동 소수점 숫자 곱하기 ( 3D 장면을 그릴 때 많이하는 일)와 셰이더를 실행합니다. 그리고 이것은 동시에. GPU 속도를 파악하려면 1920x1080 픽셀의 전체 화면에서 3D로 간단한 장면을 생각해보십시오. 이들은 곱하기 2,073,600 픽셀을 곱한 것입니다. 대한 매일픽셀의 경우 GPU는 조각 셰이더 를 한 번 이상 , 대부분 두 번 이상 실행합니다. 이제 초당 60 프레임으로 실행한다고 가정하겠습니다. 즉, GPU는 초당 2,073,600 * 60 = 124,416,000 회 조각 셰이더를 실행합니다 . CPU에서 이와 같은 작업을 수행 할 수 있다고 생각하십니까? (이것은 아주 간단한 설명이므로, 더 가까운 객체로 얼마나 많은 픽셀을 오버로딩 하는지, 얼마나 많은 MSAA를 사용하는지 등으로 고려해야 할 것이 더 있지만, 초당 124,416,000 번 이 가장 낮을 것입니다. 간단한 장면에서 60fps 이상을 쉽게 가질 수 있습니다)
OpenGL과 Direct3D의 기능은 @Uri Popovs가 대답하는 엔진입니다.