Roderick Colenbrander : wined3d: Draw buffers support.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Aug 10 04:43:12 CDT 2006


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

Author: Roderick Colenbrander <thunderbird2k at gmx.net>
Date:   Wed Aug  9 22:54:14 2006 +0200

wined3d: Draw buffers support.

---

 dlls/wined3d/glsl_shader.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 62f27e3..e5b8113 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -562,6 +562,7 @@ static void shader_glsl_get_register_nam
     /* oPos, oFog and oPts in D3D */
     const char* hwrastout_reg_names[] = { "gl_Position", "gl_FogFragCoord", "gl_PointSize" };
 
+    WineD3D_GL_Info *gl_info = &((IWineD3DImpl*)((IWineD3DPixelShaderImpl*)arg->shader)->wineD3DDevice->wineD3D)->gl_info;
     DWORD reg = param & D3DSP_REGNUM_MASK;
     DWORD regtype = shader_get_regtype(param);
     IWineD3DBaseShaderImpl* This = (IWineD3DBaseShaderImpl*) arg->shader;
@@ -641,10 +642,17 @@ static void shader_glsl_get_register_nam
             sprintf(tmpStr, "Vsampler%lu", reg);
     break;
     case D3DSPR_COLOROUT:
-        sprintf(tmpStr, "gl_FragData[%lu]", reg);
-        if (reg > 0) {
-            /* TODO: See GL_ARB_draw_buffers */
-            FIXME("Unsupported write to render target %lu\n", reg);
+        if (GL_SUPPORT(ARB_DRAW_BUFFERS)) {
+            sprintf(tmpStr, "gl_FragData[%lu]", reg);
+            if (reg > 0) {
+                /* TODO: See GL_ARB_draw_buffers */
+                FIXME("Unsupported write to render target %lu\n", reg);
+            }
+        } else { /* On older cards with GLSL support like the GeforceFX there's only one buffer. */
+            if (reg > 0)
+                WARN("This OpenGL implementation doesn't support writing to multiple render targets!\n");
+            else
+                sprintf(tmpStr, "gl_FragColor");
         }
     break;
     case D3DSPR_RASTOUT:




More information about the wine-cvs mailing list