jmonkeyengine: RendererException in TerrainLighting.frag
5th generation Mac Mini (Apple Silicon)
OpenJDK 64-Bit Server VM Temurin-17.0.2+8 (build 17.0.2+8, mixed mode)
JME v3.5.0-stable
setRenderer(AppSettings.LWJGL_OPENGL32)
Mar 07, 2022 10:10:34 PM com.jme3.renderer.opengl.GLRenderer updateShaderSourceData
WARNING: Bad compile of:
1 #version 110
2 #define SRGB 1
3 #define FRAGMENT_SHADER 1
4 #define WARDISO 1
5 #define DIFFUSEMAP 1
6 #define DIFFUSEMAP_1 1
7 #define DIFFUSEMAP_2 1
8 #define NORMALMAP 1
9 #define NORMALMAP_1 1
10 #define NORMALMAP_2 1
11 #define ALPHAMAP 1
12 #define DIFFUSEMAP_0_SCALE 64.0
13 #define DIFFUSEMAP_1_SCALE 16.0
14 #define DIFFUSEMAP_2_SCALE 128.0
15 // -- begin import Common/ShaderLib/BlinnPhongLighting.glsllib --
16 /*Blinn Phong lighting*/
17
18 /*
19 * Computes diffuse factor (Lambert)
20 */
21 float lightComputeDiffuse(in vec3 norm, in vec3 lightdir){
22 return max(0.0, dot(norm, lightdir));
23 }
24
25 /*
26 * Computes specular factor (blinn phong)
27 */
28 float lightComputeSpecular(in vec3 norm, in vec3 viewdir, in vec3 lightdir, in float shiny){
29 vec3 H = normalize(viewdir + lightdir);
30 float HdotN = max(0.0, dot(H, norm));
31 return pow(HdotN, shiny);
32 }
33
34 /*
35 *Computes standard phong specular lighting
36 */
37 float lightComputeSpecularPhong(in vec3 norm, in vec3 viewdir, in vec3 lightdir, in float shiny){
38 vec3 R = reflect(-lightdir, norm);
39 return pow(max(dot(R, viewdir), 0.0), shiny);
40 }
41
42
43 /*
44 * Computes diffuse and specular factors and pack them in a vec2 (x=diffuse, y=specular)
45 */
46 vec2 computeLighting(in vec3 norm, in vec3 viewDir, in vec3 lightDir, in float attenuation, in float shininess){
47 float diffuseFactor = lightComputeDiffuse(norm, lightDir);
48 float specularFactor = lightComputeSpecular(norm, viewDir, lightDir, shininess);
49 if (shininess <= 1.0) {
50 specularFactor = 0.0; // should be one instruction on most cards ..
51 }
52 specularFactor *= diffuseFactor;
53 return vec2(diffuseFactor, specularFactor) * vec2(attenuation);
54 }
55 // -- end import Common/ShaderLib/BlinnPhongLighting.glsllib --
56 // -- begin import Common/ShaderLib/Lighting.glsllib --
57 /*Common function for light calculations*/
58
59
60 /*
61 * Computes light direction
62 * lightType should be 0.0,1.0,2.0, respectively for Directional, point and spot lights.
63 * Outputs the light direction and the light half vector.
64 */
65 void lightComputeDir(in vec3 worldPos, in float lightType, in vec4 position, out vec4 lightDir, out vec3 lightVec){
66 float posLight = step(0.5, lightType);
67 vec3 tempVec = position.xyz * sign(posLight - 0.5) - (worldPos * posLight);
68 lightVec = tempVec;
69 float dist = length(tempVec);
70 #ifdef SRGB
71 lightDir.w = (1.0 - position.w * dist) / (1.0 + position.w * dist * dist);
72 lightDir.w = clamp(lightDir.w, 1.0 - posLight, 1.0);
73 #else
74 lightDir.w = clamp(1.0 - position.w * dist * posLight, 0.0, 1.0);
75 #endif
76 lightDir.xyz = tempVec / vec3(dist);
77 }
78
79 /*
80 * Computes the spot falloff for a spotlight
81 */
82 float computeSpotFalloff(in vec4 lightDirection, in vec3 lightVector){
83 vec3 L=normalize(lightVector);
84 vec3 spotdir = normalize(lightDirection.xyz);
85 float curAngleCos = dot(-L, spotdir);
86 float innerAngleCos = floor(lightDirection.w) * 0.001;
87 float outerAngleCos = fract(lightDirection.w);
88 float innerMinusOuter = innerAngleCos - outerAngleCos;
89 float falloff = clamp((curAngleCos - outerAngleCos) / innerMinusOuter, step(lightDirection.w, 0.001), 1.0);
90
91 #ifdef SRGB
92 // Use quadratic falloff (notice the ^4)
93 return pow(clamp((curAngleCos - outerAngleCos) / innerMinusOuter, 0.0, 1.0), 4.0);
94 #else
95 // Use linear falloff
96 return falloff;
97 #endif
98 }
99
100 // -- end import Common/ShaderLib/Lighting.glsllib --
101
102 uniform float m_Shininess;
103 uniform vec4 g_LightDirection;
104
105 varying vec4 AmbientSum;
106 varying vec4 DiffuseSum;
107 varying vec4 SpecularSum;
108
109 varying vec3 vNormal;
110 varying vec2 texCoord;
111 varying vec3 vPosition;
112 varying vec3 vnPosition;
113 varying vec3 vViewDir;
114 varying vec4 vLightDir;
115 varying vec4 vnLightDir;
116 varying vec3 lightVec;
117
118
119 #ifdef DIFFUSEMAP
120 uniform sampler2D m_DiffuseMap;
121 #endif
122 #ifdef DIFFUSEMAP_1
123 uniform sampler2D m_DiffuseMap_1;
124 #endif
125 #ifdef DIFFUSEMAP_2
126 uniform sampler2D m_DiffuseMap_2;
127 #endif
128 #ifdef DIFFUSEMAP_3
129 uniform sampler2D m_DiffuseMap_3;
130 #endif
131 #ifdef DIFFUSEMAP_4
132 uniform sampler2D m_DiffuseMap_4;
133 #endif
134 #ifdef DIFFUSEMAP_5
135 uniform sampler2D m_DiffuseMap_5;
136 #endif
137 #ifdef DIFFUSEMAP_6
138 uniform sampler2D m_DiffuseMap_6;
139 #endif
140 #ifdef DIFFUSEMAP_7
141 uniform sampler2D m_DiffuseMap_7;
142 #endif
143 #ifdef DIFFUSEMAP_8
144 uniform sampler2D m_DiffuseMap_8;
145 #endif
146 #ifdef DIFFUSEMAP_9
147 uniform sampler2D m_DiffuseMap_9;
148 #endif
149 #ifdef DIFFUSEMAP_10
150 uniform sampler2D m_DiffuseMap_10;
151 #endif
152 #ifdef DIFFUSEMAP_11
153 uniform sampler2D m_DiffuseMap_11;
154 #endif
155
156
157 #ifdef DIFFUSEMAP_0_SCALE
158 uniform float m_DiffuseMap_0_scale;
159 #endif
160 #ifdef DIFFUSEMAP_1_SCALE
161 uniform float m_DiffuseMap_1_scale;
162 #endif
163 #ifdef DIFFUSEMAP_2_SCALE
164 uniform float m_DiffuseMap_2_scale;
165 #endif
166 #ifdef DIFFUSEMAP_3_SCALE
167 uniform float m_DiffuseMap_3_scale;
168 #endif
169 #ifdef DIFFUSEMAP_4_SCALE
170 uniform float m_DiffuseMap_4_scale;
171 #endif
172 #ifdef DIFFUSEMAP_5_SCALE
173 uniform float m_DiffuseMap_5_scale;
174 #endif
175 #ifdef DIFFUSEMAP_6_SCALE
176 uniform float m_DiffuseMap_6_scale;
177 #endif
178 #ifdef DIFFUSEMAP_7_SCALE
179 uniform float m_DiffuseMap_7_scale;
180 #endif
181 #ifdef DIFFUSEMAP_8_SCALE
182 uniform float m_DiffuseMap_8_scale;
183 #endif
184 #ifdef DIFFUSEMAP_9_SCALE
185 uniform float m_DiffuseMap_9_scale;
186 #endif
187 #ifdef DIFFUSEMAP_10_SCALE
188 uniform float m_DiffuseMap_10_scale;
189 #endif
190 #ifdef DIFFUSEMAP_11_SCALE
191 uniform float m_DiffuseMap_11_scale;
192 #endif
193
194
195 #ifdef ALPHAMAP
196 uniform sampler2D m_AlphaMap;
197 #endif
198 #ifdef ALPHAMAP_1
199 uniform sampler2D m_AlphaMap_1;
200 #endif
201 #ifdef ALPHAMAP_2
202 uniform sampler2D m_AlphaMap_2;
203 #endif
204
205 #ifdef NORMALMAP
206 uniform sampler2D m_NormalMap;
207 #endif
208 #ifdef NORMALMAP_1
209 uniform sampler2D m_NormalMap_1;
210 #endif
211 #ifdef NORMALMAP_2
212 uniform sampler2D m_NormalMap_2;
213 #endif
214 #ifdef NORMALMAP_3
215 uniform sampler2D m_NormalMap_3;
216 #endif
217 #ifdef NORMALMAP_4
218 uniform sampler2D m_NormalMap_4;
219 #endif
220 #ifdef NORMALMAP_5
221 uniform sampler2D m_NormalMap_5;
222 #endif
223 #ifdef NORMALMAP_6
224 uniform sampler2D m_NormalMap_6;
225 #endif
226 #ifdef NORMALMAP_7
227 uniform sampler2D m_NormalMap_7;
228 #endif
229 #ifdef NORMALMAP_8
230 uniform sampler2D m_NormalMap_8;
231 #endif
232 #ifdef NORMALMAP_9
233 uniform sampler2D m_NormalMap_9;
234 #endif
235 #ifdef NORMALMAP_10
236 uniform sampler2D m_NormalMap_10;
237 #endif
238 #ifdef NORMALMAP_11
239 uniform sampler2D m_NormalMap_11;
240 #endif
241
242
243 #ifdef TRI_PLANAR_MAPPING
244 varying vec4 wVertex;
245 varying vec3 wNormal;
246 #endif
247
248 #ifdef ALPHAMAP
249
250 vec4 calculateDiffuseBlend(in vec2 texCoord) {
251 vec4 alphaBlend = texture2D( m_AlphaMap, texCoord.xy );
252 vec4 diffuseColor = vec4(1.0);
253
254 #ifdef ALPHAMAP_1
255 vec4 alphaBlend1 = texture2D( m_AlphaMap_1, texCoord.xy );
256 #endif
257 #ifdef ALPHAMAP_2
258 vec4 alphaBlend2 = texture2D( m_AlphaMap_2, texCoord.xy );
259 #endif
260 #ifdef DIFFUSEMAP
261 diffuseColor = texture2D(m_DiffuseMap, texCoord * m_DiffuseMap_0_scale);
262 #ifdef USE_ALPHA
263 alphaBlend.r *= diffuseColor.a;
264 #endif
265 diffuseColor *= alphaBlend.r;
266 #endif
267 #ifdef DIFFUSEMAP_1
268 vec4 diffuseColor1 = texture2D(m_DiffuseMap_1, texCoord * m_DiffuseMap_1_scale);
269 #ifdef USE_ALPHA
270 alphaBlend.g *= diffuseColor1.a;
271 #endif
272 diffuseColor = mix( diffuseColor, diffuseColor1, alphaBlend.g );
273 #endif
274 #ifdef DIFFUSEMAP_2
275 vec4 diffuseColor2 = texture2D(m_DiffuseMap_2, texCoord * m_DiffuseMap_2_scale);
276 #ifdef USE_ALPHA
277 alphaBlend.b *= diffuseColor2.a;
278 #endif
279 diffuseColor = mix( diffuseColor, diffuseColor2, alphaBlend.b );
280 #endif
281 #ifdef DIFFUSEMAP_3
282 vec4 diffuseColor3 = texture2D(m_DiffuseMap_3, texCoord * m_DiffuseMap_3_scale);
283 #ifdef USE_ALPHA
284 alphaBlend.a *= diffuseColor3.a;
285 #endif
286 diffuseColor = mix( diffuseColor, diffuseColor3, alphaBlend.a );
287 #endif
288
289 #ifdef ALPHAMAP_1
290 #ifdef DIFFUSEMAP_4
291 vec4 diffuseColor4 = texture2D(m_DiffuseMap_4, texCoord * m_DiffuseMap_4_scale);
292 #ifdef USE_ALPHA
293 alphaBlend1.r *= diffuseColor4.a;
294 #endif
295 diffuseColor = mix( diffuseColor, diffuseColor4, alphaBlend1.r );
296 #endif
297 #ifdef DIFFUSEMAP_5
298 vec4 diffuseColor5 = texture2D(m_DiffuseMap_5, texCoord * m_DiffuseMap_5_scale);
299 #ifdef USE_ALPHA
300 alphaBlend1.g *= diffuseColor5.a;
301 #endif
302 diffuseColor = mix( diffuseColor, diffuseColor5, alphaBlend1.g );
303 #endif
304 #ifdef DIFFUSEMAP_6
305 vec4 diffuseColor6 = texture2D(m_DiffuseMap_6, texCoord * m_DiffuseMap_6_scale);
306 #ifdef USE_ALPHA
307 alphaBlend1.b *= diffuseColor6.a;
308 #endif
309 diffuseColor = mix( diffuseColor, diffuseColor6, alphaBlend1.b );
310 #endif
311 #ifdef DIFFUSEMAP_7
312 vec4 diffuseColor7 = texture2D(m_DiffuseMap_7, texCoord * m_DiffuseMap_7_scale);
313 #ifdef USE_ALPHA
314 alphaBlend1.a *= diffuseColor7.a;
315 #endif
316 diffuseColor = mix( diffuseColor, diffuseColor7, alphaBlend1.a );
317 #endif
318 #endif
319
320 #ifdef ALPHAMAP_2
321 #ifdef DIFFUSEMAP_8
322 vec4 diffuseColor8 = texture2D(m_DiffuseMap_8, texCoord * m_DiffuseMap_8_scale);
323 #ifdef USE_ALPHA
324 alphaBlend2.r *= diffuseColor8.a;
325 #endif
326 diffuseColor = mix( diffuseColor, diffuseColor8, alphaBlend2.r );
327 #endif
328 #ifdef DIFFUSEMAP_9
329 vec4 diffuseColor9 = texture2D(m_DiffuseMap_9, texCoord * m_DiffuseMap_9_scale);
330 #ifdef USE_ALPHA
331 alphaBlend2.g *= diffuseColor9.a;
332 #endif
333 diffuseColor = mix( diffuseColor, diffuseColor9, alphaBlend2.g );
334 #endif
335 #ifdef DIFFUSEMAP_10
336 vec4 diffuseColor10 = texture2D(m_DiffuseMap_10, texCoord * m_DiffuseMap_10_scale);
337 #ifdef USE_ALPHA
338 alphaBlend2.b *= diffuseColor10.a;
339 #endif
340 diffuseColor = mix( diffuseColor, diffuseColor10, alphaBlend2.b );
341 #endif
342 #ifdef DIFFUSEMAP_11
343 vec4 diffuseColor11 = texture2D(m_DiffuseMap_11, texCoord * m_DiffuseMap_11_scale);
344 #ifdef USE_ALPHA
345 alphaBlend2.a *= diffuseColor11.a;
346 #endif
347 diffuseColor = mix( diffuseColor, diffuseColor11, alphaBlend2.a );
348 #endif
349 #endif
350
351 return diffuseColor;
352 }
353
354 vec3 calculateNormal(in vec2 texCoord) {
355 vec3 normal = vec3(0,0,1);
356 vec3 n = vec3(0,0,0);
357
358 vec4 alphaBlend = texture2D( m_AlphaMap, texCoord.xy );
359
360 #ifdef ALPHAMAP_1
361 vec4 alphaBlend1 = texture2D( m_AlphaMap_1, texCoord.xy );
362 #endif
363 #ifdef ALPHAMAP_2
364 vec4 alphaBlend2 = texture2D( m_AlphaMap_2, texCoord.xy );
365 #endif
366
367 #ifdef NORMALMAP
368 n = texture2D(m_NormalMap, texCoord * m_DiffuseMap_0_scale).xyz;
369 normal += n * alphaBlend.r;
370 #else
371 normal += vec3(0.5,0.5,1) * alphaBlend.r;
372 #endif
373
374 #ifdef NORMALMAP_1
375 n = texture2D(m_NormalMap_1, texCoord * m_DiffuseMap_1_scale).xyz;
376 normal += n * alphaBlend.g;
377 #else
378 normal += vec3(0.5,0.5,1) * alphaBlend.g;
379 #endif
380
381 #ifdef NORMALMAP_2
382 n = texture2D(m_NormalMap_2, texCoord * m_DiffuseMap_2_scale).xyz;
383 normal += n * alphaBlend.b;
384 #else
385 normal += vec3(0.5,0.5,1) * alphaBlend.b;
386 #endif
387
388 #ifdef NORMALMAP_3
389 n = texture2D(m_NormalMap_3, texCoord * m_DiffuseMap_3_scale).xyz;
390 normal += n * alphaBlend.a;
391 #else
392 normal += vec3(0.5,0.5,1) * alphaBlend.a;
393 #endif
394
395 #ifdef ALPHAMAP_1
396 #ifdef NORMALMAP_4
397 n = texture2D(m_NormalMap_4, texCoord * m_DiffuseMap_4_scale).xyz;
398 normal += n * alphaBlend1.r;
399 #endif
400
401 #ifdef NORMALMAP_5
402 n = texture2D(m_NormalMap_5, texCoord * m_DiffuseMap_5_scale).xyz;
403 normal += n * alphaBlend1.g;
404 #endif
405
406 #ifdef NORMALMAP_6
407 n = texture2D(m_NormalMap_6, texCoord * m_DiffuseMap_6_scale).xyz;
408 normal += n * alphaBlend1.b;
409 #endif
410
411 #ifdef NORMALMAP_7
412 n = texture2D(m_NormalMap_7, texCoord * m_DiffuseMap_7_scale).xyz;
413 normal += n * alphaBlend1.a;
414 #endif
415 #endif
416
417 #ifdef ALPHAMAP_2
418 #ifdef NORMALMAP_8
419 n = texture2D(m_NormalMap_8, texCoord * m_DiffuseMap_8_scale).xyz;
420 normal += n * alphaBlend2.r;
421 #endif
422
423 #ifdef NORMALMAP_9
424 n = texture2D(m_NormalMap_9, texCoord * m_DiffuseMap_9_scale);
425 normal += n * alphaBlend2.g;
426 #endif
427
428 #ifdef NORMALMAP_10
429 n = texture2D(m_NormalMap_10, texCoord * m_DiffuseMap_10_scale);
430 normal += n * alphaBlend2.b;
431 #endif
432
433 #ifdef NORMALMAP_11
434 n = texture2D(m_NormalMap_11, texCoord * m_DiffuseMap_11_scale);
435 normal += n * alphaBlend2.a;
436 #endif
437 #endif
438
439 normal = (normal.xyz * vec3(2.0) - vec3(1.0));
440 return normalize(normal);
441 }
442
443 #ifdef TRI_PLANAR_MAPPING
444
445 vec4 getTriPlanarBlend(in vec4 coords, in vec3 blending, in sampler2D map, in float scale) {
446 vec4 col1 = texture2D( map, coords.yz * scale);
447 vec4 col2 = texture2D( map, coords.xz * scale);
448 vec4 col3 = texture2D( map, coords.xy * scale);
449 // blend the results of the 3 planar projections.
450 vec4 tex = col1 * blending.x + col2 * blending.y + col3 * blending.z;
451 return tex;
452 }
453
454 vec4 calculateTriPlanarDiffuseBlend(in vec3 wNorm, in vec4 wVert, in vec2 texCoord) {
455 // tri-planar texture bending factor for this fragment's normal
456 vec3 blending = abs( wNorm );
457 blending = (blending -0.2) * 0.7;
458 blending = normalize(max(blending, 0.00001)); // Force weights to sum to 1.0 (very important!)
459 float b = (blending.x + blending.y + blending.z);
460 blending /= vec3(b, b, b);
461
462 // texture coords
463 vec4 coords = wVert;
464
465 // blend the results of the 3 planar projections.
466 vec4 tex0 = getTriPlanarBlend(coords, blending, m_DiffuseMap, m_DiffuseMap_0_scale);
467
468 #ifdef DIFFUSEMAP_1
469 // blend the results of the 3 planar projections.
470 vec4 tex1 = getTriPlanarBlend(coords, blending, m_DiffuseMap_1, m_DiffuseMap_1_scale);
471 #endif
472 #ifdef DIFFUSEMAP_2
473 // blend the results of the 3 planar projections.
474 vec4 tex2 = getTriPlanarBlend(coords, blending, m_DiffuseMap_2, m_DiffuseMap_2_scale);
475 #endif
476 #ifdef DIFFUSEMAP_3
477 // blend the results of the 3 planar projections.
478 vec4 tex3 = getTriPlanarBlend(coords, blending, m_DiffuseMap_3, m_DiffuseMap_3_scale);
479 #endif
480 #ifdef DIFFUSEMAP_4
481 // blend the results of the 3 planar projections.
482 vec4 tex4 = getTriPlanarBlend(coords, blending, m_DiffuseMap_4, m_DiffuseMap_4_scale);
483 #endif
484 #ifdef DIFFUSEMAP_5
485 // blend the results of the 3 planar projections.
486 vec4 tex5 = getTriPlanarBlend(coords, blending, m_DiffuseMap_5, m_DiffuseMap_5_scale);
487 #endif
488 #ifdef DIFFUSEMAP_6
489 // blend the results of the 3 planar projections.
490 vec4 tex6 = getTriPlanarBlend(coords, blending, m_DiffuseMap_6, m_DiffuseMap_6_scale);
491 #endif
492 #ifdef DIFFUSEMAP_7
493 // blend the results of the 3 planar projections.
494 vec4 tex7 = getTriPlanarBlend(coords, blending, m_DiffuseMap_7, m_DiffuseMap_7_scale);
495 #endif
496 #ifdef DIFFUSEMAP_8
497 // blend the results of the 3 planar projections.
498 vec4 tex8 = getTriPlanarBlend(coords, blending, m_DiffuseMap_8, m_DiffuseMap_8_scale);
499 #endif
500 #ifdef DIFFUSEMAP_9
501 // blend the results of the 3 planar projections.
502 vec4 tex9 = getTriPlanarBlend(coords, blending, m_DiffuseMap_9, m_DiffuseMap_9_scale);
503 #endif
504 #ifdef DIFFUSEMAP_10
505 // blend the results of the 3 planar projections.
506 vec4 tex10 = getTriPlanarBlend(coords, blending, m_DiffuseMap_10, m_DiffuseMap_10_scale);
507 #endif
508 #ifdef DIFFUSEMAP_11
509 // blend the results of the 3 planar projections.
510 vec4 tex11 = getTriPlanarBlend(coords, blending, m_DiffuseMap_11, m_DiffuseMap_11_scale);
511 #endif
512
513 vec4 alphaBlend = texture2D( m_AlphaMap, texCoord.xy );
514
515 #ifdef ALPHAMAP_1
516 vec4 alphaBlend1 = texture2D( m_AlphaMap_1, texCoord.xy );
517 #endif
518 #ifdef ALPHAMAP_2
519 vec4 alphaBlend2 = texture2D( m_AlphaMap_2, texCoord.xy );
520 #endif
521
522 vec4 diffuseColor = tex0 * alphaBlend.r;
523 #ifdef DIFFUSEMAP_1
524 diffuseColor = mix( diffuseColor, tex1, alphaBlend.g );
525 #endif
526 #ifdef DIFFUSEMAP_2
527 diffuseColor = mix( diffuseColor, tex2, alphaBlend.b );
528 #endif
529 #ifdef DIFFUSEMAP_3
530 diffuseColor = mix( diffuseColor, tex3, alphaBlend.a );
531 #endif
532 #ifdef ALPHAMAP_1
533 #ifdef DIFFUSEMAP_4
534 diffuseColor = mix( diffuseColor, tex4, alphaBlend1.r );
535 #endif
536 #ifdef DIFFUSEMAP_5
537 diffuseColor = mix( diffuseColor, tex5, alphaBlend1.g );
538 #endif
539 #ifdef DIFFUSEMAP_6
540 diffuseColor = mix( diffuseColor, tex6, alphaBlend1.b );
541 #endif
542 #ifdef DIFFUSEMAP_7
543 diffuseColor = mix( diffuseColor, tex7, alphaBlend1.a );
544 #endif
545 #endif
546 #ifdef ALPHAMAP_2
547 #ifdef DIFFUSEMAP_8
548 diffuseColor = mix( diffuseColor, tex8, alphaBlend2.r );
549 #endif
550 #ifdef DIFFUSEMAP_9
551 diffuseColor = mix( diffuseColor, tex9, alphaBlend2.g );
552 #endif
553 #ifdef DIFFUSEMAP_10
554 diffuseColor = mix( diffuseColor, tex10, alphaBlend2.b );
555 #endif
556 #ifdef DIFFUSEMAP_11
557 diffuseColor = mix( diffuseColor, tex11, alphaBlend2.a );
558 #endif
559 #endif
560
561 return diffuseColor;
562 }
563
564 vec3 calculateNormalTriPlanar(in vec3 wNorm, in vec4 wVert,in vec2 texCoord) {
565 // tri-planar texture bending factor for this fragment's world-space normal
566 vec3 blending = abs( wNorm );
567 blending = (blending -0.2) * 0.7;
568 blending = normalize(max(blending, 0.00001)); // Force weights to sum to 1.0 (very important!)
569 float b = (blending.x + blending.y + blending.z);
570 blending /= vec3(b, b, b);
571
572 // texture coords
573 vec4 coords = wVert;
574 vec4 alphaBlend = texture2D( m_AlphaMap, texCoord.xy );
575
576 #ifdef ALPHAMAP_1
577 vec4 alphaBlend1 = texture2D( m_AlphaMap_1, texCoord.xy );
578 #endif
579 #ifdef ALPHAMAP_2
580 vec4 alphaBlend2 = texture2D( m_AlphaMap_2, texCoord.xy );
581 #endif
582
583 vec3 normal = vec3(0,0,1);
584 vec3 n = vec3(0,0,0);
585
586 #ifdef NORMALMAP
587 n = getTriPlanarBlend(coords, blending, m_NormalMap, m_DiffuseMap_0_scale).xyz;
588 normal += n * alphaBlend.r;
589 #else
590 normal += vec3(0.5,0.5,1) * alphaBlend.r;
591 #endif
592
593 #ifdef NORMALMAP_1
594 n = getTriPlanarBlend(coords, blending, m_NormalMap_1, m_DiffuseMap_1_scale).xyz;
595 normal += n * alphaBlend.g;
596 #else
597 normal += vec3(0.5,0.5,1) * alphaBlend.g;
598 #endif
599
600 #ifdef NORMALMAP_2
601 n = getTriPlanarBlend(coords, blending, m_NormalMap_2, m_DiffuseMap_2_scale).xyz;
602 normal += n * alphaBlend.b;
603 #else
604 normal += vec3(0.5,0.5,1) * alphaBlend.b;
605 #endif
606
607 #ifdef NORMALMAP_3
608 n = getTriPlanarBlend(coords, blending, m_NormalMap_3, m_DiffuseMap_3_scale).xyz;
609 normal += n * alphaBlend.a;
610 #else
611 normal += vec3(0.5,0.5,1) * alphaBlend.a;
612 #endif
613
614 #ifdef ALPHAMAP_1
615 #ifdef NORMALMAP_4
616 n = getTriPlanarBlend(coords, blending, m_NormalMap_4, m_DiffuseMap_4_scale).xyz;
617 normal += n * alphaBlend1.r;
618 #else
619 normal += vec3(0.5,0.5,1) * alphaBlend.r;
620 #endif
621
622 #ifdef NORMALMAP_5
623 n = getTriPlanarBlend(coords, blending, m_NormalMap_5, m_DiffuseMap_5_scale).xyz;
624 normal += n * alphaBlend1.g;
625 #else
626 normal += vec3(0.5,0.5,1) * alphaBlend.g;
627 #endif
628
629 #ifdef NORMALMAP_6
630 n = getTriPlanarBlend(coords, blending, m_NormalMap_6, m_DiffuseMap_6_scale).xyz;
631 normal += n * alphaBlend1.b;
632 #else
633 normal += vec3(0.5,0.5,1) * alphaBlend.b;
634 #endif
635
636 #ifdef NORMALMAP_7
637 n = getTriPlanarBlend(coords, blending, m_NormalMap_7, m_DiffuseMap_7_scale).xyz;
638 normal += n * alphaBlend1.a;
639 #else
640 normal += vec3(0.5,0.5,1) * alphaBlend.a;
641 #endif
642 #endif
643
644 #ifdef ALPHAMAP_2
645 #ifdef NORMALMAP_8
646 n = getTriPlanarBlend(coords, blending, m_NormalMap_8, m_DiffuseMap_8_scale).xyz;
647 normal += n * alphaBlend2.r;
648 #else
649 normal += vec3(0.5,0.5,1) * alphaBlend.r;
650 #endif
651
652 #ifdef NORMALMAP_9
653 n = getTriPlanarBlend(coords, blending, m_NormalMap_9, m_DiffuseMap_9_scale).xyz;
654 normal += n * alphaBlend2.g;
655 #else
656 normal += vec3(0.5,0.5,1) * alphaBlend.g;
657 #endif
658
659 #ifdef NORMALMAP_10
660 n = getTriPlanarBlend(coords, blending, m_NormalMap_10, m_DiffuseMap_10_scale).xyz;
661 normal += n * alphaBlend2.b;
662 #else
663 normal += vec3(0.5,0.5,1) * alphaBlend.b;
664 #endif
665
666 #ifdef NORMALMAP_11
667 n = getTriPlanarBlend(coords, blending, m_NormalMap_11, m_DiffuseMap_11_scale).xyz;
668 normal += n * alphaBlend2.a;
669 #else
670 normal += vec3(0.5,0.5,1) * alphaBlend.a;
671 #endif
672 #endif
673
674 normal = (normal.xyz * vec3(2.0) - vec3(1.0));
675 return normalize(normal);
676 }
677 #endif
678
679 #endif
680
681
682
683 void main(){
684
685 //----------------------
686 // diffuse calculations
687 //----------------------
688 #ifdef DIFFUSEMAP
689 #ifdef ALPHAMAP
690 #ifdef TRI_PLANAR_MAPPING
691 vec4 diffuseColor = calculateTriPlanarDiffuseBlend(wNormal, wVertex, texCoord);
692 #else
693 vec4 diffuseColor = calculateDiffuseBlend(texCoord);
694 #endif
695 #else
696 vec4 diffuseColor = texture2D(m_DiffuseMap, texCoord);
697 #endif
698 #else
699 vec4 diffuseColor = vec4(1.0);
700 #endif
701
702 float spotFallOff = 1.0;
703 if(g_LightDirection.w!=0.0){
704 vec3 L=normalize(lightVec.xyz);
705 vec3 spotdir = normalize(g_LightDirection.xyz);
706 float curAngleCos = dot(-L, spotdir);
707 float innerAngleCos = floor(g_LightDirection.w) * 0.001;
708 float outerAngleCos = fract(g_LightDirection.w);
709 float innerMinusOuter = innerAngleCos - outerAngleCos;
710
711 spotFallOff = (curAngleCos - outerAngleCos) / innerMinusOuter;
712
713 if(spotFallOff <= 0.0){
714 gl_FragColor = AmbientSum * diffuseColor;
715 return;
716 }else{
717 spotFallOff = clamp(spotFallOff, 0.0, 1.0);
718 }
719 }
720
721 //---------------------
722 // normal calculations
723 //---------------------
724 #if defined(NORMALMAP) || defined(NORMALMAP_1) || defined(NORMALMAP_2) || defined(NORMALMAP_3) || defined(NORMALMAP_4) || defined(NORMALMAP_5) || defined(NORMALMAP_6) || defined(NORMALMAP_7) || defined(NORMALMAP_8) || defined(NORMALMAP_9) || defined(NORMALMAP_10) || defined(NORMALMAP_11)
725 #ifdef TRI_PLANAR_MAPPING
726 vec3 normal = calculateNormalTriPlanar(wNormal, wVertex, texCoord);
727 #else
728 vec3 normal = calculateNormal(texCoord);
729 #endif
730 #else
731 vec3 normal = vNormal;
732 #endif
733
734
735 //-----------------------
736 // lighting calculations
737 //-----------------------
738 vec4 lightDir = vLightDir;
739 lightDir.xyz = normalize(lightDir.xyz);
740
741 vec2 light = computeLighting(normal, vViewDir.xyz, lightDir.xyz,lightDir.w*spotFallOff,m_Shininess);
742
743 vec4 specularColor = vec4(1.0);
744
745 //--------------------------
746 // final color calculations
747 //--------------------------
748 gl_FragColor = AmbientSum * diffuseColor +
749 DiffuseSum * diffuseColor * light.x +
750 SpecularSum * specularColor * light.y;
751
752 //gl_FragColor.a = alpha;
753 }
Mar 07, 2022 10:10:34 PM com.jme3.app.LegacyApplication handleError
SEVERE: Uncaught exception thrown in Thread[jME3 Main,5,main]
com.jme3.renderer.RendererException: compile error in: ShaderSource[name=Common/MatDefs/Terrain/TerrainLighting.frag, defines, type=Fragment, language=GLSL100]
ERROR: 0:1: '' : version '110' is not supported
ERROR: 0:2: '' : #version required and missing.
ERROR: 0:105: 'varying' : syntax error: syntax error
at com.jme3.renderer.opengl.GLRenderer.updateShaderSourceData(GLRenderer.java:1539)
at com.jme3.renderer.opengl.GLRenderer.updateShaderData(GLRenderer.java:1566)
at com.jme3.renderer.opengl.GLRenderer.setShader(GLRenderer.java:1631)
at com.jme3.material.logic.MultiPassLightingLogic.render(MultiPassLightingLogic.java:158)
at com.jme3.material.Technique.render(Technique.java:167)
at com.jme3.material.Material.render(Material.java:1052)
at com.jme3.renderer.RenderManager.renderGeometry(RenderManager.java:651)
at com.jme3.renderer.queue.RenderQueue.renderGeometryList(RenderQueue.java:273)
at com.jme3.renderer.queue.RenderQueue.renderQueue(RenderQueue.java:312)
at com.jme3.renderer.RenderManager.renderViewPortQueues(RenderManager.java:928)
at com.jme3.renderer.RenderManager.flushQueue(RenderManager.java:823)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:1184)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1248)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:278)
at com.jme3.system.lwjgl.LwjglWindow.runLoop(LwjglWindow.java:580)
at com.jme3.system.lwjgl.LwjglWindow.run(LwjglWindow.java:669)
at com.jme3.system.lwjgl.LwjglWindow.create(LwjglWindow.java:493)
at com.jme3.app.LegacyApplication.start(LegacyApplication.java:490)
at com.jme3.app.LegacyApplication.start(LegacyApplication.java:442)
at com.jme3.app.SimpleApplication.start(SimpleApplication.java:126)
at jme3utilities.sky.test.CubeMapExample.main(CubeMapExample.java:85)
[JME ERROR] Uncaught exception thrown in Thread[jME3 Main,5,main]
RendererException: compile error in: ShaderSource[name=Common/MatDefs/Terrain/TerrainLighting.frag, defines, type=Fragment, language=GLSL100]
ERROR: 0:1: '' : version '110' is not supported
ERROR: 0:2: '' : #version required and missing.
ERROR: 0:105: 'varying' : syntax error: syntax error
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 15 (15 by maintainers)
Commits related to this issue
- solve issue #1780 (built-in matdefs/shaders lack core-profile support) (#1781) * jme3-terrain: add GLSLCompat.glsllib to 4 jme3-terrain frag shaders * jme3-terrain: add GLSLCompat.glsllib to 4 j... — committed to jMonkeyEngine/jmonkeyengine by stephengold 2 years ago
- solve issue #1780 (built-in matdefs/shaders lack core-profile support) (#1781) * jme3-terrain: add GLSLCompat.glsllib to 4 jme3-terrain frag shaders * jme3-terrain: add GLSLCompat.glsllib to 4 j... — committed to jMonkeyEngine/jmonkeyengine by stephengold 2 years ago
Will do.
Btw I obtained my Mac solely on the basis of the Libbulletjme project. It’s not associated with JME, so I’m certain you could obtain a 2nd one for JME if you wanted to.
It seems opengl 3.2 is not supported(?) can you get some info regarding the drivers and the opengl version they support?