Exemple #1
0
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 );
   }
}
Exemple #2
0
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();
}
Exemple #3
0
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();
}
Exemple #4
0
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();
}