2

OpenGLの優れた例では、次の方法でWindows固有の拡張機能を読み取ることができると書かれています。

//Type defined in the book as char, but that is not what glGetString returns...
const GLubyte *extensions = glGetString(GL_EXTENSIONS);
if(strstr(extensions, "WGL_EXT_swap_control") != NULL)
{
    wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
    if(wglSwapIntervalEXT != NULL)
        wglSwapIntervalEXT(1);
}

strstrかかりませんGLubyte。どうすればこれを機能させることができますか?

4

2 に答える 2

4

の戻り値をglGetStringconstcharポインターにキャストして、お気に入りの文字列処理関数を使用できます。

しかし、実際には、拡張機能を管理するために、GLEWなどのライブラリを使用することをお勧めします。

于 2012-07-03T16:43:37.540 に答える
4

glGetString(GL_EXTENSIONS)は、ビデオ カードでサポートされているほとんどの拡張子 (スペースで区切られています) を返します。ただし、Windows 固有のWGL_拡張機能 (OpenGL バージョン 3.0+ 用) は、この呼び出しには含まれていません。wglGetExtensionsString(HDC)また、カードでサポートされている残りの WGL 拡張機能を取得するためにも呼び出す必要があります。

コード スニペットを次に示します ( ARBサフィックスを削除してもかまいません)。

#include <windows.h>
#include <iostream>
#include <GL/gl.h>

// function ptr: WGL specific extensions for v3.0+
typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
PFNWGLGETEXTENSIONSSTRINGARBPROC  pwglGetExtensionsStringARB = 0;
#define wglGetExtensionsStringARB pwglGetExtensionsStringARB
...

// get WGL specific extensions for v3.0+
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB");
if(wglGetExtensionsStringARB)
{
    const char* str = wglGetExtensionsStringARB(hdc);
    if(str)
    {
        std::cout << str << std::endl;
    }
}

wglGetExtensionsString()パラメータとして現在のウィンドウ表示の HDC (Handle to Device Context) が必要であることに注意してください。HDC はウィンドウ ハンドル (HWND) から取得できます。

HDC hdc = ::GetDC(hwnd);
于 2012-07-04T13:54:00.940 に答える