DXGL r146 - Code Review

Jump to navigation Jump to search
Repository:DXGL
Revision:r145‎ | r146 | r147 >
Date:01:07, 8 May 2012
Author:admin
Status:new
Tags:
Comment:
Add per-vertex colors
Add Signed Add color op
Modified paths:
  • /ddraw/glDirect3DDevice.cpp (modified) (history)
  • /ddraw/shadergen.cpp (modified) (history)

Diff [purge]

Index: ddraw/glDirect3DDevice.cpp
@@ -1175,6 +1175,7 @@
11761176 case D3DTOP_MODULATE2X:
11771177 case D3DTOP_MODULATE4X:
11781178 case D3DTOP_ADD:
 1179+ case D3DTOP_ADDSIGNED:
11791180 break;
11801181 default:
11811182 return D3DERR_UNSUPPORTEDCOLOROPERATION;
Index: ddraw/shadergen.cpp
@@ -261,6 +261,8 @@
262262 static const char op_spotlight[] = "SpotLight(lightX);\n";
263263 static const char op_colorout[] = "gl_FrontColor = (material.diffuse * diffuse) + (material.ambient * ambient) + material.emissive;\n\
264264 gl_FrontSecondaryColor = (material.specular * specular);\n";
 265+static const char op_colorvert[] = "gl_FrontColor = rgba0.bgra;\n";
 266+static const char op_color2vert[] = "gl_FrontSecondaryColor = rgba1.bgra;\n";
265267 static const char op_colorfragout[] = "gl_FragColor = vec4(color,alpha);\n";
266268 static const char op_colorfragin[] = "color = gl_Color.rgb;\n\
267269 alpha = gl_Color.a;\n";
@@ -411,11 +413,11 @@
412414 vsrc->append(mainstart);
413415 if((id>>50)&1) vsrc->append(op_passthru);
414416 else vsrc->append(op_transform);
415 - vsrc->append(op_resetcolor);
416417 if((id>>49)&1) vsrc->append(op_normalize);
417418 else vsrc->append(op_normalpassthru);
418419 if(numlights)
419420 {
 421+ vsrc->append(op_resetcolor);
420422 for(i = 0; i < numlights; i++)
421423 {
422424 if(id>>(38+i)&1)
@@ -440,8 +442,13 @@
441443 }
442444 }
443445 }
 446+ vsrc->append(op_colorout);
444447 }
445 - vsrc->append(op_colorout);
 448+ else
 449+ {
 450+ if((id>>35)&1) vsrc->append(op_colorvert);
 451+ if((id>>36)&1) vsrc->append(op_color2vert);
 452+ }
446453 int texindex;
447454 for(i = 0; i < 8; i++)
448455 {
@@ -622,6 +629,9 @@
623630 case D3DTOP_ADD:
624631 fsrc->append("color = " + arg1 + " + " + arg2 + ";\n");
625632 break;
 633+ case D3DTOP_ADDSIGNED:
 634+ fsrc->append("color = " + arg1 + " + " + arg2 + " - .5;\n");
 635+ break;
626636 }
627637 }
628638 fsrc->append(op_colorfragout);