propane 3.4.1-java → 3.7.1-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. checksums.yaml +4 -4
  2. data/.mvn/extensions.xml +1 -1
  3. data/.mvn/wrapper/MavenWrapperDownloader.java +2 -2
  4. data/.mvn/wrapper/maven-wrapper.properties +2 -2
  5. data/.travis.yml +1 -1
  6. data/CHANGELOG.md +9 -1
  7. data/Gemfile +2 -0
  8. data/README.md +9 -5
  9. data/Rakefile +10 -11
  10. data/bin/propane +3 -1
  11. data/lib/propane.rb +4 -2
  12. data/lib/propane/app.rb +2 -1
  13. data/lib/propane/creators/sketch_class.rb +7 -1
  14. data/lib/propane/creators/sketch_factory.rb +4 -2
  15. data/lib/propane/creators/sketch_writer.rb +1 -0
  16. data/lib/propane/helper_methods.rb +22 -23
  17. data/lib/propane/helpers/numeric.rb +2 -0
  18. data/lib/propane/helpers/version_error.rb +1 -0
  19. data/lib/propane/library.rb +5 -1
  20. data/lib/propane/library_loader.rb +2 -0
  21. data/lib/propane/native_folder.rb +10 -9
  22. data/lib/propane/native_loader.rb +3 -0
  23. data/lib/propane/runner.rb +20 -14
  24. data/lib/propane/version.rb +2 -1
  25. data/library/boids/boids.rb +21 -11
  26. data/library/color_group/color_group.rb +2 -0
  27. data/library/control_panel/control_panel.rb +8 -5
  28. data/library/dxf/dxf.rb +2 -0
  29. data/library/file_chooser/chooser.rb +10 -9
  30. data/library/file_chooser/file_chooser.rb +10 -9
  31. data/library/library_proxy/library_proxy.rb +2 -0
  32. data/library/net/net.rb +2 -0
  33. data/library/simplex_noise/simplex_noise.rb +2 -0
  34. data/library/slider/slider.rb +23 -22
  35. data/library/vector_utils/vector_utils.rb +4 -0
  36. data/library/video_event/video_event.rb +2 -0
  37. data/pom.rb +37 -36
  38. data/pom.xml +6 -6
  39. data/propane.gemspec +12 -10
  40. data/src/main/java/japplemenubar/JAppleMenuBar.java +3 -3
  41. data/src/main/java/monkstone/ColorUtil.java +1 -3
  42. data/src/main/java/monkstone/MathToolModule.java +10 -9
  43. data/src/main/java/monkstone/PropaneLibrary.java +2 -2
  44. data/src/main/java/monkstone/fastmath/Deglut.java +1 -1
  45. data/src/main/java/monkstone/filechooser/Chooser.java +1 -1
  46. data/src/main/java/monkstone/noise/SimplexNoise.java +2 -2
  47. data/src/main/java/monkstone/slider/CustomHorizontalSlider.java +1 -1
  48. data/src/main/java/monkstone/slider/CustomVerticalSlider.java +1 -1
  49. data/src/main/java/monkstone/slider/SimpleHorizontalSlider.java +1 -1
  50. data/src/main/java/monkstone/slider/SimpleVerticalSlider.java +1 -1
  51. data/src/main/java/monkstone/slider/SliderBar.java +1 -1
  52. data/src/main/java/monkstone/slider/SliderGroup.java +1 -1
  53. data/src/main/java/monkstone/slider/WheelHandler.java +1 -1
  54. data/src/main/java/monkstone/vecmath/package-info.java +1 -1
  55. data/src/main/java/monkstone/vecmath/vec2/Vec2.java +1 -1
  56. data/src/main/java/monkstone/vecmath/vec3/Vec3.java +1 -2
  57. data/src/main/java/monkstone/videoevent/CaptureEvent.java +1 -1
  58. data/src/main/java/monkstone/videoevent/MovieEvent.java +1 -1
  59. data/src/main/java/monkstone/videoevent/package-info.java +1 -1
  60. data/src/main/java/processing/awt/PGraphicsJava2D.java +781 -285
  61. data/src/main/java/processing/awt/PImageAWT.java +377 -0
  62. data/src/main/java/processing/awt/PShapeJava2D.java +56 -52
  63. data/src/main/java/processing/awt/PSurfaceAWT.java +308 -208
  64. data/src/main/java/processing/awt/ShimAWT.java +581 -0
  65. data/src/main/java/processing/core/PApplet.java +4225 -4855
  66. data/src/main/java/processing/core/PConstants.java +477 -447
  67. data/src/main/java/processing/core/PFont.java +914 -880
  68. data/src/main/java/processing/core/PGraphics.java +150 -134
  69. data/src/main/java/processing/core/PImage.java +275 -372
  70. data/src/main/java/processing/core/PMatrix.java +172 -159
  71. data/src/main/java/processing/core/PMatrix2D.java +478 -415
  72. data/src/main/java/processing/core/PMatrix3D.java +762 -735
  73. data/src/main/java/processing/core/PShape.java +2887 -2651
  74. data/src/main/java/processing/core/PShapeOBJ.java +97 -92
  75. data/src/main/java/processing/core/PShapeSVG.java +1705 -1490
  76. data/src/main/java/processing/core/PStyle.java +40 -37
  77. data/src/main/java/processing/core/PSurface.java +139 -97
  78. data/src/main/java/processing/core/PSurfaceNone.java +296 -218
  79. data/src/main/java/processing/core/PVector.java +995 -963
  80. data/src/main/java/processing/core/ThinkDifferent.java +12 -8
  81. data/src/main/java/processing/data/DoubleDict.java +756 -710
  82. data/src/main/java/processing/data/DoubleList.java +749 -696
  83. data/src/main/java/processing/data/FloatDict.java +748 -702
  84. data/src/main/java/processing/data/FloatList.java +751 -697
  85. data/src/main/java/processing/data/IntDict.java +720 -673
  86. data/src/main/java/processing/data/IntList.java +699 -633
  87. data/src/main/java/processing/data/JSONArray.java +931 -873
  88. data/src/main/java/processing/data/JSONObject.java +1262 -1165
  89. data/src/main/java/processing/data/JSONTokener.java +351 -341
  90. data/src/main/java/processing/data/LongDict.java +710 -663
  91. data/src/main/java/processing/data/LongList.java +701 -635
  92. data/src/main/java/processing/data/Sort.java +37 -41
  93. data/src/main/java/processing/data/StringDict.java +525 -486
  94. data/src/main/java/processing/data/StringList.java +626 -580
  95. data/src/main/java/processing/data/Table.java +3690 -3510
  96. data/src/main/java/processing/data/TableRow.java +182 -183
  97. data/src/main/java/processing/data/XML.java +957 -883
  98. data/src/main/java/processing/event/Event.java +87 -67
  99. data/src/main/java/processing/event/KeyEvent.java +48 -41
  100. data/src/main/java/processing/event/MouseEvent.java +88 -113
  101. data/src/main/java/processing/event/TouchEvent.java +10 -6
  102. data/src/main/java/processing/javafx/PGraphicsFX2D.java +20 -345
  103. data/src/main/java/processing/javafx/PSurfaceFX.java +149 -121
  104. data/src/main/java/processing/net/Client.java +20 -20
  105. data/src/main/java/processing/net/Server.java +9 -9
  106. data/src/main/java/processing/opengl/FontTexture.java +286 -266
  107. data/src/main/java/processing/opengl/FrameBuffer.java +389 -377
  108. data/src/main/java/processing/opengl/LinePath.java +132 -89
  109. data/src/main/java/processing/opengl/LineStroker.java +588 -581
  110. data/src/main/java/processing/opengl/PGL.java +660 -567
  111. data/src/main/java/processing/opengl/PGraphics2D.java +408 -315
  112. data/src/main/java/processing/opengl/PGraphics3D.java +107 -72
  113. data/src/main/java/processing/opengl/PGraphicsOpenGL.java +12378 -12075
  114. data/src/main/java/processing/opengl/PJOGL.java +1753 -1670
  115. data/src/main/java/processing/opengl/PShader.java +369 -461
  116. data/src/main/java/processing/opengl/PShapeOpenGL.java +4678 -4580
  117. data/src/main/java/processing/opengl/PSurfaceJOGL.java +1114 -1027
  118. data/src/main/java/processing/opengl/Texture.java +1492 -1401
  119. data/src/main/java/processing/opengl/VertexBuffer.java +57 -55
  120. data/test/create_test.rb +21 -20
  121. data/test/deglut_spec_test.rb +4 -2
  122. data/test/helper_methods_test.rb +49 -20
  123. data/test/math_tool_test.rb +39 -32
  124. data/test/native_folder.rb +47 -0
  125. data/test/respond_to_test.rb +3 -2
  126. data/test/sketches/key_event.rb +2 -2
  127. data/test/sketches/library/my_library/my_library.rb +3 -0
  128. data/test/test_helper.rb +2 -0
  129. data/test/vecmath_spec_test.rb +35 -22
  130. data/vendors/Rakefile +35 -40
  131. metadata +42 -22
  132. data/src/main/java/processing/opengl/shaders/LightVert-brcm.glsl +0 -154
  133. data/src/main/java/processing/opengl/shaders/LightVert-vc4.glsl +0 -154
  134. data/src/main/java/processing/opengl/shaders/TexLightVert-brcm.glsl +0 -160
  135. data/src/main/java/processing/opengl/shaders/TexLightVert-vc4.glsl +0 -160
