0

openglを使い始めたばかりですが、奇妙な動作に遭遇しました。

以下に、xpで適切に実行されるコードを投稿しましたが、vistaでは黒い画面しか表示されません。

(このボードに関しては)異常に長いコードを投稿して申し訳ありません。

ビスタでglを開くために非常に特別なものはありますか?ありがとう。

#include<windows.h>
#include<gl\gl.h>
#include<gl\glu.h>
#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glu32.lib")

void InitGL(void)
{
glClearColor(1,0.3f,0.3f,0.3f);
}

void DrawGLScene(void)
{
/* code removed */
}

HGLRC hRC = NULL;
HDC hDC = NULL;
HWND hWnd = NULL;
HINSTANCE hInstance = NULL;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

bool CreateGLWindow(char* title, int width, int height)
{
GLuint PixelFormat;
WNDCLASS wc;
RECT WindowRect;
WindowRect.left = (long)0;
WindowRect.right = (long)width;
WindowRect.top = (long)0;
WindowRect.bottom = (long)height;
LPCSTR nazwa = TEXT("Start");

hInstance = GetModuleHandle(NULL);
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = nazwa;

RegisterClass(&wc);

hWnd = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_WINDOWEDGE, nazwa,
                      nazwa,
                      WS_SYSMENU |
                      WS_CLIPSIBLINGS |
                      WS_CLIPCHILDREN,
                      0,0,
                      width,
                      height,
                      NULL,
                      NULL,
                      hInstance,
                      NULL);

static PIXELFORMATDESCRIPTOR pfd = 
{
    sizeof(PIXELFORMATDESCRIPTOR),
    1,
    PFD_DRAW_TO_WINDOW |
    PFD_SUPPORT_OPENGL |
    PFD_DOUBLEBUFFER,
    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
};

hDC = GetDC(hWnd);
PixelFormat = ChoosePixelFormat(hDC, &pfd);
HRESULT rez = SetPixelFormat(hDC, PixelFormat, &pfd);
hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);
ShowWindow(hWnd, SW_SHOW);
InitGL();
return true;

}

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch(uMsg)
{
case WM_ACTIVATE:
    {
        return 0;
    }
case WM_CLOSE:
    {
        PostQuitMessage(0);
        return 0;
    }
}

return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
int nCmdShow)
{
MSG msg;
bool done = false;

if (!CreateGLWindow(NULL, 800,600))
{
    return 0;
}

while(!done)
{
    if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
    {
        if (!GetMessage(&msg, 0, 0, 0)) done = true;
        else {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    else
    {
        DrawGLScene();
        SwapBuffers(hDC);
    }
}

return (msg.wParam);
}
4

2 に答える 2

1

それは何をすることになっていますか?そこに投稿したコードによると、黒い画面を表示する以外は何もしないはずです。何が起こると思いますか?

私が見る唯一のことは、glClearColorを設定しているということですが、glClearを呼び出すことは決してないので、何もしません。

于 2008-10-16T12:29:10.357 に答える
0

試してみてくださいPFD_SUPPORT_COMPOSITION

DescribePixelFormatそれが失敗した場合は、の結果を投稿してglGetString(GL_RENDERER);、問題の診断に役立ててください。

于 2008-10-16T12:22:15.580 に答える