diff src/scripts/graphics.lua @ 1217:8b07ec694e9a

Changed vertex shader callback function name from 'transform' to 'position', added more vertex shader defines (some to make it easier to eventually have a GLES2 backend), hopefully updated Visual Studio project with changed filenames
author Alexander Szpakowski <amaranth72@gmail.com>
date Fri, 04 Jan 2013 01:20:38 -0400
parents 9e6915ef96c8
children 9ae7a66b03bc
line wrap: on
line diff
--- a/src/scripts/graphics.lua	Tue Jan 01 17:54:14 2013 -0400
+++ b/src/scripts/graphics.lua	Fri Jan 04 01:20:38 2013 -0400
@@ -1283,39 +1283,56 @@
 		love.graphics.printf(...)
 	end
 	
+	local GLSL_VERSION = "#version 120"
+	
 	local GLSL_VERT = {
 		HEADER = [[
-#version 120
+#define VERTEX
+
 #define number float
 #define Image sampler2D
 #define extern uniform
 #define Texel texture2D
-#define VERTEX
+
+#define ModelViewMatrix gl_ModelViewMatrix
+#define ModelViewProjectionMatrix gl_ModelViewProjectionMatrix
+#define NormalMatrix gl_NormalMatrix
+#define ExternColor vec4(1.0)
+#define VertexColor gl_Color
+#define VaryingColor gl_FrontColor
+#define VertexTexCoord gl_MultiTexCoord0
+#define VaryingTexCoord gl_TexCoord[0]
+#define VertexPosition gl_Vertex
+
 uniform sampler2D _tex0_;
 #line 0]],
 		FOOTER = [[
 void main() {
-	gl_TexCoord[0] = gl_MultiTexCoord0;
-	gl_FrontColor = gl_Color;
-	gl_Position = transform(gl_ModelViewProjectionMatrix, gl_Vertex);
+	VaryingTexCoord = VertexTexCoord;
+	VaryingColor = VertexColor * ExternColor;
+	gl_Position = position(ModelViewProjectionMatrix, VertexPosition);
 }]],
 	}
 	
 	local GLSL_FRAG = {
 		HEADER = [[
-#version 120
+#define PIXEL
+
 #define number float
 #define Image sampler2D
 #define extern uniform
 #define Texel texture2D
-#define PIXEL
+
+#define VaryingColor gl_Color
+#define VaryingTexCoord gl_TexCoord[0]
+
 uniform sampler2D _tex0_;
 #line 0]],
 		FOOTER = [[
 void main() {
 	// fix weird crashing issue in OSX when _tex0_ is unused within effect()
 	float dummy = texture2D(_tex0_, vec2(.5)).r;
-	gl_FragColor = effect(gl_Color, _tex0_, gl_TexCoord[0].xy, gl_FragCoord.xy);
+	gl_FragColor = effect(VaryingColor, _tex0_, VaryingTexCoord.st, gl_FragCoord.xy);
 }]],
 	}
 
@@ -1326,14 +1343,14 @@
 			if s:match("vec4%s*effect%(") then
 				fragcode = vertcode -- first argument contains frag shader code
 			end
-			if not s:match("vec4%s*transform%(") then
+			if not s:match("vec4%s*position%(") then
 				vertcode = nil -- first argument doesn't contain vert shader code
 			end
 		end
 		if fragcode then
 			local s = fragcode:gsub("\r\n\t", " ")
 			s = s:gsub("%w+(%s+)%(", "")
-			if s:match("vec4%s*transform%(") then
+			if s:match("vec4%s*position%(") then
 				vertcode = fragcode -- second argument contains vert shader code
 			end
 			if not s:match("vec4%s*effect%(") then
@@ -1342,10 +1359,10 @@
 		end
 
 		if vertcode then
-			vertcode = table.concat({GLSL_VERT.HEADER, vertcode, GLSL_VERT.FOOTER}, "\n")
+			vertcode = table.concat({GLSL_VERSION, GLSL_VERT.HEADER, vertcode, GLSL_VERT.FOOTER}, "\n")
 		end
 		if fragcode then
-			fragcode = table.concat({GLSL_FRAG.HEADER, fragcode, GLSL_FRAG.FOOTER}, "\n")
+			fragcode = table.concat({GLSL_VERSION, GLSL_FRAG.HEADER, fragcode, GLSL_FRAG.FOOTER}, "\n")
 		end
 		
 		return vertcode, fragcode
@@ -1364,7 +1381,7 @@
 				-- ERROR 0:<linenumber>: error/warning(#[NUMBER]) [ERRORNAME]: <errormessage>
 				linenumber, what, message = l:match("^%w+: 0:(%d+):%s*(%w+)%([^%)]+%)%s*(.+)$")
 				if not linenumber then
-					-- OSX compiler message:
+					-- OSX compiler message (?):
 					-- ERROR: 0:<linenumber>: <errormessage>
 					what, linenumber, message = l:match("^(%w+): %d+:(%d+): (.+)$")
 				end
@@ -1399,13 +1416,14 @@
 
 	-- automagic uniform setter
 	local function shadereffect_dispatch_send(self, name, value, ...)
-		if type(value) == "number" then         -- scalar
+		local valuetype = type(value)
+		if valuetype == "number" then         -- scalar
 			self:sendFloat(name, value, ...)
-		elseif type(value) == "userdata" and value:typeOf("Image") then
+		elseif valuetype == "userdata" and value:typeOf("Image") then
 			self:sendImage(name, value)
-		elseif type(value) == "userdata" and value:typeOf("Canvas") then
+		elseif valuetype == "userdata" and value:typeOf("Canvas") then
 			self:sendCanvas(name, value)
-		elseif type(value) == "table" then      -- vector or matrix
+		elseif valuetype == "table" then      -- vector or matrix
 			if type(value[1]) == "number" then
 				self:sendFloat(name, value, ...)
 			elseif type(value[1]) == "table" then
@@ -1414,9 +1432,8 @@
 				error("Cannot send value (unsupported type: {"..type(value[1]).."}).")
 			end
 		else
-			local t = type(value)
-			if t == "userdata" and value.type then t = value.type end
-			error("Cannot send value (unsupported type: "..t..").")
+			if valuetype == "userdata" and value.type then valuetype = value.type end
+			error("Cannot send value (unsupported type: "..valuetype..").")
 		end
 	end
 
@@ -1447,13 +1464,6 @@
 		return love.graphics.newShaderEffect(nil, fragcode)
 	end
 	
-	function love.graphics.newVertexEffect(vertcode)
-		return love.graphics.newShaderEffect(vertcode, nil)
-	end
-	
 	love.graphics.setPixelEffect = love.graphics.setShaderEffect
 	love.graphics.getPixelEffect = love.graphics.getShaderEffect
-	
-	love.graphics.setVertexEffect = love.graphics.setShaderEffect
-	love.graphics.getVertexEffect = love.graphics.getShaderEffect
 end