Stefan Dösinger : wined3d: Add a parameter for SetRenderTarget viewport setup.

Alexandre Julliard julliard at winehq.org
Tue Nov 3 15:37:16 CST 2009


Module: wine
Branch: master
Commit: 90e443758aae46f80125fea61ee8e2d181415bdb
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=90e443758aae46f80125fea61ee8e2d181415bdb

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Tue Oct 20 14:13:26 2009 +0200

wined3d: Add a parameter for SetRenderTarget viewport setup.

---

 dlls/d3d8/device.c       |    2 +-
 dlls/d3d9/device.c       |    2 +-
 dlls/ddraw/device.c      |    6 ++++--
 dlls/ddraw/direct3d.c    |   14 ++------------
 dlls/wined3d/device.c    |    6 +++---
 include/wine/wined3d.idl |    3 ++-
 6 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index d0504ed..e6c1f5b 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -1005,7 +1005,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_SetRenderTarget(LPDIRECT3DDEVICE8 ifa
     {
         hr = IWineD3DDevice_SetDepthStencilSurface(This->WineD3DDevice, pZSurface ? pZSurface->wineD3DSurface : NULL);
         if (SUCCEEDED(hr) && pSurface)
-            hr = IWineD3DDevice_SetRenderTarget(This->WineD3DDevice, 0, pSurface->wineD3DSurface);
+            hr = IWineD3DDevice_SetRenderTarget(This->WineD3DDevice, 0, pSurface->wineD3DSurface, TRUE);
         if (FAILED(hr)) IWineD3DDevice_SetDepthStencilSurface(This->WineD3DDevice, original_ds);
     }
     if (original_ds) IWineD3DSurface_Release(original_ds);
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 5aacbc8..bb63270 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -1042,7 +1042,7 @@ static HRESULT  WINAPI  IDirect3DDevice9Impl_SetRenderTarget(LPDIRECT3DDEVICE9EX
     }
 
     wined3d_mutex_lock();
-    hr = IWineD3DDevice_SetRenderTarget(This->WineD3DDevice, RenderTargetIndex, pSurface ? pSurface->wineD3DSurface : NULL);
+    hr = IWineD3DDevice_SetRenderTarget(This->WineD3DDevice, RenderTargetIndex, pSurface ? pSurface->wineD3DSurface : NULL, TRUE);
     wined3d_mutex_unlock();
 
     return hr;
diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 1883a5d..68b149e 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -348,7 +348,8 @@ IDirect3DDeviceImpl_7_Release(IDirect3DDevice7 *iface)
              * vanish soon.
              */
             IWineD3DDevice_SetRenderTarget(This->wineD3DDevice, 0,
-                                           This->ddraw->d3d_target->WineD3DSurface);
+                                           This->ddraw->d3d_target->WineD3DSurface,
+                                           FALSE);
             /* This->target is the offscreen target.
              * This->ddraw->d3d_target is the target used by DDraw
              */
@@ -1984,7 +1985,8 @@ IDirect3DDeviceImpl_7_SetRenderTarget(IDirect3DDevice7 *iface,
 
     hr = IWineD3DDevice_SetRenderTarget(This->wineD3DDevice,
                                         0,
-                                        Target ? Target->WineD3DSurface : NULL);
+                                        Target ? Target->WineD3DSurface : NULL,
+                                        FALSE);
     if(hr != D3D_OK)
     {
         LeaveCriticalSection(&ddraw_cs);
diff --git a/dlls/ddraw/direct3d.c b/dlls/ddraw/direct3d.c
index 42884e5..798518a 100644
--- a/dlls/ddraw/direct3d.c
+++ b/dlls/ddraw/direct3d.c
@@ -865,7 +865,6 @@ IDirect3DImpl_7_CreateDevice(IDirect3D7 *iface,
     if(!(target->surface_desc.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) &&
        (This->d3d_target != target))
     {
-        WINED3DVIEWPORT vp;
         TRACE("(%p) Using %p as front buffer, %p as back buffer\n", This, This->d3d_target, target);
         hr = IWineD3DDevice_SetFrontBackBuffers(This->wineD3DDevice,
                                                 This->d3d_target->WineD3DSurface,
@@ -875,17 +874,8 @@ IDirect3DImpl_7_CreateDevice(IDirect3D7 *iface,
 
         /* Render to the back buffer */
         IWineD3DDevice_SetRenderTarget(This->wineD3DDevice, 0,
-                                       target->WineD3DSurface);
-
-        vp.X = 0;
-        vp.Y = 0;
-        vp.Width = target->surface_desc.dwWidth;
-        vp.Height = target->surface_desc.dwHeight;
-        vp.MinZ = 0.0;
-        vp.MaxZ = 1.0;
-        IWineD3DDevice_SetViewport(This->wineD3DDevice,
-                                   &vp);
-
+                                       target->WineD3DSurface,
+                                       TRUE);
         object->OffScreenTarget = TRUE;
     }
     else
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index a1b8944..f212a9d 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -6184,9 +6184,9 @@ void stretch_rect_fbo(IWineD3DDevice *iface, IWineD3DSurface *src_surface, WINED
     context_release(context);
 }
 
-static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderTarget(IWineD3DDevice *iface, DWORD RenderTargetIndex, IWineD3DSurface *pRenderTarget) {
+static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderTarget(IWineD3DDevice *iface, DWORD RenderTargetIndex, IWineD3DSurface *pRenderTarget,
+                                                         BOOL set_viewport) {
     IWineD3DDeviceImpl *This = (IWineD3DDeviceImpl *)iface;
-    int dxVersion = ( (IWineD3DImpl *) This->wineD3D)->dxVersion;
 
     TRACE("(%p) : Setting rendertarget %d to %p\n", This, RenderTargetIndex, pRenderTarget);
 
@@ -6220,7 +6220,7 @@ static HRESULT WINAPI IWineD3DDeviceImpl_SetRenderTarget(IWineD3DDevice *iface,
     This->render_targets[RenderTargetIndex] = pRenderTarget;
 
     /* Render target 0 is special */
-    if(RenderTargetIndex == 0 && dxVersion > 7) {
+    if(RenderTargetIndex == 0 && set_viewport) {
         /* Finally, reset the viewport and scissor rect as the MSDN states.
          * Tests show that stateblock recording is ignored, the change goes
          * directly into the primary stateblock.
diff --git a/include/wine/wined3d.idl b/include/wine/wined3d.idl
index b690b39..25a4870 100644
--- a/include/wine/wined3d.idl
+++ b/include/wine/wined3d.idl
@@ -3205,7 +3205,8 @@ interface IWineD3DDevice : IWineD3DBase
     );
     HRESULT SetRenderTarget(
         [in] DWORD render_target_idx,
-        [in] IWineD3DSurface *render_target
+        [in] IWineD3DSurface *render_target,
+        [in] BOOL set_viewport
     );
     HRESULT GetRenderTarget(
         [in] DWORD render_target_idx,




More information about the wine-cvs mailing list