diff src/video/win32/SDL_d3drender.c @ 1988:1ee02169bbb0

Figured out how texture stages work, thanks to this: http://www.toymaker.info/Games/html/texture_states.html Both color and alpha source modulation work now! :)
author Sam Lantinga <slouken@libsdl.org>
date Mon, 28 Aug 2006 04:39:37 +0000
parents 36a08379b3f2
children 3863ba81c1d6
line wrap: on
line diff
--- a/src/video/win32/SDL_d3drender.c	Mon Aug 28 04:03:32 2006 +0000
+++ b/src/video/win32/SDL_d3drender.c	Mon Aug 28 04:39:37 2006 +0000
@@ -382,9 +382,24 @@
     IDirect3DDevice9_SetVertexShader(data->device, NULL);
     IDirect3DDevice9_SetFVF(data->device,
                             D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1);
+    IDirect3DDevice9_SetRenderState(data->device, D3DRS_ZENABLE, D3DZB_FALSE);
     IDirect3DDevice9_SetRenderState(data->device, D3DRS_CULLMODE,
                                     D3DCULL_NONE);
     IDirect3DDevice9_SetRenderState(data->device, D3DRS_LIGHTING, FALSE);
+    /* Enable color modulation by diffuse color */
+    IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_COLOROP,
+                                          D3DTOP_MODULATE);
+    IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_COLORARG1,
+                                          D3DTA_TEXTURE);
+    IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_COLORARG2,
+                                          D3DTA_DIFFUSE);
+    /* Enable alpha modulation by diffuse alpha */
+    IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_ALPHAOP,
+                                          D3DTOP_MODULATE);
+    IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_ALPHAARG1,
+                                          D3DTA_TEXTURE);
+    IDirect3DDevice9_SetTextureStageState(data->device, 0, D3DTSS_ALPHAARG2,
+                                          D3DTA_DIFFUSE);
 
     return renderer;
 }