[WINED3D 4/5] Added ability to generate GLSL in vertex shaders
Jason Green
jave27 at gmail.com
Thu May 18 23:49:41 CDT 2006
---
dlls/wined3d/vertexshader.c | 25 +++++++++++++++++++++++--
1 files changed, 23 insertions(+), 2 deletions(-)
a2e775a6d2085fdda9072bfc982cef6b836f040c
diff --git a/dlls/wined3d/vertexshader.c b/dlls/wined3d/vertexshader.c
index 29a92d1..3470730 100644
--- a/dlls/wined3d/vertexshader.c
+++ b/dlls/wined3d/vertexshader.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
@@ -1063,8 +1064,28 @@ #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));
+ checkGLcall("glCreateShaderObjectARB");
+
+ /* Generate the bulk of the shader code */
+ generate_base_shader( (IWineD3DBaseShader*) This, &buffer, pFunction);
+
+ 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, "!!ARBvp1.0\n");
--
1.3.3
More information about the wine-patches
mailing list