File: SMFVertProg4.glsl

package info (click to toggle)
spring 106.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 55,260 kB
  • sloc: cpp: 543,946; ansic: 44,800; python: 12,575; java: 12,201; awk: 5,889; sh: 1,796; asm: 1,546; xml: 655; perl: 405; php: 211; objc: 194; makefile: 76; sed: 2
file content (50 lines) | stat: -rw-r--r-- 1,418 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#version 410 core

#define SMF_TEXSQR_SIZE 1024.0
#define SMF_DETAILTEX_RES 0.02

uniform ivec4 texSquare;     // x, y, y * X + x (index into diffuseTex), mip
uniform vec3 cameraPos;
uniform vec4 lightDir;       // mapInfo->light.sunDir
uniform vec3 fogParams;      // .x := start, .y := end, .z := viewrange
uniform vec4 clipPlane;      // world-space

uniform mat4 viewMat;
uniform mat4 viewMatInv;
uniform mat4 viewProjMat;


layout(location = 0) in vec3 vertexPosAttr;

out vec3 halfDir;
out vec4 vertexPos;
out vec2 diffuseTexCoords;

out float gl_ClipDistance[SMF_CLIP_PLANE_IDX + 1];
out float fogFactor;


void main() {
	// vec4 viewDir = viewMatInv * vec4(0.0, 0.0, 0.0, 1.0);
	vec4 viewDir = vec4(cameraPos, 1.0);

	viewDir.xyz = normalize(viewDir.xyz - vertexPosAttr);
	halfDir.xyz = normalize(lightDir.xyz + viewDir.xyz);

	vertexPos = vec4(vertexPosAttr, 1.0);
	diffuseTexCoords = (floor(vertexPos.xz) / SMF_TEXSQR_SIZE) - texSquare.xy;

	gl_Position = viewProjMat * vertexPos;
	gl_ClipDistance[SMF_CLIP_PLANE_IDX] = dot(clipPlane, vertexPos);

	{
		float eyeDepth = length((viewMat * vertexPos).xyz);
		float fogRange = (fogParams.y - fogParams.x) * fogParams.z;
		float fogDepth = (eyeDepth - fogParams.x * fogParams.z) / fogRange;
		// float fogDepth = (fogParams.y * fogParams.z - eyeDepth) / fogRange;

		fogFactor = 1.0 - clamp(fogDepth, 0.0, 1.0);
		// fogFactor = clamp(fogDepth, 0.0, 1.0);
	}
}