|
|

楼主 |
发表于 2008-1-6 00:50:00
|
显示全部楼层
Re:为什么OPENGL程序初始化那么慢?
testerHooK兄太激动了,我又没说OPENGL差,不然我怎么会学DIRECTX学得好好的又跑来学OPENGL,其实我最讨厌的就是DIRECTX,要想用他都要初始化半天
楼上两位,以下代码,够精简吧,够客观吧,很多东西都没初始化,但是,运行程序后鼠标一直处于繁忙状态,过一段时间才能正常
#include <windows.h>
#include <glew.h>
#include <glut.h>
HDC hDC=0;
HGLRC hRC=0;
LRESULT CALLBACK wndproc(HWND hwnd,UINT umsg,WPARAM wparam,LPARAM lparam)
{
switch(umsg)
{
case WM_DESTROY:
wglMakeCurrent(NULL,NULL);
wglDeleteContext(hRC);
ReleaseDC(hwnd,hDC);
PostQuitMessage(0);
default:
return DefWindowProc(hwnd,umsg,wparam,lparam);
}
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
HWND hwnd;MSG msg;WNDCLASS wc;
ZeroMemory(&wc,sizeof wc);
wc.hCursor=LoadCursor(0,IDC_ARROW);
wc.hInstance=hInstance;
wc.lpfnWndProc=wndproc;
wc.lpszClassName="classname";
wc.style=CS_HREDRAW|CS_VREDRAW;
RegisterClass(&wc);
hwnd=CreateWindow("classname","WINDOWS XP",WS_VISIBLE|WS_OVERLAPPEDWINDOW,0,0,800,600,0,0,hInstance,0);
GLuint PixelFormat;
PIXELFORMATDESCRIPTOR pfd;
sizeof(&pfd,sizeof pfd);
pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion=1;
pfd.dwFlags=(PFD_DRAW_TO_WINDOW |PFD_SUPPORT_OPENGL |PFD_DOUBLEBUFFER);
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.cColorBits=16;
pfd.cDepthBits=16;
pfd.dwLayerMask=PFD_MAIN_PLANE;
hDC=GetDC(hwnd);
PixelFormat=ChoosePixelFormat(hDC,&pfd);
SetPixelFormat(hDC,PixelFormat,&pfd);
hRC=wglCreateContext(hDC);
wglMakeCurrent(hDC,hRC);
glViewport(0,0,800,600);
glMatrixMode(GL_PROJECTION);
gluPerspective(45,(float)4/3,1,100);
glMatrixMode(GL_MODELVIEW);
glClearColor(0,0,0,1);
for(;;)
{
if (PeekMessage(&msg,0,0,0,PM_REMOVE))
{
if (msg.message==WM_QUIT)break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
SwapBuffers(hDC);
}
UnregisterClass("classname",hInstance);
return msg.wParam;
}
不用API函数,仅仅创建个窗口,也那么慢,为什么?
#include <windows.h>
#include <glut.h>
void main(int a,char **b)
{
glutInit(&a,b);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB|GLUT_DEPTH);
glutInitWindowPosition(0,0);
glutInitWindowSize(800,600);
glutCreateWindow("1");
glutMainLoop();
} |
|