Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 12.00 KB | None | 0 0
  1. -- GLSL Lua shaders for CubeCreate
  2.  
  3. local function lazyshader(stype, name, v, f)
  4.     Shader.defer(stype, name, "Shader.normal([[" .. v .. "]],[[" .. f .. "]])")
  5. end
  6.  
  7. lmcoordscale = 1.0 / 32767.0
  8.  
  9. ---------------------------------------------------
  10. --
  11. -- used for any textured polys that don't have a shader set
  12. --
  13. ---------------------------------------------------
  14.  
  15. Shader.normal(4, "default",
  16.     [[
  17.         void main(void)
  18.         {
  19.             gl_Position = ftransform();
  20.             gl_TexCoord[0] = gl_MultiTexCoord0;
  21.             gl_FrontColor = gl_Color;
  22.         }
  23.     ]],
  24.     [[
  25.         uniform sampler2D tex0;
  26.         void main(void)
  27.         {
  28.             gl_FragColor = gl_Color * texture2D(tex0, gl_TexCoord[0].xy);
  29.         }
  30.     ]]
  31. )
  32.  
  33. Shader.normal(4, "rect",
  34.     [[
  35.         void main(void)
  36.         {
  37.             gl_Position = ftransform();
  38.             gl_TexCoord[0] = gl_MultiTexCoord0;
  39.             gl_FrontColor = gl_Color;
  40.         }
  41.     ]],
  42.     [[
  43.         #extension GL_ARB_texture_rectangle : enable
  44.         uniform sampler2DRect tex0;
  45.         void main(void)
  46.         {
  47.             gl_FragColor = gl_Color * texture2DRect(tex0, gl_TexCoord[0].xy);
  48.         }
  49.     ]]
  50. )
  51.  
  52. Shader.normal(4, "cubemap",
  53.     [[
  54.         void main(void)
  55.         {
  56.             gl_Position = ftransform();
  57.             gl_TexCoord[0] = gl_MultiTexCoord0;
  58.             gl_FrontColor = gl_Color;
  59.         }
  60.     ]],
  61.     [[
  62.         uniform samplerCube tex0;
  63.         void main(void)
  64.         {
  65.             gl_FragColor = gl_Color * textureCube(tex0, gl_TexCoord[0].xyz);
  66.         }
  67.     ]]
  68. )
  69.  
  70. Shader.normal(4, "rgbonly",
  71.     [[
  72.         void main(void)
  73.         {
  74.             gl_Position = ftransform();
  75.             gl_TexCoord[0] = gl_MultiTexCoord0;
  76.             gl_FrontColor = gl_Color;
  77.         }
  78.     ]],
  79.     [[
  80.         uniform sampler2D tex0;
  81.         void main(void)
  82.         {
  83.             gl_FragColor.rgb = gl_Color.rgb * texture2D(tex0, gl_TexCoord[0].xy).rgb;
  84.             gl_FragColor.a   = gl_Color.a;
  85.         }
  86.     ]]
  87. )
  88.  
  89. ----------------------------------------------------------------------
  90. --
  91. -- same, but now without texture sampling (some HUD stuff needs this)
  92. --
  93. ----------------------------------------------------------------------
  94.  
  95. Shader.normal(4, "notexture",
  96.     [[
  97.         void main(void)
  98.         {
  99.             gl_Position = ftransform();
  100.             gl_FrontColor = gl_Color;
  101.         }
  102.     ]],
  103.     [[
  104.         void main(void)
  105.         {
  106.             gl_FragColor = gl_Color;
  107.         }
  108.     ]]
  109. )
  110.  
  111. Shader.normal(4, "notextureglsl",
  112.     [[
  113.         void main(void)
  114.         {
  115.             gl_Position = ftransform();
  116.             gl_FrontColor = gl_Color;
  117.         }
  118.     ]],
  119.     [[
  120.         void main(void)
  121.         {
  122.             gl_FragColor = gl_Color;
  123.         }
  124.     ]]
  125. )
  126.  
  127. ----------------------------------------------------------------------
  128. --
  129. -- fogged variants of default shaders
  130. --
  131. ----------------------------------------------------------------------
  132.  
  133. Shader.normal(4, "fogged",
  134.     [[
  135.         #pragma CUBE2_fog
  136.         void main(void)
  137.         {
  138.             gl_Position = ftransform();
  139.             gl_TexCoord[0] = gl_MultiTexCoord0;
  140.             gl_FrontColor = gl_Color;
  141.         }
  142.     ]],
  143.     [[
  144.         uniform sampler2D tex0;
  145.         void main(void)
  146.         {
  147.             gl_FragColor = gl_Color * texture2D(tex0, gl_TexCoord[0].xy);
  148.         }
  149.     ]]
  150. )
  151.  
  152. Shader.normal(4, "foggednotexture",
  153.     [[
  154.         #pragma CUBE2_fog
  155.         void main(void)
  156.         {
  157.             gl_Position = ftransform();
  158.             gl_FrontColor = gl_Color;
  159.         }
  160.     ]],
  161.     [[
  162.         void main(void)
  163.         {
  164.             gl_FragColor = gl_Color;
  165.         }
  166.     ]]
  167. )
  168.  
  169. Shader.normal(4, "foggednotextureglsl",
  170.     [[
  171.         #pragma CUBE2_fog
  172.         void main(void)
  173.         {
  174.             gl_Position = ftransform();
  175.             gl_FrontColor = gl_Color;
  176.         }
  177.     ]],
  178.     [[
  179.         void main(void)
  180.         {
  181.             gl_FragColor = gl_Color;
  182.         }
  183.     ]]
  184. )
  185.  
  186. ----------------------------------------------------------------------
  187. --
  188. -- for filling the z-buffer only (i.e. multi-pass rendering, OQ)
  189. --
  190. ----------------------------------------------------------------------
  191.  
  192. Shader.normal(4, "nocolor",
  193.     [[
  194.         void main() { gl_Position = ftransform(); }
  195.     ]],
  196.     [[
  197.         void main() {}
  198.     ]]
  199. )
  200.  
  201. Shader.normal(4, "nocolorglsl",
  202.     [[
  203.         void main() { gl_Position = ftransform(); }
  204.     ]],
  205.     [[
  206.         void main() {}
  207.     ]]
  208. )
  209.  
  210. --------------------------------------------------------
  211. --
  212. -- default lightmapped world shader.. does texcoord gen
  213. --
  214. -------------------------------------------------------
  215.  
  216. -- yay for cubescript-port hacks >.>
  217. sworldargs = {}
  218. gworldargs = {}
  219.  
  220. function worldshader(...)
  221.     sworldargs = { ... }
  222.     local stype = 4
  223.     if not string.find(sworldargs[1], "env") then stype = stype + 2 end
  224.     Shader.normal(stype, sworldargs[1],
  225.         [[
  226.             #pragma CUBE2_fog
  227.             <% if #sworldargs >= 5 then return sworldargs[5] end %>
  228.             uniform vec4 texgenscroll;
  229.             void main(void)
  230.             {
  231.                 gl_Position = ftransform();
  232.                 gl_TexCoord[0].xy = gl_MultiTexCoord0.xy + texgenscroll.xy;
  233.                 gl_TexCoord[1].xy = gl_MultiTexCoord1.xy * <%=lmcoordscale%>;
  234.  
  235.                 <%=sworldargs[2]%>
  236.  
  237.                 #pragma CUBE2_shadowmap
  238.                 #pragma CUBE2_dynlight
  239.                 #pragma CUBE2_water
  240.             }
  241.         ]],
  242.         [[
  243.             <% if #sworldargs >= 5 then return sworldargs[5] end %>
  244.             <% if #sworldargs >= 6 then return sworldargs[6] end %>
  245.             uniform vec4 colorparams;
  246.             uniform sampler2D diffusemap, lightmap;
  247.             void main(void)
  248.             {
  249.                 vec4 diffuse = texture2D(diffusemap, gl_TexCoord[0].xy);  
  250.                 vec4 lm = texture2D(lightmap, gl_TexCoord[1].xy);
  251.  
  252.                 #pragma CUBE2_shadowmap lm
  253.                 #pragma CUBE2_dynlight lm
  254.  
  255.                 <%=sworldargs[3]%>
  256.  
  257.                 diffuse *= colorparams;
  258.                 <% if #sworldargs < 4 or sworldargs[4] == "" then return 'gl_FragColor = diffuse * lm;' else return sworldargs[4] end %>
  259.  
  260.                 #pragma CUBE2_water
  261.             }
  262.         ]]
  263.     )
  264.     sworldargs = nil
  265. end
  266.  
  267. function glareworldshader(...)
  268.     gworldargs = { ... }
  269.     Shader.variant(not string.find(gworldargs[1], "env") and 4 or 6, gworldargs[1], 4,
  270.         [[
  271.             #pragma CUBE2_fog
  272.             <% if #gworldargs >= 4 then return gworldargs[4] end %>
  273.             uniform vec4 texgenscroll;
  274.             void main(void)
  275.             {
  276.                 gl_Position = ftransform();
  277.                 gl_TexCoord[0].xy = gl_MultiTexCoord0.xy + texgenscroll.xy;
  278.                 gl_TexCoord[1].xy = gl_MultiTexCoord1.xy * <%=lmcoordscale%>;
  279.  
  280.                 <%=gworldargs[2]%>
  281.             }
  282.         ]],
  283.         [[
  284.             <% if #gworldargs >= 4 then return gworldargs[4] end %>
  285.             <% if #gworldargs >= 5 then return gworldargs[5] end %>
  286.             uniform vec4 colorparams;
  287.             uniform sampler2D diffusemap, lightmap;
  288.             void main(void)
  289.             {
  290.                 <%=gworldargs[3]%>
  291.             }
  292.         ]]
  293.     )
  294.     gworldargs = nil
  295. end
  296.  
  297. worldshader("stdworld", "", "")
  298.  
  299. Shader.defer(4, "decalworld",
  300.     [[
  301.         worldshader("decalworld", "",
  302.             [=[
  303.                 vec4 diffuse2 = texture2D(decal, gl_TexCoord[0].xy);
  304.                 diffuse.rgb = mix(diffuse.rgb, diffuse2.rgb, diffuse2.a);
  305.             ]=], "", "", "uniform sampler2D decal;"
  306.         )
  307.     ]]
  308. )
  309.  
  310. Shader.defer(4, "glowworld",
  311.     [[
  312.         Shader.defUniformParam("glowcolor", 1, 1, 1) -- glow color
  313.         worldshader("glowworld", "", "",
  314.             [=[
  315.                 vec3 glow = texture2D(glowmap, gl_TexCoord[0].xy).rgb;
  316.                 glow *= glowcolor.rgb;
  317.                 gl_FragColor = diffuse*lm + vec4(glow, 0.0);
  318.             ]=], "", "uniform sampler2D glowmap;"
  319.         )
  320.         glareworldshader("glowworld", "",
  321.             [=[
  322.                 vec3 glow = texture2D(glowmap, gl_TexCoord[0].xy).rgb;
  323.                 glow *= glowcolor.rgb;
  324.                 float k = max(glow.r, max(glow.g, glow.b));
  325.                 gl_FragColor.rgb = min(k*k*32.0, 1.0) * glow;
  326.                 #pragma CUBE2_variantoverride gl_FragColor.a = texture2D(lightmap, gl_TexCoord[1].xy).a; --
  327.                 gl_FragColor.a = colorparams.a;
  328.             ]=], "",
  329.             [=[
  330.                 uniform sampler2D glowmap;
  331.                 #pragma CUBE2_variant uniform sampler2D lightmap;
  332.             ]=]
  333.         )
  334.     ]]
  335. )
  336.  
  337. Shader.defer(4, "pulseworld",
  338.     [[
  339.         Shader.defUniformParam("pulsespeed", 1) -- pulsefrequency (Hz)
  340.         worldshader("pulseworld",
  341.             "pulse = abs(fract(millis.x * pulsespeed.x)*2.0 - 1.0);",
  342.             [=[
  343.                 vec3 diffuse2 = texture2D(decal, gl_TexCoord[0].xy).rgb;
  344.                 diffuse.rgb = mix(diffuse.rgb, diffuse2, pulse);
  345.             ]=], "",
  346.             "uniform vec4 millis; varying float pulse;",
  347.             "uniform sampler2D decal;"
  348.         )
  349.     ]]
  350. )
  351.  
  352. Shader.defer(4, "pulseglowworld",
  353.     [[
  354.         Shader.defUniformParam("glowcolor", 1, 1, 1) -- glow color
  355.         Shader.defUniformParam("pulseglowspeed", 1) -- pulse frequency (Hz)
  356.         Shader.defUniformParam("pulseglowcolor", 0, 0, 0) -- pulse glow color
  357.         worldshader("pulseglowworld",
  358.             [=[
  359.                 pulse = mix(glowcolor.rgb, pulseglowcolor.rgb, abs(fract(millis.x * pulseglowspeed.x)*2.0 - 1.0));
  360.             ]=], "",
  361.             [=[
  362.                 vec3 glow = texture2D(glowmap, gl_TexCoord[0].xy).rgb;
  363.                 gl_FragColor = diffuse*lm + vec4(glow*pulse, 0.0);
  364.             ]=], "uniform vec4 millis; varying vec3 pulse;", "uniform sampler2D glowmap;"
  365.         )
  366.         glareworldshader("pulseglowworld",
  367.             [=[
  368.                 pulse = mix(glowcolor.rgb, pulseglowcolor.rgb, abs(fract(millis.x * pulseglowspeed.x)*2.0 - 1.0));
  369.             ]=],
  370.             [=[
  371.                 vec3 glow = texture2D(glowmap, gl_TexCoord[0].xy).rgb;
  372.                 glow *= pulse;
  373.                 float k = max(glow.r, max(glow.g, glow.b));
  374.                 gl_FragColor.rgb = min(k*k*32.0, 1.0) * glow;
  375.                 #pragma CUBE2_variantoverride gl_FragColor.a = texture2D(lightmap, gl_TexCoord[1].xy).a; --
  376.                 gl_FragColor.a = colorparams.a;
  377.             ]=], "uniform vec4 millis; varying vec3 pulse;",
  378.             [=[
  379.                 uniform sampler2D glowmap;
  380.                 #pragma CUBE2_variant uniform sampler2D lightmap;
  381.             ]=]
  382.         )
  383.     ]]
  384. )
  385.  
  386. Shader.normal(4, "fogworld",
  387.     [[
  388.         void main(void)
  389.         {
  390.             gl_Position = ftransform();
  391.         }
  392.     ]],
  393.     [[
  394.         void main(void)
  395.         {
  396.             gl_FragColor = gl_Fog.color;
  397.         }
  398.     ]]
  399. )
  400.  
  401. Shader.normal(4, "noglareworld",
  402.     [[
  403.         void main(void)
  404.         {
  405.             gl_Position = ftransform();
  406.         }
  407.     ]],
  408.     [[
  409.         void main(void)
  410.         {
  411.             gl_FragColor = vec4(0.0);
  412.         }
  413.     ]]
  414. )
  415.  
  416. Shader.normal(4, "noglareblendworld",
  417.     [[
  418.         void main(void)
  419.         {
  420.             gl_Position = ftransform();
  421.             gl_TexCoord[0].xy = gl_MultiTexCoord1.xy * <%=lmcoordscale%>;
  422.         }
  423.     ]],
  424.     [[
  425.         uniform sampler2D lightmap;
  426.         void main(void)
  427.         {
  428.             gl_FragColor.rgb = vec3(0.0);
  429.             gl_FragColor.a = texture2D(lightmap, gl_TexCoord[0].xy).a;
  430.         }
  431.     ]]
  432. )
  433.  
  434. Shader.normal(4, "noglarealphaworld",
  435.     [[
  436.         void main(void)
  437.         {
  438.             gl_Position = ftransform();
  439.         }
  440.     ]],
  441.     [[
  442.         uniform vec4 colorparams;
  443.         uniform sampler2D lightmap;
  444.         void main(void)
  445.         {
  446.             gl_FragColor.rgb = vec3(0.0);
  447.             gl_FragColor.a = colorparams.a;
  448.         }
  449.     ]]
  450. )
  451.  
  452. Shader.defer(6, "envworld",
  453.     [[
  454.         Shader.defUniformParam("envscale", 0.2, 0.2, 0.2) -- reflectivity
  455.         worldshader("envworld",
  456.             [=[
  457.                 normal = gl_Normal;
  458.                 camvec = camera.xyz - gl_Vertex.xyz;
  459.             ]=],
  460.             [=[
  461.                 vec3 reflect = textureCube(envmap, 2.0*normal*dot(camvec, normal) - camvec).rgb;
  462.             ]=],
  463.             [=[
  464.                 diffuse *= lm;
  465.                 gl_FragColor.rgb = mix(diffuse.rgb, reflect, envscale.rgb);
  466.                 gl_FragColor.a = diffuse.a;
  467.             ]=], "uniform vec4 camera; varying vec3 normal, camvec;", "uniform samplerCube envmap;"
  468.         )
  469.  
  470.         Shader.defUniformParam("envscale", 0.2, 0.2, 0.2) -- reflectivity
  471.         worldshader("envworldfast",
  472.             [=[
  473.                 vec3 camvec = camera.xyz - gl_Vertex.xyz;
  474.                 rvec = 2.0*gl_Normal*dot(camvec, gl_Normal) - camvec;
  475.             ]=],
  476.             [=[
  477.                 vec3 reflect = textureCube(envmap, rvec).rgb;
  478.             ]=],
  479.             [=[
  480.                 diffuse *= lm;
  481.                 gl_FragColor.rgb = mix(diffuse.rgb, reflect, envscale.rgb);
  482.                 gl_FragColor.a = diffuse.a;
  483.             ]=], "uniform vec4 camera; varying vec3 rvec;", "uniform samplerCube envmap;"
  484.         )
  485.  
  486.         Shader.defUniformParam("envscale", 0.2, 0.2, 0.2) -- reflectivity
  487.         worldshader("envworldalt", "", "")
  488.  
  489.         Shader.alt("envworld", "envworldalt")
  490.         Shader.fast("envworld", "envworldfast", 2)
  491.         Shader.fast("envworld", "envworldalt", 1)
  492.     ]]
  493. )
  494.  
  495. Shader.normal(4, "depthfxworld",
  496.     [[
  497.         uniform vec4 depthscale, depthoffsets;
  498.         void main(void)
  499.         {
  500.             gl_Position = ftransform();
  501.             gl_TexCoord[0] = depthoffsets - (gl_ModelViewMatrix * gl_Vertex).z*depthscale;
  502.         }
  503.     ]],
  504.     [[
  505.         void main(void)
  506.         {
  507.             gl_FragColor = gl_TexCoord[0];
  508.         }
  509.     ]]
  510. )
  511.  
  512. Shader.normal(4, "depthfxsplitworld",
  513.     [[
  514.         uniform vec4 depthscale, depthoffsets;
  515.         void main(void)
  516.         {
  517.             gl_Position = ftransform();
  518.             gl_TexCoord[0] = depthoffsets - (gl_ModelViewMatrix * gl_Vertex).z*depthscale;
  519.         }
  520.     ]],
  521.     [[
  522.         void main(void)
  523.         {
  524.             vec4 ranges = vec4(gl_TexCoord[0].x, fract(gl_TexCoord[0].yzw));
  525.             ranges.xy -= ranges.yz*vec2(0.00390625, 0.00390625);
  526.             gl_FragColor = ranges;
  527.         }
  528.     ]]
  529. )
  530.  
  531. -- bumptype:
  532. --  e -> reserve envmap texture slot
  533. --  o -> orthonormalize
  534. --  t -> tangent space cam
  535. --  r -> envmap reflection
  536. --  R -> modulate envmap reflection with spec map
  537. --  s -> spec
  538. --  S -> spec map
  539. --  p -> parallax
  540. --  P -> steep parallax (7 steps)
  541. --  g -> glow
  542. --  G -> pulse glow
  543. --  i -> glare intensity
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement