void manager_interpret_message( Display *conn, XClientMessageEvent event ) { frame_t *frame = frame_get( event.window ); if (event.message_type == EA_NET_CLOSE_WINDOW ) { printf( "\t_NET_CLOSE_WINDOW\n" ); /* Close the application */ Window window = frame->child->id; Atom *protocols; int num, i; XUnmapWindow( conn, window ); XGetWMProtocols( conn, window, &protocols, &num ); for (i = 0; i < num; i++ ) { if ( protocols[i] == XA_WM_DELETE_WINDOW ) { XEvent event_send; event_send.type = ClientMessage; event_send.xclient.type = ClientMessage; event_send.xclient.message_type = XA_WM_PROTOCOLS; event_send.xclient.format = 32; event_send.xclient.data.l[0] = XA_WM_DELETE_WINDOW; event_send.xclient.data.l[1] = event.data.l[0]; XSendEvent( conn, window, False, 0, &event_send ); window = None; } } if ( window != None ) XKillClient( conn, window ); } else if ( event.message_type == EA_NET_MOVERESIZE_WINDOW ) { /* Change the window position on client request */ if ( event.data.l[0] & (MR_FLAG_X | MR_FLAG_Y) ) frame_move( conn, frame, event.data.l[1], event.data.l[2] ); } else if ( event.message_type == EA_NET_ACTIVE_WINDOW ) { /* Change the window focus on client request */ frame_focus( conn, frame ); } }
void main(void) { // 內定使用DirectX 9來繪圖 char *device = "dx9"; void (*render)(void) = RenderFrameDX9; bool (*init_resource)(void) = InitResourceDX9; bool (*release_resource)(void) = ReleaseResourceDX9; void (*resize_func)(int width, int height) = ResizeWindowDX9; #ifdef _ENABLE_DX10_ printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n(3) for Direct3D10\n"); #else printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n"); #endif int c = getche(); switch(c) { default: case '1': render = RenderFrameDX9; init_resource = InitResourceDX9; release_resource = ReleaseResourceDX9; resize_func = ResizeWindowDX9; break; case '2': device = "opengl"; init_resource = InitResourceOpenGL; release_resource = ReleaseResourceOpenGL; render = RenderFrameOpenGL; resize_func = ResizeWindowOpenGL; break; case '3': #ifdef _ENABLE_DX10_ device = "dx10"; init_resource = InitResourceDX10; release_resource = ReleaseResourceDX10; render = RenderFrameDX10; resize_func = ResizeWindowDX10; #endif break; } GutResizeFunc( resize_func ); // 在(100,100)的位置開啟一個大小為(512x512)的視窗 GutCreateWindow(100, 100, 512, 512, device); // 做OpenGL或DirectX初始化 if ( !GutInitGraphicsDevice(device) ) { printf("Failed to initialize %s device\n", device); exit(0); } g_view_matrix.Identity(); g_world_matrix.Identity(); g_scale_matrix.Identity(); GutInputInit(); //g_Control.SetCamera(Vector4(0.0f, 10.0f, 0.0f), Vector4(0.0f, 0.0f, 0.0f), Vector4(0.0f, 0.0f, 1.0f) ); g_Control.SetCamera(Vector4(0.0f, 0.0f, 10.0f), Vector4(0.0f, 0.0f, 0.0f), Vector4(0.0f, 1.0f, 0.0f) ); CGutModel::SetTexturePath("../../textures/"); g_Models[0].Load_ASCII("../../models/sun_darker.gma"); g_Models[1].Load_ASCII("../../models/earth.gma"); g_Models[2].Load_ASCII("../../models/moon.gma"); g_Models[3].Load_ASCII("../../models/mars.gma"); // 載入shader & textures if ( !init_resource() ) { release_resource(); printf("Failed to load resources\n"); exit(0); } // 主回圈 while( GutProcessMessage() ) { GetUserInput(); frame_move(); render(); } // 卸載shader release_resource(); // 關閉OpenGL/DirectX繪圖裝置 GutReleaseGraphicsDevice(); }
void main(void) { // 內定使用DirectX 9來繪圖 char *device = "dx9"; void (*render)(void) = RenderFrameDX9; bool (*init_resource)(void) = InitResourceDX9; bool (*release_resource)(void) = ReleaseResourceDX9; void (*resize_func)(int width, int height) = ResizeWindowDX9; #ifdef _ENABLE_DX10_ printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n(3) for Direct3D10\n"); #else printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n"); #endif //int c = getche(); int c = '1'; switch(c) { default: case '1': render = RenderFrameDX9; init_resource = InitResourceDX9; release_resource = ReleaseResourceDX9; resize_func = ResizeWindowDX9; break; case '2': device = "opengl"; init_resource = InitResourceOpenGL; release_resource = ReleaseResourceOpenGL; render = RenderFrameOpenGL; resize_func = ResizeWindowOpenGL; break; #ifdef _ENABLE_DX10_ case '3': device = "dx10"; init_resource = InitResourceDX10; release_resource = ReleaseResourceDX10; render = RenderFrameDX10; resize_func = ResizeWindowDX10; break; #endif } GutResizeFunc( resize_func ); // 在(100,100)的位置開啟一個大小為(512x512)的視窗 GutCreateWindow(100, 100, 512, 512, device); // 做OpenGL或DirectX初始化 if ( !GutInitGraphicsDevice(device) ) { printf("Failed to initialize %s device\n", device); exit(0); } GutInputInit(); g_Control.SetCamera(Vector4(0.0f, 0.0f, 5.0f), Vector4(0.0f), Vector4(0.0f, 1.0f, 0.0f) ); CreateSphere(&g_pCompressedVertices, &g_pSphereIndices); // 載入shader if ( !init_resource() ) { release_resource(); printf("Failed to load resources\n"); exit(0); } // 主回圈 while( GutProcessMessage() ) { GetUserInput(); frame_move(); render(); } // 卸載shader release_resource(); // 關閉OpenGL/DirectX繪圖裝置 GutReleaseGraphicsDevice(); }
void main(void) { // 內定使用DirectX 9來繪圖 char *device = "dx9"; void (*render)(void) = RenderFrameDX9; bool (*init_resource)(void) = InitResourceDX9; bool (*release_resource)(void) = ReleaseResourceDX9; void (*resize_func)(int width, int height) = ResizeWindowDX9; #ifdef _ENABLE_DX10_ printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n(3) for Direct3D10\n"); #else printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n"); #endif int c = getche(); switch(c) { default: case '1': render = RenderFrameDX9; init_resource = InitResourceDX9; release_resource = ReleaseResourceDX9; resize_func = ResizeWindowDX9; break; case '2': device = "opengl"; init_resource = InitResourceOpenGL; release_resource = ReleaseResourceOpenGL; render = RenderFrameOpenGL; resize_func = ResizeWindowOpenGL; break; case '3': #ifdef _ENABLE_DX10_ device = "dx10"; init_resource = InitResourceDX10; release_resource = ReleaseResourceDX10; render = RenderFrameDX10; resize_func = ResizeWindowDX10; #endif break; } GutResizeFunc( resize_func ); GutCreateWindow(100, 100, 512, 512, device); if ( !GutInitGraphicsDevice(device) ) { printf("Failed to initialize %s device\n", device); exit(0); } // ambient g_Lights[0].m_vPosition.Set(0.0f, 0.0f, 0.0f, 1.0f); g_Lights[0].m_vDiffuse.Set(0.0f); g_Lights[0].m_vAmbient.Set(0.3f); GutInputInit(); GutRegisterKeyDown(GUTKEY_1, KeyDown_1); GutRegisterKeyDown(GUTKEY_2, KeyDown_2); GutRegisterKeyDown(GUTKEY_3, KeyDown_3); GutRegisterKeyDown(GUTKEY_SPACE, KeyDown_Space); g_Control.SetCamera( Vector4(0.0f, 3.0f, 0.0f), Vector4(0.0f, 0.0f, 0.0f), Vector4(0.0f, 0.0f, 1.0f) ); g_Model.Load_ASCII("..\\..\\models\\earth_normalmapped.gma"); g_Sphere.Load_ASCII("..\\..\\models\\sphere_simple.gma"); // 載入shader if ( !init_resource() ) { release_resource(); printf("Failed to load resources\n"); exit(0); } // 主回圈 while( GutProcessMessage() ) { GetUserInput(); frame_move(); render(); } // 卸載shader release_resource(); // 關閉OpenGL/DirectX繪圖裝置 GutReleaseGraphicsDevice(); }