OpenGL 지원을 확인하는 설치 프로그램을 작성하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/126028

문제

OpenGL을 사용하는 3D 뷰어가 있지만 고객은 때때로 "작동하지 않는"것에 대해 불평합니다. 우리는 이러한 문제의 대부분이 Businiss 노트북 컴퓨터에서 실제로 현대 3D 실시간 게임의 사용을 시도하는 것으로 의심됩니다.

우리가 사용하는 Windows MSI 설치 프로그램에서 OpenGL에 대한 지원을 확인하는 방법은 무엇입니까?

그리고 부수적으로, "OpenGL 지원 그래픽 카드 목록"에 답할 수 있다면, 그것은 또한 위대한 일입니다. Google이 여기서 도움이되지 않는다는 것이 이상합니다 ..

도움이 되었습니까?

해결책

고객이 "작동하지 않는다"는 의미에 따라 다릅니다. 그것은 다음 중 하나 일 수 있습니다.

  1. OpenGL 지원이 부족하여 설치/출시되지 않습니다.
  2. 발사되지만 더 충돌합니다.
  3. 발사되고 충돌하지 않지만 렌더링은 손상되었습니다.
  4. 모든 것을 올바르게 시작하고 렌더링하지만 성능은 끔찍합니다.

모든 Windows 버전 (95 년 이후)에는 OpenGL 지원이 내장되어 있습니다. 따라서 신청이 아니라면 상황 1) 위의 상황을 일으키지 않을 것입니다. 필요합니다 더 높은 OpenGL 버전.

그러나 기본 OpenGL 구현은 OpenGL 1.1입니다. 소프트웨어 렌더링. 사용자가 OpenGL 지원이있는 드라이버를 수동으로 설치하지 않은 경우 (NVIDIA/AMD/Intel 사이트에서 다운로드 한 드라이버에는 OpenGL이 있습니다),이 느리고 이전 구현에 기본값이됩니다. 이것은 위의 상황 3)과 4)를 유발할 가능성이 높습니다.

OpenGL을 사용할 수 있더라도 Windows OpenGL 드라이버는 매우 강력하지 않습니다. 운전자의 다양한 버그는 상황을 유발할 가능성이 높습니다. 2), 유효한 일을하면 운전자에게 충돌이 발생합니다.

다음은 더미 OpenGL 컨텍스트를 작성하고 정보를 검색하는 C ++/Winapi 코드 스 니펫입니다 (GL 버전, 그래픽 카드 이름, 확장자 등).

// setup minimal required GL
HWND wnd = CreateWindow(
    "STATIC",
    "GL",
    WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
    0, 0, 16, 16,
    NULL, NULL,
    AfxGetInstanceHandle(), NULL );
HDC dc = GetDC( wnd );

PIXELFORMATDESCRIPTOR pfd = {
    sizeof(PIXELFORMATDESCRIPTOR), 1,
    PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,
    PFD_TYPE_RGBA, 32,
    0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0,
    16, 0,
    0, PFD_MAIN_PLANE, 0, 0, 0, 0
};

int fmt = ChoosePixelFormat( dc, &pfd );
SetPixelFormat( dc, fmt, &pfd );

HGLRC rc = wglCreateContext( dc );
wglMakeCurrent( dc, rc );

// get information
const char* vendor = (const char*)glGetString(GL_VENDOR);
const char* renderer = (const char*)glGetString(GL_RENDERER);
const char* extensions = (const char*)glGetString(GL_EXTENSIONS);
const char* version = (const char*)glGetString(GL_VERSION);

// DO SOMETHING WITH THOSE STRINGS HERE!

// cleanup
wglDeleteContext( rc );
ReleaseDC( wnd, dc );
DestroyWindow( wnd );

어떻게 든 해당 코드를 설치 프로그램이나 응용 프로그램에 꽂고 적어도 GL 버전을 1.1임을 확인할 수 있습니다. 이것은 "드라이버가 설치되지 않은"상황을 감지합니다. 실제 OpenGL 드라이버 버그를 해결하려면 글쎄요. 많은 일.

다른 팁

지난 10 년 이내에 만들어진 모든 랩톱이이를 제공한다고 가정하는 것이 매우 안전하기 때문에 OpenGL에 대한 하드웨어 지원을 간단히 확인하는 데 의존하는 데 문제가있을 수 있다고 생각합니다. (이 노트북이 진정으로 그렇게 오래된 경우 이 위키 도움이 될 수 있습니까?)

그러나 프로그램이 그래픽 집중적 인 경우 단지 고객 시스템이 처음부터 긁히는지 확인하기 위해 작은 벤치 마크 프로그램을 권장 할 것입니다. 당신은 시도 할 수 있습니다 여기, 기존 벤치 마크 도구 중 하나를 사용하여 도움을 줄 수 있는지 확인하려면 프로그램에 대해 특별히 프로그램을 작성하려고 시도 할 수 있습니다. 예를 들어 FPS 및 FPS 및 레코드 정보로 프로그램을 실행하는 것을 시뮬레이션하는 것보다 작은 테스트 스크립트를 작성할 수 있습니다. 곧.
전자의 경우 테스트를 MSI 설치 프로그램에 통합 할 수는 있지만 이런 종류의 경험이 없었습니다.

이것들이 유용하다는 것을 알기를 바랍니다.

OpenGL은 Windows NT 또는 Win95 이후 Windows의 일부입니다. OpenGL이 사전 설치되지 않은 Windows 시스템을 찾을 수는 없습니다 (예 : Windows 3.1).

그러나 응용 프로그램에는 매우 오래된 버전의 Windows와 함께 제공되는 Default OpenGL 1.1보다 최신 버전의 OpenGL이 필요할 수 있습니다. 프로그램에서 확인할 수 있습니다. 나는 MSI에서 그것을 찾는 방법을 모른다.

OpenGL은 서비스 팩 등을 설치하지 않고 그래픽 드라이버를 통해 업데이트됩니다.

OpenGL 활성화 그래픽 카드와 관련하여 : 모두 OpenGL이 있습니다. 고객이 석기 시대의 ISA ET4000 그래픽 카드를 사용하더라도 소프트웨어 렌더링을 통해 최소한 OpenGL 1.1을 갖습니다.

Windows는 OpenGL 1.1을 지원합니다 (다른 사람들이 언급 한 바와 같이). 따라서 사용자가 직면 한 문제는 1.1 이후 OpenGL에 추가 된 확장으로 인한 것입니다. GLEW 라이브러리를 사용하는 경우 프로그래밍 방식으로 사용하는 모든 확장 기능에 대한 지원을 쉽게 확인할 수 있습니다. 폐색 쿼리 지원을 확인하는 방법은 다음과 같습니다.

if (GLEW_OK != glewInit())
{
    // GLEW failed!
    exit(1);
}

// Check if required extensions are supported
if (!GLEW_ARB_occlusion_query)
    cout << "Occlusion query not supported" << endl;

GLEW 사용에 대한 자세한 내용은 참조하십시오 여기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top