我刚开始使用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);
}
答案 0 :(得分:1)
该怎么办?根据您在那里发布的代码,除了显示黑屏外,它不应该做任何事情。你期望发生什么?
我唯一看到的是你正在设置glClearColor,但你永远不会调用glClear所以不会做任何事情。
答案 1 :(得分:0)
尝试PFD_SUPPORT_COMPOSITION
。
如果失败,请发布DescribePixelFormat
和glGetString(GL_RENDERER);
的结果,以帮助诊断问题。