@@ -1,154 +0,0 @@
1
- /*
2
- Part of the Processing project - http://processing.org
3
-
4
- Copyright (c) 2012-15 The Processing Foundation
5
- Copyright (c) 2004-12 Ben Fry and Casey Reas
6
- Copyright (c) 2001-04 Massachusetts Institute of Technology
7
-
8
- This library is free software; you can redistribute it and/or
9
- modify it under the terms of the GNU Lesser General Public
10
- License as published by the Free Software Foundation, version 2.1.
11
-
12
- This library is distributed in the hope that it will be useful,
13
- but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- Lesser General Public License for more details.
16
-
17
- You should have received a copy of the GNU Lesser General
18
- Public License along with this library; if not, write to the
19
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
- Boston, MA 02111-1307 USA
21
- */
22
-
23
- uniform mat4 modelviewMatrix;
24
- uniform mat4 transformMatrix;
25
- uniform mat3 normalMatrix;
26
-
27
- uniform int lightCount;
28
- uniform vec4 lightPosition[8];
29
- uniform vec3 lightNormal[8];
30
- uniform vec3 lightAmbient[8];
31
- uniform vec3 lightDiffuse[8];
32
- uniform vec3 lightSpecular[8];
33
- uniform vec3 lightFalloff[8];
34
- uniform vec2 lightSpot[8];
35
-
36
- attribute vec4 position;
37
- attribute vec4 color;
38
- attribute vec3 normal;
39
-
40
- attribute vec4 ambient;
41
- attribute vec4 specular;
42
- attribute vec4 emissive;
43
- attribute float shininess;
44
-
45
- varying vec4 vertColor;
46
- varying vec4 backVertColor;
47
-
48
- const float zero_float = 0.0;
49
- const float one_float = 1.0;
50
- const vec3 zero_vec3 = vec3(0.0);
51
- const vec3 minus_one_vec3 = vec3(0.0-1.0);
52
-
53
- float falloffFactor(vec3 lightPos, vec3 vertPos, vec3 coeff) {
54
- vec3 lpv = lightPos - vertPos;
55
- vec3 dist = vec3(one_float);
56
- dist.z = dot(lpv, lpv);
57
- dist.y = sqrt(dist.z);
58
- return one_float / dot(dist, coeff);
59
- }
60
-
61
- float spotFactor(vec3 lightPos, vec3 vertPos, vec3 lightNorm, float minCos, float spotExp) {
62
- vec3 lpv = normalize(lightPos - vertPos);
63
- vec3 nln = minus_one_vec3 * lightNorm;
64
- float spotCos = dot(nln, lpv);
65
- return spotCos <= minCos ? zero_float : pow(spotCos, spotExp);
66
- }
67
-
68
- float lambertFactor(vec3 lightDir, vec3 vecNormal) {
69
- return max(zero_float, dot(lightDir, vecNormal));
70
- }
71
-
72
- float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) {
73
- vec3 np = normalize(vertPos);
74
- vec3 ldp = normalize(lightDir - np);
75
- return pow(max(zero_float, dot(ldp, vecNormal)), shine);
76
- }
77
-
78
- void main() {
79
- // Vertex in clip coordinates
80
- gl_Position = transformMatrix * position;
81
-
82
- // Vertex in eye coordinates
83
- vec3 ecVertex = vec3(modelviewMatrix * position);
84
-
85
- // Normal vector in eye coordinates
86
- vec3 ecNormal = normalize(normalMatrix * normal);
87
- vec3 ecNormalInv = ecNormal * minus_one_vec3;
88
-
89
- // Light calculations
90
- vec3 totalAmbient = vec3(0, 0, 0);
91
-
92
- vec3 totalFrontDiffuse = vec3(0, 0, 0);
93
- vec3 totalFrontSpecular = vec3(0, 0, 0);
94
-
95
- vec3 totalBackDiffuse = vec3(0, 0, 0);
96
- vec3 totalBackSpecular = vec3(0, 0, 0);
97
-
98
- // prevent register allocation failure by limiting ourselves to
99
- // two lights for now
100
- for (int i = 0; i < 2; i++) {
101
- if (lightCount == i) break;
102
-
103
- vec3 lightPos = lightPosition[i].xyz;
104
- bool isDir = lightPosition[i].w < one_float;
105
- float spotCos = lightSpot[i].x;
106
- float spotExp = lightSpot[i].y;
107
-
108
- vec3 lightDir;
109
- float falloff;
110
- float spotf;
111
-
112
- if (isDir) {
113
- falloff = one_float;
114
- lightDir = minus_one_vec3 * lightNormal[i];
115
- } else {
116
- falloff = falloffFactor(lightPos, ecVertex, lightFalloff[i]);
117
- lightDir = normalize(lightPos - ecVertex);
118
- }
119
-
120
- spotf = spotExp > zero_float ? spotFactor(lightPos, ecVertex, lightNormal[i],
121
- spotCos, spotExp)
122
- : one_float;
123
-
124
- if (any(greaterThan(lightAmbient[i], zero_vec3))) {
125
- totalAmbient += lightAmbient[i] * falloff;
126
- }
127
-
128
- if (any(greaterThan(lightDiffuse[i], zero_vec3))) {
129
- totalFrontDiffuse += lightDiffuse[i] * falloff * spotf *
130
- lambertFactor(lightDir, ecNormal);
131
- totalBackDiffuse += lightDiffuse[i] * falloff * spotf *
132
- lambertFactor(lightDir, ecNormalInv);
133
- }
134
-
135
- if (any(greaterThan(lightSpecular[i], zero_vec3))) {
136
- totalFrontSpecular += lightSpecular[i] * falloff * spotf *
137
- blinnPhongFactor(lightDir, ecVertex, ecNormal, shininess);
138
- totalBackSpecular += lightSpecular[i] * falloff * spotf *
139
- blinnPhongFactor(lightDir, ecVertex, ecNormalInv, shininess);
140
- }
141
- }
142
-
143
- // Calculating final color as result of all lights (plus emissive term).
144
- // Transparency is determined exclusively by the diffuse component.
145
- vertColor = vec4(totalAmbient, 0) * ambient +
146
- vec4(totalFrontDiffuse, 1) * color +
147
- vec4(totalFrontSpecular, 0) * specular +
148
- vec4(emissive.rgb, 0);
149
-
150
- backVertColor = vec4(totalAmbient, 0) * ambient +
151
- vec4(totalBackDiffuse, 1) * color +
152
- vec4(totalBackSpecular, 0) * specular +
153
- vec4(emissive.rgb, 0);
154
- }
@@ -1,154 +0,0 @@
1
- /*
2
- Part of the Processing project - http://processing.org
3
-
4
- Copyright (c) 2012-15 The Processing Foundation
5
- Copyright (c) 2004-12 Ben Fry and Casey Reas
6
- Copyright (c) 2001-04 Massachusetts Institute of Technology
7
-
8
- This library is free software; you can redistribute it and/or
9
- modify it under the terms of the GNU Lesser General Public
10
- License as published by the Free Software Foundation, version 2.1.
11
-
12
- This library is distributed in the hope that it will be useful,
13
- but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- Lesser General Public License for more details.
16
-
17
- You should have received a copy of the GNU Lesser General
18
- Public License along with this library; if not, write to the
19
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
- Boston, MA 02111-1307 USA
21
- */
22
-
23
- uniform mat4 modelviewMatrix;
24
- uniform mat4 transformMatrix;
25
- uniform mat3 normalMatrix;
26
-
27
- uniform int lightCount;
28
- uniform vec4 lightPosition[8];
29
- uniform vec3 lightNormal[8];
30
- uniform vec3 lightAmbient[8];
31
- uniform vec3 lightDiffuse[8];
32
- uniform vec3 lightSpecular[8];
33
- uniform vec3 lightFalloff[8];
34
- uniform vec2 lightSpot[8];
35
-
36
- attribute vec4 position;
37
- attribute vec4 color;
38
- attribute vec3 normal;
39
-
40
- attribute vec4 ambient;
41
- attribute vec4 specular;
42
- attribute vec4 emissive;
43
- attribute float shininess;
44
-
45
- varying vec4 vertColor;
46
- varying vec4 backVertColor;
47
-
48
- const float zero_float = 0.0;
49
- const float one_float = 1.0;
50
- const vec3 zero_vec3 = vec3(0.0);
51
- const vec3 minus_one_vec3 = vec3(0.0-1.0);
52
-
53
- float falloffFactor(vec3 lightPos, vec3 vertPos, vec3 coeff) {
54
- vec3 lpv = lightPos - vertPos;
55
- vec3 dist = vec3(one_float);
56
- dist.z = dot(lpv, lpv);
57
- dist.y = sqrt(dist.z);
58
- return one_float / dot(dist, coeff);
59
- }
60
-
61
- float spotFactor(vec3 lightPos, vec3 vertPos, vec3 lightNorm, float minCos, float spotExp) {
62
- vec3 lpv = normalize(lightPos - vertPos);
63
- vec3 nln = minus_one_vec3 * lightNorm;
64
- float spotCos = dot(nln, lpv);
65
- return spotCos <= minCos ? zero_float : pow(spotCos, spotExp);
66
- }
67
-
68
- float lambertFactor(vec3 lightDir, vec3 vecNormal) {
69
- return max(zero_float, dot(lightDir, vecNormal));
70
- }
71
-
72
- float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) {
73
- vec3 np = normalize(vertPos);
74
- vec3 ldp = normalize(lightDir - np);
75
- return pow(max(zero_float, dot(ldp, vecNormal)), shine);
76
- }
77
-
78
- void main() {
79
- // Vertex in clip coordinates
80
- gl_Position = transformMatrix * position;
81
-
82
- // Vertex in eye coordinates
83
- vec3 ecVertex = vec3(modelviewMatrix * position);
84
-
85
- // Normal vector in eye coordinates
86
- vec3 ecNormal = normalize(normalMatrix * normal);
87
- vec3 ecNormalInv = ecNormal * minus_one_vec3;
88
-
89
- // Light calculations
90
- vec3 totalAmbient = vec3(0, 0, 0);
91
-
92
- vec3 totalFrontDiffuse = vec3(0, 0, 0);
93
- vec3 totalFrontSpecular = vec3(0, 0, 0);
94
-
95
- vec3 totalBackDiffuse = vec3(0, 0, 0);
96
- vec3 totalBackSpecular = vec3(0, 0, 0);
97
-
98
- // prevent register allocation failure by limiting ourselves to
99
- // four lights for now
100
- for (int i = 0; i < 4; i++) {
101
- if (lightCount == i) break;
102
-
103
- vec3 lightPos = lightPosition[i].xyz;
104
- bool isDir = lightPosition[i].w < one_float;
105
- float spotCos = lightSpot[i].x;
106
- float spotExp = lightSpot[i].y;
107
-
108
- vec3 lightDir;
109
- float falloff;
110
- float spotf;
111
-
112
- if (isDir) {
113
- falloff = one_float;
114
- lightDir = minus_one_vec3 * lightNormal[i];
115
- } else {
116
- falloff = falloffFactor(lightPos, ecVertex, lightFalloff[i]);
117
- lightDir = normalize(lightPos - ecVertex);
118
- }
119
-
120
- spotf = spotExp > zero_float ? spotFactor(lightPos, ecVertex, lightNormal[i],
121
- spotCos, spotExp)
122
- : one_float;
123
-
124
- if (any(greaterThan(lightAmbient[i], zero_vec3))) {
125
- totalAmbient += lightAmbient[i] * falloff;
126
- }
127
-
128
- if (any(greaterThan(lightDiffuse[i], zero_vec3))) {
129
- totalFrontDiffuse += lightDiffuse[i] * falloff * spotf *
130
- lambertFactor(lightDir, ecNormal);
131
- totalBackDiffuse += lightDiffuse[i] * falloff * spotf *
132
- lambertFactor(lightDir, ecNormalInv);
133
- }
134
-
135
- if (any(greaterThan(lightSpecular[i], zero_vec3))) {
136
- totalFrontSpecular += lightSpecular[i] * falloff * spotf *
137
- blinnPhongFactor(lightDir, ecVertex, ecNormal, shininess);
138
- totalBackSpecular += lightSpecular[i] * falloff * spotf *
139
- blinnPhongFactor(lightDir, ecVertex, ecNormalInv, shininess);
140
- }
141
- }
142
-
143
- // Calculating final color as result of all lights (plus emissive term).
144
- // Transparency is determined exclusively by the diffuse component.
145
- vertColor = vec4(totalAmbient, 0) * ambient +
146
- vec4(totalFrontDiffuse, 1) * color +
147
- vec4(totalFrontSpecular, 0) * specular +
148
- vec4(emissive.rgb, 0);
149
-
150
- backVertColor = vec4(totalAmbient, 0) * ambient +
151
- vec4(totalBackDiffuse, 1) * color +
152
- vec4(totalBackSpecular, 0) * specular +
153
- vec4(emissive.rgb, 0);
154
- }
@@ -1,160 +0,0 @@
1
- /*
2
- Part of the Processing project - http://processing.org
3
-
4
- Copyright (c) 2012-15 The Processing Foundation
5
- Copyright (c) 2004-12 Ben Fry and Casey Reas
6
- Copyright (c) 2001-04 Massachusetts Institute of Technology
7
-
8
- This library is free software; you can redistribute it and/or
9
- modify it under the terms of the GNU Lesser General Public
10
- License as published by the Free Software Foundation, version 2.1.
11
-
12
- This library is distributed in the hope that it will be useful,
13
- but WITHOUT ANY WARRANTY; without even the implied warranty of
14
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
- Lesser General Public License for more details.
16
-
17
- You should have received a copy of the GNU Lesser General
18
- Public License along with this library; if not, write to the
19
- Free Software Foundation, Inc., 59 Temple Place, Suite 330,
20
- Boston, MA 02111-1307 USA
21
- */
22
-
23
- uniform mat4 modelviewMatrix;
24
- uniform mat4 transformMatrix;
25
- uniform mat3 normalMatrix;
26
- uniform mat4 texMatrix;
27
-
28
- uniform int lightCount;
29
- uniform vec4 lightPosition[8];
30
- uniform vec3 lightNormal[8];
31
- uniform vec3 lightAmbient[8];
32
- uniform vec3 lightDiffuse[8];
33
- uniform vec3 lightSpecular[8];
34
- uniform vec3 lightFalloff[8];
35
- uniform vec2 lightSpot[8];
36
-
37
- attribute vec4 position;
38
- attribute vec4 color;
39
- attribute vec3 normal;
40
- attribute vec2 texCoord;
41
-
42
- attribute vec4 ambient;
43
- attribute vec4 specular;
44
- attribute vec4 emissive;
45
- attribute float shininess;
46
-
47
- varying vec4 vertColor;
48
- varying vec4 backVertColor;
49
- varying vec4 vertTexCoord;
50
-
51
- const float zero_float = 0.0;
52
- const float one_float = 1.0;
53
- const vec3 zero_vec3 = vec3(0.0);
54
- const vec3 minus_one_vec3 = vec3(0.0-1.0);
55
-
56
- float falloffFactor(vec3 lightPos, vec3 vertPos, vec3 coeff) {
57
- vec3 lpv = lightPos - vertPos;
58
- vec3 dist = vec3(one_float);
59
- dist.z = dot(lpv, lpv);
60
- dist.y = sqrt(dist.z);
61
- return one_float / dot(dist, coeff);
62
- }
63
-
64
- float spotFactor(vec3 lightPos, vec3 vertPos, vec3 lightNorm, float minCos, float spotExp) {
65
- vec3 lpv = normalize(lightPos - vertPos);
66
- vec3 nln = minus_one_vec3 * lightNorm;
67
- float spotCos = dot(nln, lpv);
68
- return spotCos <= minCos ? zero_float : pow(spotCos, spotExp);
69
- }
70
-
71
- float lambertFactor(vec3 lightDir, vec3 vecNormal) {
72
- return max(zero_float, dot(lightDir, vecNormal));
73
- }
74
-
75
- float blinnPhongFactor(vec3 lightDir, vec3 vertPos, vec3 vecNormal, float shine) {
76
- vec3 np = normalize(vertPos);
77
- vec3 ldp = normalize(lightDir - np);
78
- return pow(max(zero_float, dot(ldp, vecNormal)), shine);
79
- }
80
-
81
- void main() {
82
- // Vertex in clip coordinates
83
- gl_Position = transformMatrix * position;
84
-
85
- // Vertex in eye coordinates
86
- vec3 ecVertex = vec3(modelviewMatrix * position);
87
-
88
- // Normal vector in eye coordinates
89
- vec3 ecNormal = normalize(normalMatrix * normal);
90
- vec3 ecNormalInv = ecNormal * minus_one_vec3;
91
-
92
- // Light calculations
93
- vec3 totalAmbient = vec3(0, 0, 0);
94
-
95
- vec3 totalFrontDiffuse = vec3(0, 0, 0);
96
- vec3 totalFrontSpecular = vec3(0, 0, 0);
97
-
98
- vec3 totalBackDiffuse = vec3(0, 0, 0);
99
- vec3 totalBackSpecular = vec3(0, 0, 0);
100
-
101
- // prevent register allocation failure by limiting ourselves to
102
- // two lights for now
103
- for (int i = 0; i < 2; i++) {
104
- if (lightCount == i) break;
105
-
106
- vec3 lightPos = lightPosition[i].xyz;
107
- bool isDir = lightPosition[i].w < one_float;
108
- float spotCos = lightSpot[i].x;
109
- float spotExp = lightSpot[i].y;
110
-
111
- vec3 lightDir;
112
- float falloff;
113
- float spotf;
114
-
115
- if (isDir) {
116
- falloff = one_float;
117
- lightDir = minus_one_vec3 * lightNormal[i];
118
- } else {
119
- falloff = falloffFactor(lightPos, ecVertex, lightFalloff[i]);
120
- lightDir = normalize(lightPos - ecVertex);
121
- }
122
-
123
- spotf = spotExp > zero_float ? spotFactor(lightPos, ecVertex, lightNormal[i],
124
- spotCos, spotExp)
125
- : one_float;
126
-
127
- if (any(greaterThan(lightAmbient[i], zero_vec3))) {
128
- totalAmbient += lightAmbient[i] * falloff;
129
- }
130
-
131
- if (any(greaterThan(lightDiffuse[i], zero_vec3))) {
132
- totalFrontDiffuse += lightDiffuse[i] * falloff * spotf *
133
- lambertFactor(lightDir, ecNormal);
134
- totalBackDiffuse += lightDiffuse[i] * falloff * spotf *
135
- lambertFactor(lightDir, ecNormalInv);
136
- }
137
-
138
- if (any(greaterThan(lightSpecular[i], zero_vec3))) {
139
- totalFrontSpecular += lightSpecular[i] * falloff * spotf *
140
- blinnPhongFactor(lightDir, ecVertex, ecNormal, shininess);
141
- totalBackSpecular += lightSpecular[i] * falloff * spotf *
142
- blinnPhongFactor(lightDir, ecVertex, ecNormalInv, shininess);
143
- }
144
- }
145
-
146
- // Calculating final color as result of all lights (plus emissive term).
147
- // Transparency is determined exclusively by the diffuse component.
148
- vertColor = vec4(totalAmbient, 0) * ambient +
149
- vec4(totalFrontDiffuse, 1) * color +
150
- vec4(totalFrontSpecular, 0) * specular +
151
- vec4(emissive.rgb, 0);
152
-
153
- backVertColor = vec4(totalAmbient, 0) * ambient +
154
- vec4(totalBackDiffuse, 1) * color +
155
- vec4(totalBackSpecular, 0) * specular +
156
- vec4(emissive.rgb, 0);
157
-
158
- // Calculating texture coordinates, with r and q set both to one
159
- vertTexCoord = texMatrix * vec4(texCoord, 1.0, 1.0);
160
- }