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