DXGL r194 - Code Review

Jump to navigation Jump to search
Repository:DXGL
Revision:r193‎ | r194 | r195 >
Date:14:07, 4 July 2012
Author:admin
Status:new
Tags:
Comment:
Fix viewport object device binding.
Fix viewport object memory leak.
Modified paths:
  • /ddraw/glDirect3DDevice.cpp (modified) (history)
  • /ddraw/glDirect3DViewport.h (modified) (history)

Diff [purge]

Index: ddraw/glDirect3DDevice.cpp
@@ -266,6 +266,16 @@
267267 materials[i]->Release();
268268 }
269269 }
 270+ for(int i = 0; i < viewportcount; i++)
 271+ {
 272+ if(viewports[i])
 273+ {
 274+ viewports[i]->SetDevice(NULL);
 275+ viewports[i]->SetCurrent(false);
 276+ viewports[i]->Release();
 277+ }
 278+ }
 279+ free(viewports);
270280 free(materials);
271281 glD3D7->Release();
272282 glDDS7->Release();
@@ -1331,6 +1341,7 @@
13321342 }
13331343 viewports[viewportcount] = (glDirect3DViewport3*)lpDirect3DViewport;
13341344 viewports[viewportcount]->AddRef();
 1345+ viewports[viewportcount]->SetDevice(this);
13351346 viewportcount++;
13361347 if(viewportcount >= maxviewports)
13371348 {
@@ -1349,6 +1360,7 @@
13501361 if(viewports[i] == lpDirect3DViewport)
13511362 {
13521363 viewports[i]->SetCurrent(false);
 1364+ viewports[i]->SetDevice(NULL);
13531365 viewports[i]->Release();
13541366 if(currentviewport == viewports[i]) currentviewport = NULL;
13551367 viewports[i] = NULL;
Index: ddraw/glDirect3DViewport.h
@@ -49,6 +49,7 @@
5050 HRESULT WINAPI SetViewport2(LPD3DVIEWPORT2 lpData);
5151 HRESULT WINAPI TransformVertices(DWORD dwVertexCount, LPD3DTRANSFORMDATA lpData, DWORD dwFlags, LPDWORD lpOffscreen);
5252 void SetCurrent(bool current);
 53+ void SetDevice(glDirect3DDevice7 *device){this->device = device;};
5354 void Sync();
5455 private:
5556 ULONG refcount;