成都到阆中自驾游线路:OPENGL 初始化问题!急!答对追加200分!

来源:百度文库 编辑:神马品牌网 时间:2024/04/25 13:33:17
我直接写API代码创建一个空白窗口,在上面初始化OPENGL,每次PAINT的时候把屏幕刷成蓝色。但是编译通过以后,运行时占用CPU资源十分巨大!而且窗口还很卡,拖都拖不动了,高手帮我检查一下代码好吗?如果可以的话帮我修改成正常的,或提供一个可以正常运行的代码
PS: 我不想用GLUT

#include <windows.h>
#include <gl\gl.h>
#include <gl\glu.h>

static HGLRC hRC = NULL;
static HDC hDC = NULL;

void SetupOpenGL(HDC hDC)
{
int nPixelFormat;
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,
32,
0,0,
PFD_MAIN_PLANE,
0,
0,0,0 };

nPixelFormat = ChoosePixelFormat(hDC, &pfd);
SetPixelFormat(hDC, nPixelFormat, &pfd);

hRC = wglCreateContext(hDC);
wglMakeCurrent(hDC, hRC);

glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);

glClearColor(0,0,1,0.5);
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
hDC = NULL;

switch(message)
{
case WM_CREATE:
hDC = GetDC(hWnd);
SetupOpenGL(hDC);
break;
case WM_PAINT:
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
break;
case WM_DESTROY:
wglMakeCurrent(hDC,NULL);
wglDeleteContext(hRC);
PostQuitMessage(0);
break;
default:
return (DefWindowProc(hWnd,message,wParam, lParam));
}

return (0L);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
MSG msg;
WNDCLASS wc;
HWND hWnd;

wc.style = 0 ;
wc.lpfnWndProc = (WNDPROC)WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
LOGBRUSH Brush;
Brush.lbColor=GetSysColor(COLOR_BTNFACE);
Brush.lbHatch=0;
Brush.lbStyle=BS_SOLID;
wc.hbrBackground = CreateBrushIndirect(&Brush);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("KGUI_Demo");

if(RegisterClass(&wc) == 0)
{
return 0;
}

hWnd = CreateWindowW( TEXT("KGUI_Demo"),TEXT("KGUI Demo"), WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_BORDER | WS_SYSMENU | WS_MINIMIZEBOX , 100,100,800,600, NULL,NULL,hInstance,NULL);

if(hWnd == NULL)
{
return 0;
}

ShowWindow(hWnd, SW_SHOW);

while( GetMessageW(&msg, NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}

return (int)msg.wParam;
}

不晓得啊