vista下的opengl问题

时间:2008-10-16 11:59:57

标签: opengl windows-vista

我刚开始使用opengl,但我遇到了一些奇怪的行为。

下面我发布的代码在xp中运行良好,但在vista上它只渲染黑屏。

很抱歉发布了异常(就这个主板而言)长码。

是否有一些非常具体的东西在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);
}

2 个答案:

答案 0 :(得分:1)

该怎么办?根据您在那里发布的代码,除了显示黑屏外,它不应该做任何事情。你期望发生什么?

我唯一看到的是你正在设置glClearColor,但你永远不会调用glClear所以不会做任何事情。

答案 1 :(得分:0)

尝试PFD_SUPPORT_COMPOSITION

如果失败,请发布DescribePixelFormatglGetString(GL_RENDERER);的结果,以帮助诊断问题。