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