#include "ggl.h"
#include "scene.h"
#pragma comment(lib,"opengl32.lib")
#pragma comment(lib,"glu32.lib")
//LRESULT CAllBACK GLWindowProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
//{
// switch(msg)
// {
// case WM_CLOSE:
// PostQuitMessage(0);
// return 0;
// }
// return DefWindowProc(hwnd,msg,wParam,lParam);
//}
unsigned char * LoadFileContent(const char *path, int &filesize) {
unsigned char*fileContent = nullptr;
filesize = 0;
FILE*pFile = fopen(path, "rb");
if (pFile) {
fseek(pFile, 0, SEEK_END);
int nLen = ftell(pFile);
if (nLen > 0) {
rewind(pFile);
fileContent = new unsigned char[nLen + 1];
fread(fileContent, sizeof(unsigned char), nLen, pFile);
fileContent[nLen] = '\0';
filesize = nLen;
}
fclose(pFile);
}
return fileContent;
}
LRESULT CALLBACK GLWindowProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg)
{
case WM_CLOSE:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd,msg,wParam,lParam);
}
INT WINAPI WinMain(HINSTANCE hinstance,HINSTANCE hPreInstance,LPSTR IpCmdLine,int nShowCmd)
{
//注册窗口
WNDCLASSEX wndclass;
wndclass.cbClsExtra=0;//额外空间
wndclass.cbSize=sizeof(WNDCLASSEX); //实际空间
wndclass.cbWndExtra=0;//额外内存
wndclass.hbrBackground=NULL;//背景设置
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);//光标设置为箭头
wndclass.hIcon=NULL; //程序图标
wndclass.hIconSm=NULL; //
wndclass.hInstance=hinstance;
wndclass.lpfnWndProc=GLWindowProc; //用户操作
wndclass.lpszClassName=L"GLWindow"; //注册窗口名称
wndclass.lpszMenuName=NULL;//菜单名称
wndclass.style= CS_VREDRAW|CS_HREDRAW; //重绘时采用的方式 垂直或者水平方式
ATOM atom =RegisterClassEx(&wndclass); //窗口注册
if(!atom)
{
MessageBox(NULL,L"Notice",L"error",MB_OK);
}
//控制视口大小
RECT rect;
rect.left=0;
rect.right=800;
rect.top=0;
rect.bottom =600;
//param1 对视口的需求,paranm2窗口风格
AdjustWindowRect(&rect,WS_OVERLAPPEDWINDOW,NULL);
int windowWith=rect.right-rect.left;
int windowHerght=rect.bottom-rect.top;
//param1,窗口额外风格,param2 窗口名称与注册一直,param3,字符串显示到窗口的标题栏,para4,窗口风格,para56,位置,para:7:宽 ,高,
HWND hwnd =CreateWindowEx(NULL,L"GLWindow",L"OPENGL Window",WS_OVERLAPPEDWINDOW,100,100,windowWith,windowHerght,NULL,NULL,hinstance,NULL);
ShowWindow(hwnd,SW_SHOW);
//选定像素格式-创建渲染环境-使渲染环境生效
//选定像素格式
UpdateWindow(hwnd);
HDC dc=GetDC(hwnd);
PIXELFORMATDESCRIPTOR pfd;
memset(&pfd,0,sizeof(PIXELFORMATDESCRIPTOR));
pfd.nVersion=1;
pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR);
pfd.cColorBits=32;
pfd.cDepthBits=24;
pfd.cStencilBits=8;
pfd.iPixelType=PFD_TYPE_RGBA;
pfd.dwFlags=PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER;
int pixFormat = ChoosePixelFormat(dc,&pfd);
SetPixelFormat(dc,pixFormat,&pfd);
//创建渲染环境
HGLRC rc = wglCreateContext(dc);
//使渲染环境生效
wglMakeCurrent(dc,rc);
Init();
//持续工作
MSG msg;
while(true)
{
//获取消息队列里的消息
//param 5,从消息队列中移除
if(PeekMessage(&msg,NULL,NULL,NULL,PM_REMOVE))
{
if(msg.message==WM_QUIT) //如果关闭消息就跳出
{
break;
}
TranslateMessage(&msg);
DispatchMessage(&msg); //派发消息
}
Draw();
SwapBuffers(dc);
}
return 0;
}