8499568c1e00ebbe9964c9b89e06481f6f0c98ea
[matthijs/ABM2.git] / ABM2 / Engine / VideoUpdate.cpp
1 // VideoUpdate.cpp: implementation of the CVideoUpdate class.\r
2 //\r
3 //////////////////////////////////////////////////////////////////////\r
4 \r
5 #include "engine.h"\r
6 #include "../main.h"\r
7 #include "VideoUpdate.h"\r
8 \r
9 // include the Direct3D Library file\r
10 #pragma comment (lib, "d3d9.lib")\r
11 #pragma comment (lib, "d3dx9.lib")\r
12 \r
13 //////////////////////////////////////////////////////////////////////\r
14 // Construction/Destruction\r
15 //////////////////////////////////////////////////////////////////////\r
16 LPDIRECT3DDEVICE9 d3ddev;    // the pointer to the device class\r
17 \r
18 CMMPointer<Dator<int> > CVideoUpdate::screenWidth=0;\r
19 CMMPointer<Dator<int> > CVideoUpdate::screenHeight=0;\r
20 CMMPointer<Dator<int> > CVideoUpdate::screenBPP=0;\r
21 int CVideoUpdate::scrWidth=640;\r
22 int CVideoUpdate::scrHeight=480;\r
23 int CVideoUpdate::scrBPP=16;\r
24 \r
25 CVideoUpdate::CVideoUpdate()\r
26 {\r
27         d3d = Direct3DCreate9(D3D_SDK_VERSION);\r
28 \r
29         D3DPRESENT_PARAMETERS d3dpp;\r
30         D3DDISPLAYMODE d3ddm;\r
31         d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);\r
32 \r
33         ZeroMemory(&d3dpp, sizeof(d3dpp));\r
34         d3dpp.Windowed = true;\r
35         d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;\r
36         d3dpp.hDeviceWindow = hWnd;\r
37         //d3dpp.BackBufferFormat = d3ddm.Format;\r
38         d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;\r
39         d3dpp.BackBufferWidth = scrWidth;\r
40         d3dpp.BackBufferHeight = scrHeight;\r
41 \r
42 \r
43         // create a device class using this information and the info from the d3dpp stuct\r
44         d3d->CreateDevice(D3DADAPTER_DEFAULT,\r
45                                                                                 D3DDEVTYPE_HAL,\r
46                                                                                 hWnd,\r
47                                                                                 D3DCREATE_SOFTWARE_VERTEXPROCESSING,\r
48                                                                                 &d3dpp,\r
49                                                                                 &d3ddev);\r
50 \r
51             // Turn on alpha-blending\r
52     d3ddev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);\r
53     // Set the render state up for source alpha blending.\r
54     d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);\r
55     d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);\r
56     // Get the alpha information solely from the texture.\r
57     d3ddev->SetTextureStageState(0, D3DTSS_ALPHAOP,   D3DTOP_SELECTARG1);\r
58     d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);\r
59 }\r
60 \r
61 CVideoUpdate::~CVideoUpdate()\r
62 {\r
63     if (d3ddev != NULL) d3ddev->Release();\r
64     if (d3d != NULL) d3d->Release();\r
65 }\r
66 \r
67 bool CVideoUpdate::Start()\r
68 {\r
69         assert(screenWidth && screenHeight && screenBPP);\r
70 /*\r
71         if(-1==SDL_InitSubSystem(SDL_INIT_VIDEO))\r
72         {\r
73                 CLog::Get().Write(LOG_CLIENT,IDS_GENERIC_SUB_INIT_FAIL,"Video",SDL_GetError());\r
74                 return false;\r
75         }\r
76         SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );\r
77         SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );\r
78         SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );\r
79         SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );\r
80         SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );\r
81         SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );\r
82 \r
83         int flags = SDL_OPENGL | SDL_ANYFORMAT | SDL_FULLSCREEN;\r
84 \r
85         if(!SDL_SetVideoMode(scrWidth, scrHeight, scrBPP, flags))\r
86         {\r
87                 CLog::Get().Write(LOG_CLIENT, IDS_BAD_DISPLAYMODE, scrWidth, scrHeight, scrBPP, SDL_GetError());\r
88                 return false;\r
89         }\r
90 \r
91         //hide the mouse cursor\r
92         SDL_ShowCursor(SDL_DISABLE);\r
93 */\r
94     d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_COLORVALUE(0.0f, 0.4f, 1.0f, 1.0f), 1.0f, 0);\r
95 \r
96     d3ddev->BeginScene();    // begins the 3D scene\r
97 \r
98                 return true;\r
99 }\r
100 \r
101 void CVideoUpdate::Update()\r
102 {\r
103         // end frame\r
104         d3ddev->EndScene();\r
105         d3ddev->Present(NULL, NULL, NULL, NULL);\r
106 \r
107         // start new frame\r
108         d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_COLORVALUE(0.0f, 0.4f, 1.0f, 1.0f), 1.0f, 0);\r
109         d3ddev->BeginScene();\r
110 }\r
111 \r
112 void CVideoUpdate::Stop()\r
113 {\r
114 //      SDL_QuitSubSystem(SDL_INIT_VIDEO);\r
115 }\r