Stefan Dösinger : ddraw: Implement D3DRENDERSTATE_TEXTUREMAPBLEND.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 9 16:18:35 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: de5a2f3fbe708889a9fbc2fd51f94f3ce3ec5781
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=de5a2f3fbe708889a9fbc2fd51f94f3ce3ec5781

Author: Stefan Dösinger <stefan at codeweavers.com>
Date:   Wed Aug  9 19:30:57 2006 +0200

ddraw: Implement D3DRENDERSTATE_TEXTUREMAPBLEND.

---

 dlls/ddraw/device.c |   46 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 46 insertions(+), 0 deletions(-)

diff --git a/dlls/ddraw/device.c b/dlls/ddraw/device.c
index 982ec16..c9d5854 100644
--- a/dlls/ddraw/device.c
+++ b/dlls/ddraw/device.c
@@ -2241,6 +2241,52 @@ IDirect3DDeviceImpl_7_SetRenderState(IDi
                                                        Value);
         }
 
+        case D3DRENDERSTATE_TEXTUREMAPBLEND:
+        {
+            /* Old texture combine setup style, superseded by texture stage states
+             * in D3D7. It is safe for us to wrap it to texture stage states.
+             */
+            switch ( (D3DTEXTUREBLEND) Value)
+            {
+                case D3DTBLEND_MODULATE:
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
+                    break;
+
+                case D3DTBLEND_MODULATEALPHA:
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG2, D3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, D3DTOP_MODULATE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
+                    break;
+
+                case D3DTBLEND_DECAL:
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
+                    break;
+
+                case D3DTBLEND_DECALALPHA:
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAARG2, D3DTA_CURRENT);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
+                    IWineD3DDevice_SetTextureStageState(iface, 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
+                    break;
+
+                default:
+                    ERR("Unhandled texture environment %ld !\n",Value);
+                }
+                return D3D_OK;
+            break;
+        }
+
         default:
             return IWineD3DDevice_SetRenderState(This->wineD3DDevice,
                                                  RenderStateType,




More information about the wine-cvs mailing list