1 // VideoUpdate.cpp: implementation of the CVideoUpdate class.
\r
3 //////////////////////////////////////////////////////////////////////
\r
7 #include "VideoUpdate.h"
\r
9 // include the Direct3D Library file
\r
10 #pragma comment (lib, "d3d9.lib")
\r
11 #pragma comment (lib, "d3dx9.lib")
\r
13 //////////////////////////////////////////////////////////////////////
\r
14 // Construction/Destruction
\r
15 //////////////////////////////////////////////////////////////////////
\r
16 LPDIRECT3DDEVICE9 d3ddev; // the pointer to the device class
\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
25 CVideoUpdate::CVideoUpdate()
\r
27 d3d = Direct3DCreate9(D3D_SDK_VERSION);
\r
29 D3DPRESENT_PARAMETERS d3dpp;
\r
30 D3DDISPLAYMODE d3ddm;
\r
31 d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm);
\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
43 // create a device class using this information and the info from the d3dpp stuct
\r
44 d3d->CreateDevice(D3DADAPTER_DEFAULT,
\r
47 D3DCREATE_SOFTWARE_VERTEXPROCESSING,
\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
61 CVideoUpdate::~CVideoUpdate()
\r
63 if (d3ddev != NULL) d3ddev->Release();
\r
64 if (d3d != NULL) d3d->Release();
\r
67 bool CVideoUpdate::Start()
\r
69 assert(screenWidth && screenHeight && screenBPP);
\r
71 if(-1==SDL_InitSubSystem(SDL_INIT_VIDEO))
\r
73 CLog::Get().Write(LOG_CLIENT,IDS_GENERIC_SUB_INIT_FAIL,"Video",SDL_GetError());
\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
83 int flags = SDL_OPENGL | SDL_ANYFORMAT | SDL_FULLSCREEN;
\r
85 if(!SDL_SetVideoMode(scrWidth, scrHeight, scrBPP, flags))
\r
87 CLog::Get().Write(LOG_CLIENT, IDS_BAD_DISPLAYMODE, scrWidth, scrHeight, scrBPP, SDL_GetError());
\r
91 //hide the mouse cursor
\r
92 SDL_ShowCursor(SDL_DISABLE);
\r
94 d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_COLORVALUE(0.0f, 0.4f, 1.0f, 1.0f), 1.0f, 0);
\r
96 d3ddev->BeginScene(); // begins the 3D scene
\r
101 void CVideoUpdate::Update()
\r
104 d3ddev->EndScene();
\r
105 d3ddev->Present(NULL, NULL, NULL, NULL);
\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
112 void CVideoUpdate::Stop()
\r
114 // SDL_QuitSubSystem(SDL_INIT_VIDEO);
\r