Esempio n. 1
0
LRESULT CALLBACK WndProc(HWND hWnd,UINT	uMsg,WPARAM	wParam,LPARAM lParam)
{
	switch(uMsg) {
		case WM_SYSCOMMAND:
		{
			switch (wParam) {
				case SC_SCREENSAVE:
				case SC_MONITORPOWER:
				return 0;
			}
			break;
		}

		case WM_CLOSE:
		PostQuitMessage(0);
		return 0;

		case WM_SIZE:
		render_resize(LOWORD(lParam),HIWORD(lParam));
		return 0;
	}

	return DefWindowProc(hWnd,uMsg,wParam,lParam);
}
Esempio n. 2
0
bool createWindow(char* title, int width, int height)
{
	WNDCLASS wc;
	RECT rect;
	rect.left=0;
	rect.right=width;
	rect.top=0;
	rect.bottom=height;

	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 = SAMPLE_NAME;

	if(!RegisterClass(&wc)) {
		return false;
	}

	AdjustWindowRectEx(&rect, WS_OVERLAPPEDWINDOW, FALSE, WS_EX_APPWINDOW | WS_EX_WINDOWEDGE);

	if(!(hWnd=CreateWindowEx(WS_EX_APPWINDOW|WS_EX_WINDOWEDGE,SAMPLE_NAME,title,
							WS_OVERLAPPEDWINDOW|WS_CLIPSIBLINGS|WS_CLIPCHILDREN,
							0,0,rect.right-rect.left,rect.bottom-rect.top,
							NULL,NULL,hInstance,NULL))) {
		releaseWindow();
		return false;
	}

    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,
		32,
		0,
		0,
		PFD_MAIN_PLANE,
		0,
		0, 0, 0
    };
	
	if(!(hDC=GetDC(hWnd)))
	{
		releaseWindow();
		OutputDebugString("");
		return FALSE;
	}
	
	int pixelformat;
	
    if ( (pixelformat = ChoosePixelFormat(hDC, &pfd)) == 0 ){
		OutputDebugString("ChoosePixelFormat Failed....");
        return FALSE;
    }

    if (SetPixelFormat(hDC, pixelformat, &pfd) == FALSE){
		OutputDebugString("SetPixelFormat Failed....");
        return FALSE;
    }

	if (!(hRC=wglCreateContext(hDC))){
		OutputDebugString("Creating HGLRC Failed....");
		return FALSE;
	}
	
	// Set Vsync
	//BOOL (WINAPI *wglSwapIntervalEXT)(int) = NULL;

	//if(strstr((char*)glGetString( GL_EXTENSIONS ),"WGL_EXT_swap_control")== 0) {
	//}
	//else {
		//wglSwapIntervalEXT = (BOOL (WINAPI*)(int))wglGetProcAddress("wglSwapIntervalEXT");
		//if(wglSwapIntervalEXT) wglSwapIntervalEXT(1);
	//}
	
	wglMakeCurrent(hDC,hRC);
	
	ShowWindow(hWnd,SW_SHOW);
	SetForegroundWindow(hWnd);
	SetFocus(hWnd);

	render_resize(width, height);
	
	glClearColor(0.0f,0.0f,0.0f,0.0f);
	glClearDepth(1.0f);
	
	return TRUE;
}
Esempio n. 3
0
void input_update()
{
	/*
	   Converts SDL event data into internal format which serves as an intermediary
	    between SDL events and input relevent to specific game phases.
	   Unlike input_reset, can be called an arbitrary number of times per tick, from
	    either thread.
	   */

	// Update key vars
	while(SDL_PollEvent(&in_event))
	{
		switch(in_event.type)
		{
			case SDL_MOUSEMOTION:
				in_cursorx = in_event.motion.x;
				in_cursory = in_event.motion.y;
			break;

			case SDL_MOUSEBUTTONDOWN:
				switch(in_event.button.button)
				{
					case SDL_BUTTON_LEFT:
						in_leftmousepress = 1;
						in_leftmousehold = 1;
					break;

					case SDL_BUTTON_RIGHT:
						in_rightmousepress = 1;
						in_rightmousehold = 1;
					break;
				}	
			break;

			case SDL_MOUSEBUTTONUP:
				switch(in_event.button.button)
				{
					case SDL_BUTTON_LEFT:
						in_leftmousehold = 0;
					break;

					case SDL_BUTTON_RIGHT:
						in_rightmousehold = 0;
					break;
				}	
			break;

			case SDL_MOUSEWHEEL:
				in_deltamousewheel+= in_event.wheel.y;
				break;


			case SDL_KEYDOWN: // FLAG 'a' is 97
				if(in_event.key.keysym.sym<INPUT_KEYS)
				{
					in_keypress[in_event.key.keysym.sym] = 1;
					in_keyhold[in_event.key.keysym.sym] = 1;
					if(in_event.key.keysym.sym==113) exit(1); // FLAG instaclose
					//printf("%d\n",in_event.key.keysym.sym); // FLAG
				}
			break;

			case SDL_KEYUP:
				if(in_event.key.keysym.sym<INPUT_KEYS)
				{
					in_keyhold[in_event.key.keysym.sym] = 0;

				}
			break;

			case SDL_WINDOWEVENT:
			switch(in_event.window.event)
			{
				// for full list see http://wiki.libsdl.org/SDL_WindowEvent

				case SDL_WINDOWEVENT_CLOSE:
				exit(1); // FLAG make a function for forced closure
				break;

				case SDL_WINDOWEVENT_RESIZED:
				{
					render_resize(in_event.window.data1,in_event.window.data2);
					debug_message("Resize: %d %d\n",
							in_event.window.data1,
							in_event.window.data2);
					//xx
				}
				break;
			}
			break;
		}
	}

}