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