Новичок
Профиль
Группа: Участник
Сообщений: 47
Регистрация: 3.9.2006
Репутация: нет Всего: нет
|
Привет. Есть код: | Код | #include <windows.h> #include <winuser.h> #include <wingdi.h> #include <gl\gl.h> #include <gl\glu.h>
LRESULT CALLBACK WindowProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam); void ChangeScreenSettings(BOOL FS); void EnableOpenGL(); void DisableOpenGL();
int ScreenX, ScreenY; BOOL FullScreen; BOOL bQuit = FALSE; HWND hWnd = 0; HDC hDC = 0; HGLRC hRC = 0; HINSTANCE hInst = 0;
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdName, int nCmdShow){ hInst = hInstance; MSG msg; WNDCLASSA wc; wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC; wc.lpszMenuName = 0; wc.lpszClassName = "OpenGL"; wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.hIcon = LoadIconA(0, IDI_APPLICATION); wc.hCursor = LoadCursorA(0, IDC_ARROW); wc.hbrBackground = (HBRUSH) 15; wc.cbWndExtra = 0; wc.cbClsExtra = 0;
RegisterClassA(&wc); ScreenX = GetSystemMetrics(SM_CXSCREEN); ScreenY = GetSystemMetrics(SM_CYSCREEN); FullScreen = TRUE; CreateWindowA("OpenGL", "Window", WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_MAXIMIZE | WS_POPUP, 0, 0, ScreenX, ScreenY, 0, 0, hInstance, 0); EnableOpenGL(); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while(GetMessageA(&msg, 0,0,0)){ TranslateMessage(&msg); DispatchMessageA(&msg);}
return msg.wParam; }
LRESULT CALLBACK WindowProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam){ switch(msg){ case WM_CREATE: { hWnd = hWindow; DEVMODE dm; ZeroMemory(&dm, sizeof(DEVMODE)); dm.dmSize = sizeof(DEVMODE); dm.dmPelsWidth = ScreenX; dm.dmPelsHeight = ScreenY; dm.dmBitsPerPel = 32; dm.dmFields = DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT; if (DISP_CHANGE_SUCCESSFUL != (ChangeDisplaySettings(&dm, CDS_FULLSCREEN))){ MessageBoxA(hWindow, "Ошибка перехода в полноэкранный режим", "Ошибка", MB_OK); ExitProcess(0);} SetTimer(hWindow, 100, 10, 0); return 0; } case WM_KEYDOWN:{ switch (wParam){ case VK_ESCAPE : { SendMessageA(hWnd, WM_CLOSE, 0, 0);} break; case VK_SPACE : { //FullScreen = (!FullScreen); //ChangeScreenSettings(FullScreen); break; } } break; } case WM_TIMER:{ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0,0,1,0); glLoadIdentity(); glTranslatef(-1.5, 0, -6.0); glBegin(GL_TRIANGLES); glColor3f(1,1,1); glVertex3f(0, 1, 0); glVertex3f(1, 0, 0); glVertex3f(0, 0, 1); glEnd(); break; } case WM_CLOSE: { DisableOpenGL(); PostQuitMessage(0); } } return DefWindowProcA(hWindow, msg, wParam, lParam); }
void ChangeScreenSettings(BOOL FS){ if (!FS){ DisableOpenGL(); DestroyWindow(hWnd); hWnd = CreateWindowA("OpenGL", "Window", WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS|WS_CLIPCHILDREN|WS_VISIBLE, 0, 0, ScreenX, ScreenY, 0, 0, hInst, 0); EnableOpenGL(); }
else { DisableOpenGL(); DestroyWindow(hWnd); hWnd = CreateWindowA("OpenGL", "Window", WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_MAXIMIZE | WS_POPUP | WS_VISIBLE, 0, 0, ScreenX, ScreenY, 0, 0, hInst, 0); EnableOpenGL(); } }
void EnableOpenGL(){ PIXELFORMATDESCRIPTOR pfd; ZeroMemory(&pfd, sizeof(pfd)); pfd.nSize = sizeof(pfd); pfd.nVersion = 0; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 32; pfd.cDepthBits = 32; pfd.iLayerType = PFD_MAIN_PLANE; hDC = GetDC(hWnd); int PixelFormat = ChoosePixelFormat(hDC, &pfd); SetPixelFormat(hDC, PixelFormat, &pfd); hRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hRC); }
void DisableOpenGL(){ wglMakeCurrent(0,0); wglDeleteContext(hRC); ReleaseDC(hWnd, hDC); }
|
Контексты все создаются, но окно остается девственно чистым. Почему так происходит?
|