2017-09-30 7 views
1

매우 기본적인 OpenGL C++ 프로그램 (Linux 64 비트)을 작성하고 있습니다.비디오 카드가없는 경우 OpenGL 쉐이더를 실행하는 사람

  • 메인 C++ 프로그램
  • 정점 셰이더
  • 단편 쉐이더

2- 쉐이더 런타임시 컴파일 :

는 사실, (3 개) 프로그램을 갖는다. 나는이 프로그램이 GPU에 의해 비디오 카드에서 병렬로 실행된다고 생각한다.

제 컴퓨터에 GPU가없는 매우 기본적인 비디오 카드가 포함되어 있다면 어떻게됩니까?

"3d acceleration"이 비활성화 된 상태에서 VirtualBox에서 프로그램을 실행하려고 시도했지만 프로그램이 작동합니다!

GPU가없는 경우 OpenGL이 비디오 카드를 감지하고 CPU에서 자동으로 쉐이더를 실행한다는 의미입니까?

+0

아마도 관련 [OpenGL 소프트웨어 렌더링 대안] (https://stackoverflow.com/questions/10431591/opengl-software-rendering-alternatives). – VTT

답변

1

OpenGL은 표준에 불과하며 그 표준에는 다른 구현이 있습니다. 일반적으로 GPU를 사용하려는 그래픽 드라이버가 제공하는 구현에 의존합니다.

그러나 대부분의 데스크톱 리눅스 배포판에는 OpenGL을 지원하는 비디오 드라이버가 설치되어 있지 않은 경우에 사용되는 Mesa라는 OpenGL 소프트웨어 구현이 포함되어 있습니다. (요즘은 비디오 하드웨어, CPU에 통합 된 비디오, OpenGL 쉐이더를 지원하지 않는 비디오 하드웨어를 찾는 것은 매우 드물지만 Linux 드라이버에서 문제가 될 수 있으며, VM이 하드웨어 가속을 사용할 수 있도록하지 않습니다.)

쉐이더가 CPU에서 실행될 수 있지만 그럴 수도 있고 그렇지 않을 수도 있습니다. 자동이거나 그렇지 않을 수도 있습니다. 비디오 드라이버 (또는 다른 OpenGL 구현) 설치했다.

+0

그리고 GPU 메모리 (또는 계산 리소스) 제한을 어떻게 볼 수 있습니까? 예를 들어 정점이 많이 필요한 프로그램의 여러 인스턴스를 실행하면 어떻게됩니까? – Bob5421

+0

불행히도 OpenGL은 사용 가능한 GPU 메모리를 쿼리하는 방법을 제공하지 않습니다. 비디오 RAM의 한계를 뛰어 넘을 때 정확하게 일어나는 것은 정점을로드하는 데 사용하는 방법에 따라 다릅니다. Video RAM이 가득차면 GPU가 정상 RAM에서 자동으로 페이지를 처리하도록 할 수는 있지만 그 자체로 별도의 토론입니다. – matthewscottgordon

+0

다양한 구현 매개 변수를 쿼리하는 함수가 있습니다. 예를 들어, glGetIntegerv (GL_MAX_VERTEX_ATTRIBS, ...)는 구현에서 각 정점이 가질 수있는 속성 수를 알려줍니다.불행하게도, 이러한 매개 변수는 구현이 할 수있는 것을 알려주고, 특정 제한 내에 있거나 특정 방식으로 구조화하면 구현이 ** 더 잘 수행됩니다 **. 다른 하드웨어에서 테스트하는 것이 OpenGL 프로그램의 성능을 확인하는 유일한 방법입니다. – matthewscottgordon

0

현대의 모든 컴퓨터에는 GPU이 있습니다. NVidia 또는 AMD와 같은 공급 업체의 전용 GPU 카드가없는 경우 인텔 또는 다른 컴퓨터 하드웨어 제조업체가 "온보드"또는 integrated video chip을 사용하게 될 것입니다. 좋은 점은 오늘날 온보드 GPU조차도 꽤 좋다는 것입니다 (인텔은 마침내 좋은 일을 시작했습니다). PC의 하드웨어가 이미 프로그래밍 가능한 OpenGL 버전을 지원할 가능성이 높습니다. 글쎄요, 최신 버전이 아닌, 개인적인 경험으로 볼 때 2 ~ 3 년 전 인텔의 온보드 GPU의 대부분은 OpenGL 4.1/4.2까지 지원해야합니다. 정말 오래된 하드웨어에서 실행하지 않는 한, GPU 가속 API에 대한 완전한 액세스 권한이 있어야합니다. 그렇지 않으면 Mesa library이 OpenGL API의 소프트웨어 (GPU 가속화가 아닌) 구현과 함께 제공됩니다.