Changeset 871
- Timestamp:
- 02/21/10 19:38:06 (5 months ago)
- Location:
- trunk
- Files:
-
- 5 modified
-
client/Game2/GameApp.cpp (modified) (1 diff)
-
client/Game2/IntroMovie.cpp (modified) (7 diffs)
-
client/Game2/IntroMovie.h (modified) (3 diffs)
-
client/Game2/main.cpp (modified) (2 diffs)
-
include/config-win32.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/client/Game2/GameApp.cpp
r870 r871 2406 2406 2407 2407 case WM_PAINT: 2408 // Nothing to paint (all done by video or DirectX) 2409 PAINTSTRUCT lPs; 2410 BeginPaint(pWindow, &lPs); 2411 EndPaint(pWindow, &lPs); 2408 { 2409 // Nothing to paint (all done by video or DirectX) 2410 PAINTSTRUCT lPs; 2411 HDC hdc = BeginPaint(pWindow, &lPs); 2412 if (This->introMovie != NULL) 2413 This->introMovie->Repaint(hdc); 2414 EndPaint(pWindow, &lPs); 2415 } 2412 2416 return 0; 2413 2417 -
trunk/client/Game2/IntroMovie.cpp
r868 r871 32 32 33 33 #include "../../engine/Util/Config.h" 34 #include "../../engine/Util/Str.h" 34 35 35 36 #include "IntroMovie.h" … … 37 38 using namespace HoverRace; 38 39 using namespace HoverRace::Client; 39 using HoverRace::Util::Config;40 using namespace HoverRace::Util; 40 41 41 42 IntroMovie::IntroMovie(HWND hwnd, HINSTANCE hinst) : 42 hwnd(hwnd) 43 hwnd(hwnd), 44 #ifdef WITH_DIRECTSHOW 45 graph(NULL), winCtl(NULL), mediaCtl(NULL) 46 #else 47 movieWnd(NULL) 48 #endif 43 49 { 44 50 Config *cfg = Config::GetInstance(); … … 46 52 47 53 #ifdef WITH_DIRECTSHOW 48 //TODO 54 HRESULT hr; 55 if (FAILED(hr = InitDirectShow(movieFilename))) { 56 Clean(); 57 } 58 49 59 #else 60 50 61 movieWnd = MCIWndCreate( 51 62 hwnd, hinst, … … 65 76 IntroMovie::~IntroMovie() 66 77 { 78 Clean(); 79 } 80 81 void IntroMovie::Clean() 82 { 67 83 #ifdef WITH_DIRECTSHOW 68 //TODO 84 if (mediaCtl != NULL) 85 mediaCtl->Release(); 86 if (winCtl != NULL) 87 winCtl->Release(); 88 if (graph != NULL) 89 graph->Release(); 69 90 #else 70 91 if (movieWnd != NULL) { … … 76 97 } 77 98 99 #ifdef WITH_DIRECTSHOW 100 HRESULT IntroMovie::InitDirectShow(const std::string &movieFilename) 101 { 102 HRESULT hr; 103 104 if (FAILED(hr = CoCreateInstance(CLSID_FilterGraph, NULL, 105 CLSCTX_INPROC_SERVER, IID_IGraphBuilder, 106 (void**)&graph))) return hr; 107 108 CComPtr<IBaseFilter> vmr; 109 if (FAILED(hr = CoCreateInstance(CLSID_VideoMixingRenderer, NULL, 110 CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&vmr))) return hr; 111 if (FAILED(hr = graph->AddFilter(vmr, L"Video Mixing Renderer"))) return hr; 112 113 CComPtr<IVMRFilterConfig> filterCfg; 114 if (FAILED(hr = vmr->QueryInterface(IID_IVMRFilterConfig, (void**)&filterCfg))) return hr; 115 if (FAILED(hr = filterCfg->SetRenderingMode(VMRMode_Windowless))) return hr; 116 117 if (FAILED(hr = vmr->QueryInterface(IID_IVMRWindowlessControl, (void**)&winCtl))) return hr; 118 119 if (FAILED(hr = winCtl->SetVideoClippingWindow(hwnd))) return hr; 120 121 if (FAILED(hr = graph->RenderFile(Str::UW(movieFilename.c_str()), NULL))) return hr; 122 123 if (FAILED(hr = graph->QueryInterface(IID_IMediaControl, (void**)&mediaCtl))) return hr; 124 125 return ERROR_SUCCESS; 126 } 127 #endif 128 78 129 void IntroMovie::Play() 79 130 { 80 131 #ifdef WITH_DIRECTSHOW 81 //TODO 132 if (mediaCtl != NULL) 133 mediaCtl->Run(); 82 134 #else 83 135 if (movieWnd != NULL) … … 88 140 void IntroMovie::ResetSize() 89 141 { 90 #ifndef WITH_DIRECTSHOW91 142 RECT clientRect, movieRect; 92 143 93 144 if (GetClientRect(hwnd, &clientRect)) { 94 if (GetWindowRect(movieWnd, &movieRect)) { 95 SetWindowPos(movieWnd, HWND_TOP, 96 0, 0, 97 clientRect.right - clientRect.left, 98 clientRect.bottom - clientRect.top, 99 SWP_SHOWWINDOW); 100 } 145 # ifdef WITH_DIRECTSHOW 146 HRESULT hr; 147 long w, h; 148 149 if (mediaCtl != NULL) { 150 if (FAILED(hr = winCtl->GetNativeVideoSize(&w, &h, NULL, NULL))) { 151 return; 152 } 153 SetRect(&movieRect, 0, 0, w, h); 154 winCtl->SetVideoPosition(&movieRect, &clientRect); 155 } 156 # else 157 if (GetWindowRect(movieWnd, &movieRect)) { 158 SetWindowPos(movieWnd, HWND_TOP, 159 0, 0, 160 clientRect.right - clientRect.left, 161 clientRect.bottom - clientRect.top, 162 SWP_SHOWWINDOW); 163 } 164 # endif 101 165 } 166 } 167 168 void IntroMovie::Repaint(HDC hdc) 169 { 170 #ifdef WITH_DIRECTSHOW 171 if (winCtl != NULL) 172 winCtl->RepaintVideo(hwnd, hdc); 102 173 #endif 103 174 } … … 105 176 void IntroMovie::ResetPalette(bool background) 106 177 { 107 #ifndef WITH_DIRECTSHOW 178 #ifdef WITH_DIRECTSHOW 179 if (winCtl != NULL) 180 winCtl->DisplayModeChanged(); 181 #else 108 182 MCIWndRealize(movieWnd, background); 109 183 #endif -
trunk/client/Game2/IntroMovie.h
r868 r871 23 23 #pragma once 24 24 25 #ifdef WITH_DIRECTSHOW 26 # include <dshow.h> 27 #endif 28 25 29 namespace HoverRace { 26 30 namespace Client { … … 36 40 ~IntroMovie(); 37 41 42 private: 43 void Clean(); 44 # ifdef WITH_DIRECTSHOW 45 HRESULT InitDirectShow(const std::string &movieFilename); 46 # endif 47 38 48 public: 39 49 void Play(); 40 50 41 51 void ResetSize(); 52 void Repaint(HDC hdc); 42 53 void ResetPalette(bool background=false); 43 54 … … 45 56 HWND hwnd; 46 57 # ifdef WITH_DIRECTSHOW 47 //TODO 58 IGraphBuilder *graph; 59 IVMRWindowlessControl *winCtl; 60 IMediaControl *mediaCtl; 48 61 # else 49 62 HWND movieWnd; -
trunk/client/Game2/main.cpp
r861 r871 184 184 _chdir(appPath); 185 185 free(appPath); 186 187 CoInitialize(NULL); 186 188 #endif 187 189 … … 258 260 Config::Shutdown(); 259 261 262 #ifdef _WIN32 263 CoUninitialize(); 264 #endif 265 260 266 return lErrorCode; 261 267 } -
trunk/include/config-win32.h
r577 r871 2 2 /* config-win32.h 3 3 Win32 counterpart to the config.h generated from Linux build. */ 4 5 #include "ntverp.h" 4 6 5 7 #define PACKAGE "hoverrace" … … 13 15 14 16 #define HAVE_LUA 1 17 18 // Only enable DirectShow support if a recent Windows SDK is installed. 19 #if defined(VER_PRODUCTBUILD) && VER_PRODUCTBUILD >= 6001 20 # define WITH_DIRECTSHOW 1 21 #endif
