[WINED3D 5/5] Added ability to generate GLSL in pixel shaders

Jason Green jave27 at gmail.com
Thu May 18 23:50:36 CDT 2006


---

 dlls/wined3d/pixelshader.c |   28 ++++++++++++++++++++++++++--
 1 files changed, 26 insertions(+), 2 deletions(-)

a94f1d4507d5f48c8081e55febde796057b2cc7c
diff --git a/dlls/wined3d/pixelshader.c b/dlls/wined3d/pixelshader.c
index 05241d2..d3a251b 100644
--- a/dlls/wined3d/pixelshader.c
+++ b/dlls/wined3d/pixelshader.c
@@ -5,6 +5,7 @@
  * Copyright 2002-2003 Raphael Junqueira
  * Copyright 2005 Oliver Stieber
  * Copyright 2006 Ivan Gyurdiev
+ * Copyright 2006 Jason Green
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -1331,8 +1332,31 @@ #endif
     buffer.bsize = 0;
     buffer.lineNo = 0;

-    /* TODO: Optionally, generate the GLSL shader instead */
-    if (GL_SUPPORT(ARB_VERTEX_PROGRAM)) {
+    if (wined3d_settings.shader_mode == SHADER_GLSL)
+    {
+        /* Create the hw GLSL shader program and assigned it as the
baseShader.prgId */
+        GLhandleARB shader_obj =
GL_EXTCALL(glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB));
+
+        /* TODO: Add any ps-specific declarations to buffer here */
+
+        /* Generate the bulk of the shader code */
+        generate_base_shader( (IWineD3DBaseShader*) This, &buffer, pFunction);
+
+        if (This->baseShader.hex_version < D3DPS_VERSION(2,0))
+            shader_addline(&buffer, "gl_FragColor = R0;\n");
+        shader_addline(&buffer, "}\n\0");
+
+        GL_EXTCALL(glShaderSourceARB(shader_obj, 1, (const
char**)&buffer.buffer, NULL));
+        GL_EXTCALL(glCompileShaderARB(shader_obj));
+        checkGLcall("glCompileShaderARB");
+
+        /* Check for errors in our shader */
+        if (shader_is_glsl_error( (IWineD3DBaseShader*) This,
shader_obj, GL_OBJECT_COMPILE_STATUS_ARB))
+            This->baseShader.prgId = -1;
+        else
+            This->baseShader.prgId = shader_obj;
+
+    } else if (wined3d_settings.shader_mode == SHADER_ARB) {
         /*  Create the hw ARB shader */
         shader_addline(&buffer, "!!ARBfp1.0\n");

--
1.3.3



More information about the wine-patches mailing list