forked from organicmaps/organicmaps
Rewrite shaders to use OpenGL ES3 syntax
Signed-off-by: renderexpert <expert@renderconsulting.co.uk>
This commit is contained in:
parent
824db45311
commit
ad9dd06429
97 changed files with 1517 additions and 1016 deletions
File diff suppressed because one or more lines are too long
Binary file not shown.
|
@ -803,7 +803,7 @@ int8_t GLFunctions::glGetUniformLocation(uint32_t programID, std::string const &
|
|||
ASSERT(glGetUniformLocationFn != nullptr, ());
|
||||
int result = glGetUniformLocationFn(programID, name.c_str());
|
||||
GLCHECKCALL();
|
||||
ASSERT(result != -1, ());
|
||||
ASSERT(result != -1, (name));
|
||||
return static_cast<int8_t>(result);
|
||||
}
|
||||
|
||||
|
|
|
@ -95,7 +95,7 @@ void GLGpuProgram::LoadUniformLocations()
|
|||
std::string name;
|
||||
GLFunctions::glGetActiveUniform(m_programID, static_cast<uint32_t>(i), &size, &info.m_type, name);
|
||||
CHECK(kSupportedTypes.find(info.m_type) != kSupportedTypes.cend(),
|
||||
("Used uniform has unsupported type. Program =", m_programName, "Type =", info.m_type));
|
||||
("Used uniform has unsupported type. Program =", m_programName, "; Type =", info.m_type, "; Name =", name));
|
||||
|
||||
info.m_location = GLFunctions::glGetUniformLocation(m_programID, name);
|
||||
m_uniforms[name] = std::move(info);
|
||||
|
|
|
@ -1,15 +1,26 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_colorTexCoords;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec2 v_colorTexCoords;
|
||||
#endif
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
|
|
|
@ -1,34 +1,36 @@
|
|||
in vec3 a_position;
|
||||
in vec3 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out float v_intensity;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_zScale;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
out float v_intensity;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
const vec4 kNormalizedLightDir = vec4(0.3162, 0.0, 0.9486, 0.0);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 pos = vec4(a_position, 1.0) * u_modelView;
|
||||
|
||||
vec4 normal = vec4(a_position + a_normal, 1.0) * u_modelView;
|
||||
normal.xyw = (normal * u_projection).xyw;
|
||||
normal.z = normal.z * u_zScale;
|
||||
|
||||
pos.xyw = (pos * u_projection).xyw;
|
||||
pos.z = a_position.z * u_zScale;
|
||||
|
||||
vec4 normDir = normal - pos;
|
||||
if (dot(normDir, normDir) != 0.0)
|
||||
v_intensity = max(0.0, -dot(kNormalizedLightDir, normalize(normDir)));
|
||||
else
|
||||
v_intensity = 0.0;
|
||||
|
||||
gl_Position = u_pivotTransform * pos;
|
||||
#ifdef VULKAN
|
||||
gl_Position.y = -gl_Position.y;
|
||||
|
|
|
@ -1,16 +1,26 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_zScale;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_colorTexCoords;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec2 v_colorTexCoords;
|
||||
#endif
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
|
@ -23,7 +33,6 @@ void main()
|
|||
gl_Position.y = -gl_Position.y;
|
||||
gl_Position.z = (gl_Position.z + gl_Position.w) * 0.5;
|
||||
#endif
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, a_colorTexCoords);
|
||||
#else
|
||||
|
|
|
@ -1,11 +1,17 @@
|
|||
in vec3 v_normal;
|
||||
layout (location = 0) in vec3 v_normal;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
const vec3 lightDir = vec3(0.316, 0.0, 0.948);
|
||||
|
||||
uniform vec4 u_color;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
float phongDiffuse = max(0.0, -dot(lightDir, v_normal));
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
in vec3 a_pos;
|
||||
in vec3 a_normal;
|
||||
layout (location = 0) in vec3 a_pos;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
|
||||
uniform mat4 u_transform;
|
||||
uniform mat4 u_normalTransform;
|
||||
layout (location = 0) out vec3 v_normal;
|
||||
|
||||
out vec3 v_normal;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
in float v_intensity;
|
||||
layout (location = 0) in float v_intensity;
|
||||
|
||||
uniform vec4 u_color;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
in float v_intensity;
|
||||
layout (location = 0) in float v_intensity;
|
||||
|
||||
uniform vec4 u_color;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,9 +1,15 @@
|
|||
in vec3 a_pos;
|
||||
in vec2 a_texCoords;
|
||||
layout (location = 0) in vec3 a_pos;
|
||||
layout (location = 1) in vec2 a_texCoords;
|
||||
|
||||
uniform mat4 u_transform;
|
||||
layout (location = 0) out float v_intensity;
|
||||
|
||||
out float v_intensity;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
in vec3 v_normal;
|
||||
in vec2 v_texCoords;
|
||||
layout (location = 0) in vec3 v_normal;
|
||||
layout (location = 1) in vec2 v_texCoords;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
const vec3 lightDir = vec3(0.316, 0.0, 0.948);
|
||||
|
||||
uniform vec4 u_color;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
float phongDiffuse = max(0.0, -dot(lightDir, v_normal));
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
in vec3 a_pos;
|
||||
in vec3 a_normal;
|
||||
in vec2 a_texCoords;
|
||||
layout (location = 0) in vec3 a_pos;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
layout (location = 2) in vec2 a_texCoords;
|
||||
|
||||
uniform mat4 u_transform;
|
||||
uniform mat4 u_normalTransform;
|
||||
uniform vec2 u_texCoordFlipping;
|
||||
layout (location = 0) out vec3 v_normal;
|
||||
layout (location = 1) out vec2 v_texCoords;
|
||||
|
||||
out vec3 v_normal;
|
||||
out vec2 v_texCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_transform;
|
||||
mat4 u_normalTransform;
|
||||
vec4 u_color;
|
||||
vec2 u_texCoordFlipping;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,17 +1,30 @@
|
|||
uniform float u_opacity;
|
||||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
uniform sampler2D u_colorTex;
|
||||
in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in vec2 v_colorTexCoords;
|
||||
#endif
|
||||
layout (location = 2) in vec3 v_radius;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
in vec3 v_radius;
|
||||
|
||||
const float aaPixelsCount = 2.5;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
#ifdef ENABLE_VTF
|
||||
|
@ -19,7 +32,6 @@ void main()
|
|||
#else
|
||||
LOW_P vec4 finalColor = texture(u_colorTex, v_colorTexCoords);
|
||||
#endif
|
||||
|
||||
float smallRadius = v_radius.z - aaPixelsCount;
|
||||
float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z,
|
||||
v_radius.x * v_radius.x + v_radius.y * v_radius.y);
|
||||
|
|
|
@ -1,19 +1,29 @@
|
|||
in vec3 a_position;
|
||||
in vec3 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec2 v_colorTexCoords;
|
||||
#endif
|
||||
layout (location = 2) out vec3 v_radius;
|
||||
|
||||
out vec3 v_radius;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,20 +1,28 @@
|
|||
uniform float u_opacity;
|
||||
layout (location = 0) in vec3 v_radius;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
in vec3 v_radius;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
const float kAntialiasingScalar = 0.9;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
float d = dot(v_radius.xy, v_radius.xy);
|
||||
vec4 finalColor = v_color;
|
||||
|
||||
float aaRadius = v_radius.z * kAntialiasingScalar;
|
||||
float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z, d);
|
||||
finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue);
|
||||
|
||||
v_FragColor = finalColor;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,21 @@
|
|||
in vec3 a_normal;
|
||||
in vec3 a_position;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_normal;
|
||||
layout (location = 1) in vec3 a_position;
|
||||
layout (location = 2) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec3 v_radius;
|
||||
layout (location = 1) out vec4 v_color;
|
||||
|
||||
out vec3 v_radius;
|
||||
out vec4 v_color;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -15,7 +23,6 @@ void main()
|
|||
vec4 pos = vec4(a_position.xy, 0, 1) * u_modelView;
|
||||
vec4 shiftedPos = vec4(radius.xy, 0, 0) + pos;
|
||||
gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0);
|
||||
|
||||
v_radius = radius;
|
||||
v_color = a_color;
|
||||
}
|
||||
|
|
|
@ -1,16 +1,26 @@
|
|||
uniform float u_opacity;
|
||||
|
||||
in vec4 v_normal;
|
||||
layout (location = 0) in vec4 v_normal;
|
||||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 1) in LOW_P vec4 v_color;
|
||||
#else
|
||||
uniform sampler2D u_colorTex;
|
||||
in vec2 v_colorTexCoords;
|
||||
layout (location = 2) in vec2 v_colorTexCoords;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
const float aaPixelsCount = 2.5;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
const float aaPixelsCount = 2.5;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -19,16 +29,13 @@ void main()
|
|||
#else
|
||||
LOW_P vec4 color = texture(u_colorTex, v_colorTexCoords);
|
||||
#endif
|
||||
|
||||
float r1 = (v_normal.z - aaPixelsCount) * (v_normal.z - aaPixelsCount);
|
||||
float r2 = v_normal.x * v_normal.x + v_normal.y * v_normal.y;
|
||||
float r3 = v_normal.z * v_normal.z;
|
||||
float alpha = mix(step(r3, r2), smoothstep(r1, r3, r2), v_normal.w);
|
||||
|
||||
LOW_P vec4 finalColor = color;
|
||||
finalColor.a = finalColor.a * u_opacity * (1.0 - alpha);
|
||||
if (finalColor.a == 0.0)
|
||||
discard;
|
||||
|
||||
v_FragColor = finalColor;
|
||||
}
|
||||
|
|
|
@ -1,17 +1,28 @@
|
|||
in vec3 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec4 a_colorTexCoords;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec4 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
|
||||
out vec4 v_normal;
|
||||
layout (location = 0) out vec4 v_normal;
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 1) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 2) out vec2 v_colorTexCoords;
|
||||
#endif
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
|
@ -19,7 +30,6 @@ void main()
|
|||
vec4 p = vec4(a_position, 1) * u_modelView;
|
||||
vec4 pos = vec4(a_normal.xy + a_colorTexCoords.zw, 0, 0) + p;
|
||||
gl_Position = applyPivotTransform(pos * u_projection, u_pivotTransform, 0.0);
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, a_colorTexCoords.xy);
|
||||
#else
|
||||
|
|
|
@ -1,17 +1,28 @@
|
|||
in vec3 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec4 a_colorTexCoords;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec4 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
|
||||
out vec4 v_normal;
|
||||
layout (location = 0) out vec4 v_normal;
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 1) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 2) out vec2 v_colorTexCoords;
|
||||
#endif
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
|
@ -19,7 +30,6 @@ void main()
|
|||
vec4 pivot = vec4(a_position.xyz, 1.0) * u_modelView;
|
||||
vec4 offset = vec4(a_normal.xy + a_colorTexCoords.zw, 0.0, 0.0) * u_projection;
|
||||
gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform, 0.0, offset.xy);
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, a_colorTexCoords.xy);
|
||||
#else
|
||||
|
|
|
@ -1,26 +1,35 @@
|
|||
in vec2 v_colorTexCoord;
|
||||
in vec2 v_maskTexCoord;
|
||||
//in vec2 v_halfLength;
|
||||
layout (location = 0) in vec2 v_colorTexCoord;
|
||||
layout (location = 1) in vec2 v_maskTexCoord;
|
||||
//layout (location = 2) in vec2 v_halfLength;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform sampler2D u_maskTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
layout (binding = 2) uniform sampler2D u_maskTex;
|
||||
|
||||
//const float aaPixelsCount = 2.5;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture(u_colorTex, v_colorTexCoord);
|
||||
float mask = texture(u_maskTex, v_maskTexCoord).r;
|
||||
color.a = color.a * mask * u_opacity;
|
||||
|
||||
// Disabled too agressive AA-like blurring of edges,
|
||||
// see https://github.com/organicmaps/organicmaps/issues/6583.
|
||||
//float currentW = abs(v_halfLength.x);
|
||||
//float diff = v_halfLength.y - currentW;
|
||||
//color.a *= mix(0.3, 1.0, clamp(diff / aaPixelsCount, 0.0, 1.0));
|
||||
|
||||
v_FragColor = color;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,23 @@
|
|||
in vec3 a_position;
|
||||
in vec3 a_normal;
|
||||
in vec2 a_colorTexCoord;
|
||||
in vec4 a_maskTexCoord;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoord;
|
||||
layout (location = 3) in vec4 a_maskTexCoord;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_maskTexCoord;
|
||||
//layout (location = 2) out vec2 v_halfLength;
|
||||
|
||||
out vec2 v_colorTexCoord;
|
||||
out vec2 v_maskTexCoord;
|
||||
//out vec2 v_halfLength;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -21,12 +29,10 @@ void main()
|
|||
transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal,
|
||||
u_modelView, halfWidth);
|
||||
}
|
||||
|
||||
float uOffset = min(length(vec4(kShapeCoordScalar, 0, 0, 0) * u_modelView) * a_maskTexCoord.x, 1.0);
|
||||
v_colorTexCoord = a_colorTexCoord;
|
||||
v_maskTexCoord = vec2(a_maskTexCoord.y + uOffset * a_maskTexCoord.z, a_maskTexCoord.w);
|
||||
//v_halfLength = vec2(sign(a_normal.z) * halfWidth, abs(a_normal.z));
|
||||
vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection;
|
||||
|
||||
gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
uniform vec4 u_color;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
vec4 u_color;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
in vec2 a_position;
|
||||
layout (location = 0) in vec2 a_position;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,16 +1,26 @@
|
|||
uniform float u_opacity;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
uniform sampler2D u_colorTex;
|
||||
in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in vec2 v_colorTexCoords;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
layout (location = 2) in vec2 v_maskTexCoords;
|
||||
|
||||
uniform sampler2D u_maskTex;
|
||||
in vec2 v_maskTexCoords;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 2) uniform sampler2D u_maskTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -23,4 +33,3 @@ void main()
|
|||
color.a *= u_opacity;
|
||||
v_FragColor = color;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,18 +1,29 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_colorTexCoords;
|
||||
in vec2 a_maskTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_colorTexCoords;
|
||||
layout (location = 2) in vec2 a_maskTexCoords;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec2 v_colorTexCoords;
|
||||
#endif
|
||||
layout (location = 2) out vec2 v_maskTexCoords;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
out vec2 v_maskTexCoords;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
in vec2 v_texCoords;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) in vec2 v_texCoords;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,11 +1,14 @@
|
|||
in vec2 a_position;
|
||||
in vec2 a_texCoords;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec2 a_position;
|
||||
layout (location = 1) in vec2 a_texCoords;
|
||||
layout (location = 2) in vec4 a_color;
|
||||
|
||||
out vec2 v_texCoords;
|
||||
out vec4 v_color;
|
||||
layout (location = 0) out vec2 v_texCoords;
|
||||
layout (location = 1) out vec4 v_color;
|
||||
|
||||
uniform mat4 u_projection;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_projection;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,17 +1,27 @@
|
|||
uniform float u_opacity;
|
||||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
uniform sampler2D u_colorTex;
|
||||
in vec2 v_colorTexCoord;
|
||||
layout (location = 1) in vec2 v_colorTexCoord;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
//layout (location = 2) in vec2 v_halfLength;
|
||||
|
||||
//in vec2 v_halfLength;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
//const float aaPixelsCount = 2.5;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
#ifdef ENABLE_VTF
|
||||
|
@ -20,12 +30,10 @@ void main()
|
|||
LOW_P vec4 color = texture(u_colorTex, v_colorTexCoord);
|
||||
#endif
|
||||
color.a *= u_opacity;
|
||||
|
||||
// Disabled too agressive AA-like blurring of edges,
|
||||
// see https://github.com/organicmaps/organicmaps/issues/6583.
|
||||
//float currentW = abs(v_halfLength.x);
|
||||
//float diff = v_halfLength.y - currentW;
|
||||
//color.a *= mix(0.3, 1.0, clamp(diff / aaPixelsCount, 0.0, 1.0));
|
||||
|
||||
v_FragColor = color;
|
||||
}
|
||||
|
|
|
@ -1,19 +1,30 @@
|
|||
in vec3 a_position;
|
||||
in vec3 a_normal;
|
||||
in vec2 a_colorTexCoord;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoord;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
|
||||
//out vec2 v_halfLength;
|
||||
//layout (location = 2) out vec2 v_halfLength;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -25,7 +36,6 @@ void main()
|
|||
transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + normal,
|
||||
u_modelView, halfWidth);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, a_colorTexCoord);
|
||||
#else
|
||||
|
|
|
@ -1,11 +1,22 @@
|
|||
uniform sampler2D u_colorTex;
|
||||
uniform sampler2D u_maskTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in vec2 v_maskTexCoords;
|
||||
|
||||
in vec2 v_colorTexCoords;
|
||||
in vec2 v_maskTexCoords;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
layout (binding = 2) uniform sampler2D u_maskTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,14 +1,22 @@
|
|||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
in vec2 a_maskTexCoords;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
layout (location = 3) in vec2 a_maskTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec2 v_maskTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
out vec2 v_maskTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,15 +1,22 @@
|
|||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
in vec2 a_maskTexCoords;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
layout (location = 3) in vec2 a_maskTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_zScale;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec2 v_maskTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
out vec2 v_maskTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,30 +1,33 @@
|
|||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec2 a_normal;
|
||||
layout (location = 1) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform vec3 u_position;
|
||||
uniform float u_azimut;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_position;
|
||||
vec2 u_lineParams;
|
||||
float u_accuracy;
|
||||
float u_zScale;
|
||||
float u_opacity;
|
||||
float u_azimut;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
float sinV = sin(u_azimut);
|
||||
float cosV = cos(u_azimut);
|
||||
|
||||
mat4 rotation;
|
||||
rotation[0] = vec4(cosV, sinV, 0.0, 0.0);
|
||||
rotation[1] = vec4(-sinV, cosV, 0.0, 0.0);
|
||||
rotation[2] = vec4(0.0, 0.0, 1.0, 0.0);
|
||||
rotation[3] = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
|
||||
vec4 pos = vec4(u_position, 1.0) * u_modelView;
|
||||
vec4 pos = vec4(u_position.xyz, 1.0) * u_modelView;
|
||||
vec4 normal = vec4(a_normal, 0, 0);
|
||||
vec4 shiftedPos = normal * rotation + pos;
|
||||
|
||||
gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0);
|
||||
v_colorTexCoords = a_colorTexCoords;
|
||||
}
|
||||
|
|
|
@ -1,23 +1,29 @@
|
|||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 pos = vec4(a_position.xyz, 1) * u_modelView;
|
||||
|
||||
float normalLen = length(a_normal);
|
||||
vec4 n = vec4(a_position.xy + a_normal * kShapeCoordScalar, 0.0, 0.0) * u_modelView;
|
||||
vec4 norm = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
if (dot(n, n) != 0.0)
|
||||
norm = normalize(n) * normalLen;
|
||||
|
||||
vec4 shiftedPos = norm + pos;
|
||||
gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0);
|
||||
v_colorTexCoords = a_colorTexCoords;
|
||||
|
|
|
@ -1,15 +1,20 @@
|
|||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec2 a_normal;
|
||||
layout (location = 1) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform vec3 u_position;
|
||||
uniform float u_accuracy;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_zScale;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_position;
|
||||
vec2 u_lineParams;
|
||||
float u_accuracy;
|
||||
float u_zScale;
|
||||
float u_opacity;
|
||||
float u_azimut;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -17,6 +22,5 @@ void main()
|
|||
vec4 normal = vec4(a_normal * u_accuracy, 0.0, 0.0);
|
||||
position = (position + normal) * u_projection;
|
||||
gl_Position = applyPivotTransform(position, u_pivotTransform, u_position.z * u_zScale);
|
||||
|
||||
v_colorTexCoords = a_colorTexCoords;
|
||||
}
|
||||
|
|
|
@ -1,38 +1,43 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
in vec3 v_length;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) in vec3 v_length;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
uniform vec4 u_color;
|
||||
uniform vec4 u_outlineColor;
|
||||
uniform vec4 u_routeParams;
|
||||
uniform vec4 u_maskColor;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
uniform vec2 u_fakeBorders;
|
||||
uniform vec4 u_fakeColor;
|
||||
uniform vec4 u_fakeOutlineColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
const float kAntialiasingThreshold = 0.92;
|
||||
|
||||
const float kOutlineThreshold1 = 0.81;
|
||||
const float kOutlineThreshold2 = 0.71;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
if (v_length.x < v_length.z)
|
||||
discard;
|
||||
|
||||
vec2 coefs = step(v_length.xx, u_fakeBorders);
|
||||
coefs.y = 1.0 - coefs.y;
|
||||
vec4 mainColor = mix(u_color, u_fakeColor, coefs.x);
|
||||
mainColor = mix(mainColor, u_fakeColor, coefs.y);
|
||||
vec4 mainOutlineColor = mix(u_outlineColor, u_fakeOutlineColor, coefs.x);
|
||||
mainOutlineColor = mix(mainOutlineColor, u_fakeOutlineColor, coefs.y);
|
||||
|
||||
vec4 color = mix(mix(mainColor, vec4(v_color.rgb, 1.0), v_color.a), mainColor, step(u_routeParams.w, 0.0));
|
||||
color = mix(color, mainOutlineColor, step(kOutlineThreshold1, abs(v_length.y)));
|
||||
color = mix(color, mainOutlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_length.y)));
|
||||
|
|
|
@ -1,16 +1,28 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec3 a_length;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec3 a_length;
|
||||
layout (location = 3) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec3 v_length;
|
||||
layout (location = 1) out vec4 v_color;
|
||||
|
||||
uniform vec4 u_routeParams;
|
||||
|
||||
out vec3 v_length;
|
||||
out vec4 v_color;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -24,7 +36,6 @@ void main()
|
|||
if (u_routeParams.y != 0.0)
|
||||
len = vec2(a_length.x + a_length.y * u_routeParams.y, a_length.z);
|
||||
}
|
||||
|
||||
v_length = vec3(len, u_routeParams.z);
|
||||
v_color = a_color;
|
||||
vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection;
|
||||
|
|
|
@ -1,14 +1,29 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform float u_opacity;
|
||||
uniform vec4 u_maskColor;
|
||||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
|
||||
in vec2 v_colorTexCoords;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,14 +1,26 @@
|
|||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
uniform float u_arrowHalfWidth;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -19,9 +31,7 @@ void main()
|
|||
transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm,
|
||||
u_modelView, length(norm));
|
||||
}
|
||||
|
||||
v_colorTexCoords = a_colorTexCoords;
|
||||
|
||||
vec4 pos = vec4(transformedAxisPos, a_position.z, 1.0) * u_projection;
|
||||
gl_Position = applyPivotTransform(pos, u_pivotTransform, 0.0);
|
||||
}
|
||||
|
|
|
@ -1,16 +1,28 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
in vec3 v_length;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) in vec3 v_length;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
uniform vec4 u_color;
|
||||
uniform vec2 u_pattern;
|
||||
uniform vec4 u_maskColor;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
uniform vec2 u_fakeBorders;
|
||||
uniform vec4 u_fakeColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
const float kAntialiasingThreshold = 0.92;
|
||||
|
||||
|
@ -21,18 +33,14 @@ float alphaFromPattern(float curLen, float dashLen, float gapLen)
|
|||
return step(offset, dashLen);
|
||||
}
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
if (v_length.x < v_length.z)
|
||||
discard;
|
||||
|
||||
vec2 coefs = step(v_length.xx, u_fakeBorders);
|
||||
coefs.y = 1.0 - coefs.y;
|
||||
vec4 mainColor = mix(u_color, u_fakeColor, coefs.x);
|
||||
mainColor = mix(mainColor, u_fakeColor, coefs.y);
|
||||
|
||||
vec4 color = mainColor + v_color;
|
||||
color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_length.y))) *
|
||||
alphaFromPattern(v_length.x, u_pattern.x, u_pattern.y);
|
||||
|
|
|
@ -1,29 +1,40 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
uniform vec4 u_routeParams;
|
||||
uniform vec4 u_maskColor;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) in vec4 v_radius;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
in vec4 v_radius;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
const float kAntialiasingPixelsCount = 2.5;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 finalColor = v_color;
|
||||
|
||||
float aaRadius = max(v_radius.z - kAntialiasingPixelsCount, 0.0);
|
||||
float stepValue = smoothstep(aaRadius * aaRadius, v_radius.z * v_radius.z,
|
||||
dot(v_radius.xy, v_radius.xy));
|
||||
finalColor.a = finalColor.a * u_opacity * (1.0 - stepValue);
|
||||
if (finalColor.a < 0.01 || u_routeParams.y > v_radius.w)
|
||||
discard;
|
||||
|
||||
finalColor = vec4(mix(finalColor.rgb, u_maskColor.rgb, u_maskColor.a), finalColor.a);
|
||||
v_FragColor = finalColor;
|
||||
}
|
||||
|
|
|
@ -1,16 +1,27 @@
|
|||
in vec4 a_position;
|
||||
in vec3 a_normal;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec3 a_normal;
|
||||
layout (location = 2) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec4 v_radius;
|
||||
layout (location = 1) out vec4 v_color;
|
||||
|
||||
uniform vec2 u_angleCosSin;
|
||||
uniform vec4 u_routeParams;
|
||||
|
||||
out vec4 v_radius;
|
||||
out vec4 v_color;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_routeParams;
|
||||
vec4 u_color;
|
||||
vec4 u_maskColor;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_fakeColor;
|
||||
vec4 u_fakeOutlineColor;
|
||||
vec2 u_fakeBorders;
|
||||
vec2 u_pattern;
|
||||
vec2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
23
shaders/GL/ruler.fsh.glsl
Normal file
23
shaders/GL/ruler.fsh.glsl
Normal file
|
@ -0,0 +1,23 @@
|
|||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
vec2 u_contrastGamma;
|
||||
vec2 u_position;
|
||||
float u_isOutlinePass;
|
||||
float u_opacity;
|
||||
float u_length;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 finalColor = texture(u_colorTex, v_colorTexCoords);
|
||||
finalColor.a *= u_opacity;
|
||||
v_FragColor = finalColor;
|
||||
}
|
|
@ -1,12 +1,19 @@
|
|||
in vec2 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec2 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform vec2 u_position;
|
||||
uniform float u_length;
|
||||
uniform mat4 u_projection;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
vec2 u_contrastGamma;
|
||||
vec2 u_position;
|
||||
float u_isOutlinePass;
|
||||
float u_opacity;
|
||||
float u_length;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
17
shaders/GL/screen_quad.fsh.glsl
Normal file
17
shaders/GL/screen_quad.fsh.glsl
Normal file
|
@ -0,0 +1,17 @@
|
|||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 finalColor = texture(u_colorTex, v_colorTexCoords);
|
||||
finalColor.a *= u_opacity;
|
||||
v_FragColor = finalColor;
|
||||
}
|
|
@ -1,11 +1,10 @@
|
|||
in vec2 a_pos;
|
||||
in vec2 a_tcoord;
|
||||
layout (location = 0) in vec2 a_pos;
|
||||
layout (location = 1) in vec2 a_tcoord;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
void main()
|
||||
{
|
||||
v_colorTexCoords = a_tcoord;
|
||||
gl_Position = vec4(a_pos, 0.0, 1.0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,28 @@
|
|||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
uniform sampler2D u_colorTex;
|
||||
in vec2 v_colorTexCoord;
|
||||
layout (location = 1) in vec2 v_colorTexCoord;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
uniform float u_opacity;
|
||||
layout (location = 2) in float v_lengthY;
|
||||
|
||||
in float v_lengthY;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_position;
|
||||
vec2 u_lineParams;
|
||||
float u_accuracy;
|
||||
float u_zScale;
|
||||
float u_opacity;
|
||||
float u_azimut;
|
||||
};
|
||||
|
||||
const float kAntialiasingThreshold = 0.92;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
#ifdef ENABLE_VTF
|
||||
|
@ -21,6 +32,5 @@ void main()
|
|||
#endif
|
||||
color.a *= u_opacity;
|
||||
color.a *= (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_lengthY)));
|
||||
|
||||
v_FragColor = color;
|
||||
}
|
||||
|
|
|
@ -1,22 +1,33 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
in vec3 a_length;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
|
||||
uniform vec2 u_lineParams;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
layout (location = 3) in vec3 a_length;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
layout (location = 2) out float v_lengthY;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_position;
|
||||
vec2 u_lineParams;
|
||||
float u_accuracy;
|
||||
float u_zScale;
|
||||
float u_opacity;
|
||||
float u_azimut;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
out float v_lengthY;
|
||||
const float kAntialiasingThreshold = 0.92;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -30,7 +41,6 @@ void main()
|
|||
if (u_lineParams.y != 0.0)
|
||||
len = vec2(a_length.x + a_length.y * u_lineParams.y, a_length.z);
|
||||
}
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, a_colorTexCoords);
|
||||
#else
|
||||
|
|
|
@ -5,8 +5,8 @@ Bookmark user_mark.vsh.glsl user_mark.fsh.glsl
|
|||
BookmarkAnim user_mark.vsh.glsl user_mark.fsh.glsl
|
||||
TextOutlined text_outlined.vsh.glsl text.fsh.glsl
|
||||
Text text.vsh.glsl text.fsh.glsl
|
||||
TextStaticOutlinedGui text_outlined_gui.vsh.glsl text.fsh.glsl
|
||||
TextOutlinedGui text_outlined_gui.vsh.glsl text.fsh.glsl
|
||||
TextStaticOutlinedGui text_outlined_gui.vsh.glsl text_outlined_gui.fsh.glsl
|
||||
TextOutlinedGui text_outlined_gui.vsh.glsl text_outlined_gui.fsh.glsl
|
||||
Area area.vsh.glsl solid_color.fsh.glsl
|
||||
AreaOutline area.vsh.glsl solid_color.fsh.glsl
|
||||
Area3d area3d.vsh.glsl texturing3d.fsh.glsl
|
||||
|
@ -18,10 +18,10 @@ PathSymbol path_symbol.vsh.glsl texturing.fsh.glsl
|
|||
TransparentArea area.vsh.glsl solid_color.fsh.glsl
|
||||
CapJoin circle.vsh.glsl circle.fsh.glsl
|
||||
HatchingArea hatching_area.vsh.glsl hatching_area.fsh.glsl
|
||||
TexturingGui texturing_gui.vsh.glsl texturing.fsh.glsl
|
||||
Ruler ruler.vsh.glsl texturing.fsh.glsl
|
||||
Accuracy position_accuracy3d.vsh.glsl texturing.fsh.glsl
|
||||
MyPosition my_position.vsh.glsl texturing.fsh.glsl
|
||||
TexturingGui texturing_gui.vsh.glsl texturing_gui.fsh.glsl
|
||||
Ruler ruler.vsh.glsl ruler.fsh.glsl
|
||||
Accuracy position_accuracy3d.vsh.glsl texturing_position.fsh.glsl
|
||||
MyPosition my_position.vsh.glsl texturing_position.fsh.glsl
|
||||
SelectionLine selection_line.vsh.glsl selection_line.fsh.glsl
|
||||
Transit transit.vsh.glsl transit.fsh.glsl
|
||||
TransitMarker transit_marker.vsh.glsl transit_marker.fsh.glsl
|
||||
|
@ -33,7 +33,7 @@ CirclePoint circle_point.vsh.glsl circle_point.fsh.glsl
|
|||
BookmarkAboveText user_mark.vsh.glsl user_mark.fsh.glsl
|
||||
BookmarkAnimAboveText user_mark.vsh.glsl user_mark.fsh.glsl
|
||||
DebugRect debug_rect.vsh.glsl debug_rect.fsh.glsl
|
||||
ScreenQuad screen_quad.vsh.glsl texturing.fsh.glsl
|
||||
ScreenQuad screen_quad.vsh.glsl screen_quad.fsh.glsl
|
||||
Arrow3d arrow3d.vsh.glsl arrow3d.fsh.glsl
|
||||
Arrow3dTextured arrow3d_textured.vsh.glsl arrow3d_textured.fsh.glsl
|
||||
Arrow3dShadow arrow3d_shadow.vsh.glsl arrow3d_shadow.fsh.glsl
|
||||
|
|
|
@ -1,21 +1,24 @@
|
|||
// Implementation of Subpixel Morphological Antialiasing (SMAA) is based on https://github.com/iryoku/smaa
|
||||
layout (location = 0) in vec4 v_coords;
|
||||
layout (location = 1) in vec4 v_offset0;
|
||||
layout (location = 2) in vec4 v_offset1;
|
||||
layout (location = 3) in vec4 v_offset2;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform sampler2D u_smaaArea;
|
||||
uniform sampler2D u_smaaSearch;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
uniform vec4 u_framebufferMetrics;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
vec4 u_framebufferMetrics;
|
||||
};
|
||||
|
||||
in vec4 v_coords;
|
||||
in vec4 v_offset0;
|
||||
in vec4 v_offset1;
|
||||
in vec4 v_offset2;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
layout (binding = 2) uniform sampler2D u_smaaArea;
|
||||
layout (binding = 3) uniform sampler2D u_smaaSearch;
|
||||
|
||||
#define SMAA_SEARCHTEX_SIZE vec2(66.0, 33.0)
|
||||
#define SMAA_SEARCHTEX_PACKED_SIZE vec2(64.0, 16.0)
|
||||
#define SMAA_AREATEX_MAX_DISTANCE 16.0
|
||||
#define SMAA_AREATEX_PIXEL_SIZE (vec2(1.0 / 256.0, 1.0 / 1024.0))
|
||||
|
||||
#define SMAALoopBegin(condition) while (condition) {
|
||||
#define SMAALoopEnd }
|
||||
#define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0)
|
||||
|
@ -32,16 +35,13 @@ float SMAASearchLength(vec2 e, float offset)
|
|||
// of the space horizontally.
|
||||
vec2 scale = SMAA_SEARCHTEX_SIZE * vec2(0.5, -1.0);
|
||||
vec2 bias = SMAA_SEARCHTEX_SIZE * vec2(offset, 1.0);
|
||||
|
||||
// Scale and bias to access texel centers.
|
||||
scale += vec2(-1.0, 1.0);
|
||||
bias += vec2( 0.5, -0.5);
|
||||
|
||||
// Convert from pixel coordinates to texcoords.
|
||||
// (We use SMAA_SEARCHTEX_PACKED_SIZE because the texture is cropped).
|
||||
scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE;
|
||||
bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE;
|
||||
|
||||
// Lookup the search texture.
|
||||
return SMAASampleLevelZero(u_smaaSearch, scale * e + bias).r;
|
||||
}
|
||||
|
@ -101,79 +101,60 @@ vec2 SMAAArea(vec2 dist, float e1, float e2)
|
|||
return SMAASampleLevelZero(u_smaaArea, texcoord).rg;
|
||||
}
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 weights = vec4(0.0, 0.0, 0.0, 0.0);
|
||||
vec2 e = texture(u_colorTex, v_coords.xy).rg;
|
||||
|
||||
if (e.g > 0.0) // Edge at north
|
||||
{
|
||||
vec2 d;
|
||||
|
||||
// Find the distance to the left.
|
||||
vec3 coords;
|
||||
coords.x = SMAASearchXLeft(v_offset0.xy, v_offset2.x);
|
||||
coords.y = v_offset1.y;
|
||||
d.x = coords.x;
|
||||
|
||||
// Now fetch the left crossing edges, two at a time using bilinear
|
||||
// filtering. Sampling at -0.25 enables to discern what value each edge has.
|
||||
float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).r;
|
||||
|
||||
// Find the distance to the right.
|
||||
coords.z = SMAASearchXRight(v_offset0.zw, v_offset2.y);
|
||||
d.y = coords.z;
|
||||
|
||||
// We want the distances to be in pixel units (doing this here allow to
|
||||
// better interleave arithmetic and memory accesses).
|
||||
vec2 zz = u_framebufferMetrics.zz;
|
||||
d = abs(SMAARound(zz * d - v_coords.zz));
|
||||
|
||||
// SMAAArea below needs a sqrt, as the areas texture is compressed
|
||||
// quadratically.
|
||||
vec2 sqrt_d = sqrt(d);
|
||||
|
||||
// Fetch the right crossing edges.
|
||||
float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.zy, SMAAOffset(1, 0)).r;
|
||||
|
||||
// Here we know how this pattern looks like, now it is time for getting
|
||||
// the actual area.
|
||||
weights.rg = SMAAArea(sqrt_d, e1, e2);
|
||||
}
|
||||
|
||||
if (e.r > 0.0) // Edge at west
|
||||
{
|
||||
vec2 d;
|
||||
|
||||
// Find the distance to the top.
|
||||
vec3 coords;
|
||||
coords.y = SMAASearchYUp(v_offset1.xy, v_offset2.z);
|
||||
coords.x = v_offset0.x;
|
||||
d.x = coords.y;
|
||||
|
||||
// Fetch the top crossing edges.
|
||||
float e1 = SMAASampleLevelZero(u_colorTex, coords.xy).g;
|
||||
|
||||
// Find the distance to the bottom.
|
||||
coords.z = SMAASearchYDown(v_offset1.zw, v_offset2.w);
|
||||
d.y = coords.z;
|
||||
|
||||
// We want the distances to be in pixel units.
|
||||
vec2 ww = u_framebufferMetrics.ww;
|
||||
d = abs(SMAARound(ww * d - v_coords.ww));
|
||||
|
||||
// SMAAArea below needs a sqrt, as the areas texture is compressed
|
||||
// quadratically.
|
||||
vec2 sqrt_d = sqrt(d);
|
||||
|
||||
// Fetch the bottom crossing edges.
|
||||
float e2 = SMAASampleLevelZeroOffset(u_colorTex, coords.xz, SMAAOffset(0, 1)).g;
|
||||
|
||||
// Get the area for this direction.
|
||||
weights.ba = SMAAArea(sqrt_d, e1, e2);
|
||||
}
|
||||
|
||||
v_FragColor = weights;
|
||||
}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
// Implementation of Subpixel Morphological Antialiasing (SMAA) is based on https://github.com/iryoku/smaa
|
||||
layout (location = 0) in vec2 a_pos;
|
||||
layout (location = 1) in vec2 a_tcoord;
|
||||
|
||||
in vec2 a_pos;
|
||||
in vec2 a_tcoord;
|
||||
layout (location = 0) out vec4 v_coords;
|
||||
layout (location = 1) out vec4 v_offset0;
|
||||
layout (location = 2) out vec4 v_offset1;
|
||||
layout (location = 3) out vec4 v_offset2;
|
||||
|
||||
uniform vec4 u_framebufferMetrics;
|
||||
|
||||
out vec4 v_coords;
|
||||
out vec4 v_offset0;
|
||||
out vec4 v_offset1;
|
||||
out vec4 v_offset2;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
vec4 u_framebufferMetrics;
|
||||
};
|
||||
|
||||
// SMAA_MAX_SEARCH_STEPS specifies the maximum steps performed in the
|
||||
// horizontal/vertical pattern searches, at each side of the pixel.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
// Implementation of Subpixel Morphological Antialiasing (SMAA) is based on https://github.com/iryoku/smaa
|
||||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in vec4 v_offset0;
|
||||
layout (location = 2) in vec4 v_offset1;
|
||||
layout (location = 3) in vec4 v_offset2;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
in vec2 v_colorTexCoords;
|
||||
in vec4 v_offset0;
|
||||
in vec4 v_offset1;
|
||||
in vec4 v_offset2;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
// SMAA_THRESHOLD specifies the threshold or sensitivity to edges.
|
||||
// Lowering this value you will be able to detect more edges at the expense of
|
||||
|
@ -22,46 +23,36 @@ const vec2 kThreshold = vec2(SMAA_THRESHOLD, SMAA_THRESHOLD);
|
|||
// that, if there is too much contrast in a direction, that will hide
|
||||
// perceptually contrast in the other neighbors.
|
||||
#define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0
|
||||
|
||||
// Standard relative luminance weights.
|
||||
// https://en.wikipedia.org/wiki/Relative_luminance
|
||||
const vec3 kWeights = vec3(0.2126, 0.7152, 0.0722);
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Calculate lumas.
|
||||
float L = dot(texture(u_colorTex, v_colorTexCoords).rgb, kWeights);
|
||||
float Lleft = dot(texture(u_colorTex, v_offset0.xy).rgb, kWeights);
|
||||
float Ltop = dot(texture(u_colorTex, v_offset0.zw).rgb, kWeights);
|
||||
|
||||
// We do the usual threshold.
|
||||
vec4 delta;
|
||||
delta.xy = abs(L - vec2(Lleft, Ltop));
|
||||
vec2 edges = step(kThreshold, delta.xy);
|
||||
if (dot(edges, vec2(1.0, 1.0)) == 0.0)
|
||||
discard;
|
||||
|
||||
// Calculate right and bottom deltas.
|
||||
float Lright = dot(texture(u_colorTex, v_offset1.xy).rgb, kWeights);
|
||||
float Lbottom = dot(texture(u_colorTex, v_offset1.zw).rgb, kWeights);
|
||||
delta.zw = abs(L - vec2(Lright, Lbottom));
|
||||
|
||||
// Calculate the maximum delta in the direct neighborhood.
|
||||
vec2 maxDelta = max(delta.xy, delta.zw);
|
||||
|
||||
// Calculate left-left and top-top deltas.
|
||||
float Lleftleft = dot(texture(u_colorTex, v_offset2.xy).rgb, kWeights);
|
||||
float Ltoptop = dot(texture(u_colorTex, v_offset2.zw).rgb, kWeights);
|
||||
delta.zw = abs(vec2(Lleft, Ltop) - vec2(Lleftleft, Ltoptop));
|
||||
|
||||
// Calculate the final maximum delta.
|
||||
maxDelta = max(maxDelta.xy, delta.zw);
|
||||
float finalDelta = max(maxDelta.x, maxDelta.y);
|
||||
|
||||
// Local contrast adaptation
|
||||
edges *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy);
|
||||
|
||||
v_FragColor = vec4(edges, 0.0, 1.0);
|
||||
}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
// Implementation of Subpixel Morphological Antialiasing (SMAA) is based on https://github.com/iryoku/smaa
|
||||
layout (location = 0) in vec2 a_pos;
|
||||
layout (location = 1) in vec2 a_tcoord;
|
||||
|
||||
in vec2 a_pos;
|
||||
in vec2 a_tcoord;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec4 v_offset0;
|
||||
layout (location = 2) out vec4 v_offset1;
|
||||
layout (location = 3) out vec4 v_offset2;
|
||||
|
||||
uniform vec4 u_framebufferMetrics;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
out vec4 v_offset0;
|
||||
out vec4 v_offset1;
|
||||
out vec4 v_offset2;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
vec4 u_framebufferMetrics;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -18,4 +20,3 @@ void main()
|
|||
v_offset2 = u_framebufferMetrics.xyxy * vec4(-2.0, 0.0, 0.0, -2.0) + a_tcoord.xyxy;
|
||||
gl_Position = vec4(a_pos, 0.0, 1.0);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,20 @@
|
|||
// Implementation of Subpixel Morphological Antialiasing (SMAA) is based on https://github.com/iryoku/smaa
|
||||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in vec4 v_offset;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform sampler2D u_blendingWeightTex;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
uniform vec4 u_framebufferMetrics;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
vec4 u_framebufferMetrics;
|
||||
};
|
||||
|
||||
in vec2 v_colorTexCoords;
|
||||
in vec4 v_offset;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
layout (binding = 2) uniform sampler2D u_blendingWeightTex;
|
||||
|
||||
#define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0)
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
// Fetch the blending weights for current pixel.
|
||||
|
@ -19,7 +22,6 @@ void main()
|
|||
a.x = texture(u_blendingWeightTex, v_offset.xy).a; // Right
|
||||
a.y = texture(u_blendingWeightTex, v_offset.zw).g; // Top
|
||||
a.wz = texture(u_blendingWeightTex, v_colorTexCoords).xz; // Bottom / Left
|
||||
|
||||
// Is there any blending weight with a value greater than 0.0?
|
||||
if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5)
|
||||
{
|
||||
|
@ -36,11 +38,9 @@ void main()
|
|||
blendingWeight = a.xz;
|
||||
}
|
||||
blendingWeight /= dot(blendingWeight, vec2(1.0, 1.0));
|
||||
|
||||
// Calculate the texture coordinates.
|
||||
vec4 bc = blendingOffset * vec4(u_framebufferMetrics.xy, -u_framebufferMetrics.xy);
|
||||
bc += v_colorTexCoords.xyxy;
|
||||
|
||||
// We exploit bilinear filtering to mix current pixel with the chosen neighbor.
|
||||
vec4 color = blendingWeight.x * SMAASampleLevelZero(u_colorTex, bc.xy);
|
||||
color += blendingWeight.y * SMAASampleLevelZero(u_colorTex, bc.zw);
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
// Implementation of Subpixel Morphological Antialiasing (SMAA) is based on https://github.com/iryoku/smaa
|
||||
layout (location = 0) in vec2 a_pos;
|
||||
layout (location = 1) in vec2 a_tcoord;
|
||||
|
||||
in vec2 a_pos;
|
||||
in vec2 a_tcoord;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
layout (location = 1) out vec4 v_offset;
|
||||
|
||||
uniform vec4 u_framebufferMetrics;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
out vec4 v_offset;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
vec4 u_framebufferMetrics;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,13 +1,23 @@
|
|||
uniform float u_opacity;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
uniform sampler2D u_colorTex;
|
||||
in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in vec2 v_colorTexCoords;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -19,4 +29,3 @@ void main()
|
|||
finalColor.a *= u_opacity;
|
||||
v_FragColor = finalColor;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,17 +1,26 @@
|
|||
#ifdef ENABLE_VTF
|
||||
in LOW_P vec4 v_color;
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
in vec2 v_colorTexCoord;
|
||||
uniform sampler2D u_colorTex;
|
||||
layout (location = 1) in vec2 v_colorTexCoord;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
layout (location = 2) in vec2 v_maskTexCoord;
|
||||
|
||||
in vec2 v_maskTexCoord;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
uniform sampler2D u_maskTex;
|
||||
uniform float u_opacity;
|
||||
uniform vec2 u_contrastGamma;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 2) uniform sampler2D u_maskTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,27 +1,36 @@
|
|||
in vec2 a_colorTexCoord;
|
||||
in vec2 a_maskTexCoord;
|
||||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) in vec2 a_colorTexCoord;
|
||||
layout (location = 1) in vec2 a_maskTexCoord;
|
||||
layout (location = 2) in vec4 a_position;
|
||||
layout (location = 3) in vec2 a_normal;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
layout (location = 2) out vec2 v_maskTexCoord;
|
||||
|
||||
out vec2 v_maskTexCoord;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 pos = vec4(a_position.xyz, 1) * u_modelView;
|
||||
vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos;
|
||||
gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0);
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, a_colorTexCoord);
|
||||
#else
|
||||
|
|
|
@ -1,22 +1,28 @@
|
|||
in vec2 a_colorTexCoord;
|
||||
in vec2 a_maskTexCoord;
|
||||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_isOutlinePass;
|
||||
uniform float u_zScale;
|
||||
layout (location = 0) in vec2 a_colorTexCoord;
|
||||
layout (location = 1) in vec2 a_maskTexCoord;
|
||||
layout (location = 2) in vec4 a_position;
|
||||
layout (location = 3) in vec2 a_normal;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
layout (location = 2) out vec2 v_maskTexCoord;
|
||||
|
||||
out vec2 v_maskTexCoord;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,22 +1,31 @@
|
|||
in vec2 a_colorTexCoord;
|
||||
in vec2 a_outlineColorTexCoord;
|
||||
in vec2 a_maskTexCoord;
|
||||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_isOutlinePass;
|
||||
layout (location = 0) in vec2 a_colorTexCoord;
|
||||
layout (location = 1) in vec2 a_outlineColorTexCoord;
|
||||
layout (location = 2) in vec2 a_maskTexCoord;
|
||||
layout (location = 3) in vec4 a_position;
|
||||
layout (location = 4) in vec2 a_normal;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
layout (location = 2) out vec2 v_maskTexCoord;
|
||||
|
||||
out vec2 v_maskTexCoord;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
const float BaseDepthShift = -10.0;
|
||||
|
||||
|
@ -25,7 +34,6 @@ void main()
|
|||
float isOutline = step(0.5, u_isOutlinePass);
|
||||
float notOutline = 1.0 - isOutline;
|
||||
float depthShift = BaseDepthShift * isOutline;
|
||||
|
||||
vec4 pos = (vec4(a_position.xyz, 1) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView;
|
||||
vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos;
|
||||
gl_Position = applyPivotTransform(shiftedPos * u_projection, u_pivotTransform, 0.0);
|
||||
|
|
|
@ -1,23 +1,29 @@
|
|||
in vec2 a_colorTexCoord;
|
||||
in vec2 a_outlineColorTexCoord;
|
||||
in vec2 a_maskTexCoord;
|
||||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_isOutlinePass;
|
||||
uniform float u_zScale;
|
||||
layout (location = 0) in vec2 a_colorTexCoord;
|
||||
layout (location = 1) in vec2 a_outlineColorTexCoord;
|
||||
layout (location = 2) in vec2 a_maskTexCoord;
|
||||
layout (location = 3) in vec4 a_position;
|
||||
layout (location = 4) in vec2 a_normal;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
layout (location = 2) out vec2 v_maskTexCoord;
|
||||
|
||||
out vec2 v_maskTexCoord;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
const float kBaseDepthShift = -10.0;
|
||||
|
||||
|
@ -25,12 +31,10 @@ void main()
|
|||
{
|
||||
float isOutline = step(0.5, u_isOutlinePass);
|
||||
float depthShift = kBaseDepthShift * isOutline;
|
||||
|
||||
vec4 pivot = (vec4(a_position.xyz, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView;
|
||||
vec4 offset = vec4(a_normal, 0.0, 0.0) * u_projection;
|
||||
gl_Position = applyBillboardPivotTransform(pivot * u_projection, u_pivotTransform,
|
||||
a_position.w * u_zScale, offset.xy);
|
||||
|
||||
vec2 colorTexCoord = mix(a_colorTexCoord, a_outlineColorTexCoord, isOutline);
|
||||
#ifdef ENABLE_VTF
|
||||
v_color = texture(u_colorTex, colorTexCoord);
|
||||
|
|
35
shaders/GL/text_outlined_gui.fsh.glsl
Normal file
35
shaders/GL/text_outlined_gui.fsh.glsl
Normal file
|
@ -0,0 +1,35 @@
|
|||
#ifdef ENABLE_VTF
|
||||
layout (location = 0) in LOW_P vec4 v_color;
|
||||
#else
|
||||
layout (location = 1) in vec2 v_colorTexCoord;
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
layout (location = 2) in vec2 v_maskTexCoord;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
vec2 u_contrastGamma;
|
||||
vec2 u_position;
|
||||
float u_isOutlinePass;
|
||||
float u_opacity;
|
||||
float u_length;
|
||||
};
|
||||
|
||||
layout (binding = 2) uniform sampler2D u_maskTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
#ifdef ENABLE_VTF
|
||||
LOW_P vec4 glyphColor = v_color;
|
||||
#else
|
||||
LOW_P vec4 glyphColor = texture(u_colorTex, v_colorTexCoord);
|
||||
#endif
|
||||
float dist = texture(u_maskTex, v_maskTexCoord).r;
|
||||
float alpha = smoothstep(u_contrastGamma.x - u_contrastGamma.y, u_contrastGamma.x + u_contrastGamma.y, dist) * u_opacity;
|
||||
glyphColor.a *= alpha;
|
||||
v_FragColor = glyphColor;
|
||||
}
|
|
@ -1,21 +1,30 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_colorTexCoord;
|
||||
in vec2 a_outlineColorTexCoord;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_maskTexCoord;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform float u_isOutlinePass;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_colorTexCoord;
|
||||
layout (location = 2) in vec2 a_outlineColorTexCoord;
|
||||
layout (location = 3) in vec2 a_normal;
|
||||
layout (location = 4) in vec2 a_maskTexCoord;
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
uniform sampler2D u_colorTex;
|
||||
out LOW_P vec4 v_color;
|
||||
layout (location = 0) out LOW_P vec4 v_color;
|
||||
#else
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_colorTexCoord;
|
||||
#endif
|
||||
layout (location = 2) out vec2 v_maskTexCoord;
|
||||
|
||||
out vec2 v_maskTexCoord;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
vec2 u_contrastGamma;
|
||||
vec2 u_position;
|
||||
float u_isOutlinePass;
|
||||
float u_opacity;
|
||||
float u_length;
|
||||
};
|
||||
|
||||
#ifdef ENABLE_VTF
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
#endif
|
||||
|
||||
const float kBaseDepthShift = -10.0;
|
||||
|
||||
|
@ -23,7 +32,6 @@ void main()
|
|||
{
|
||||
float isOutline = step(0.5, u_isOutlinePass);
|
||||
float depthShift = kBaseDepthShift * isOutline;
|
||||
|
||||
vec4 pos = (vec4(a_position, 1.0) + vec4(0.0, 0.0, depthShift, 0.0)) * u_modelView;
|
||||
vec4 shiftedPos = vec4(a_normal, 0.0, 0.0) + pos;
|
||||
gl_Position = shiftedPos * u_projection;
|
||||
|
|
|
@ -1,9 +1,20 @@
|
|||
uniform sampler2D u_colorTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
|
||||
in vec2 v_colorTexCoords;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,12 +1,20 @@
|
|||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,10 +1,21 @@
|
|||
uniform sampler2D u_colorTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
layout (location = 1) in float v_intensity;
|
||||
|
||||
in vec2 v_colorTexCoords;
|
||||
in float v_intensity;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,13 +1,20 @@
|
|||
in vec4 a_position;
|
||||
in vec2 a_normal;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec2 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_zScale;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
23
shaders/GL/texturing_gui.fsh.glsl
Normal file
23
shaders/GL/texturing_gui.fsh.glsl
Normal file
|
@ -0,0 +1,23 @@
|
|||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
vec2 u_contrastGamma;
|
||||
vec2 u_position;
|
||||
float u_isOutlinePass;
|
||||
float u_opacity;
|
||||
float u_length;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 finalColor = texture(u_colorTex, v_colorTexCoords);
|
||||
finalColor.a *= u_opacity;
|
||||
v_FragColor = finalColor;
|
||||
}
|
|
@ -1,10 +1,18 @@
|
|||
in vec2 a_position;
|
||||
in vec2 a_colorTexCoords;
|
||||
layout (location = 0) in vec2 a_position;
|
||||
layout (location = 1) in vec2 a_colorTexCoords;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
layout (location = 0) out vec2 v_colorTexCoords;
|
||||
|
||||
out vec2 v_colorTexCoords;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
vec2 u_contrastGamma;
|
||||
vec2 u_position;
|
||||
float u_isOutlinePass;
|
||||
float u_opacity;
|
||||
float u_length;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
25
shaders/GL/texturing_position.fsh.glsl
Normal file
25
shaders/GL/texturing_position.fsh.glsl
Normal file
|
@ -0,0 +1,25 @@
|
|||
layout (location = 0) in vec2 v_colorTexCoords;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_position;
|
||||
vec2 u_lineParams;
|
||||
float u_accuracy;
|
||||
float u_zScale;
|
||||
float u_opacity;
|
||||
float u_azimut;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 finalColor = texture(u_colorTex, v_colorTexCoords);
|
||||
finalColor.a *= u_opacity;
|
||||
v_FragColor = finalColor;
|
||||
}
|
|
@ -1,36 +1,41 @@
|
|||
in vec2 v_colorTexCoord;
|
||||
in vec2 v_maskTexCoord;
|
||||
in float v_halfLength;
|
||||
layout (location = 0) in vec2 v_colorTexCoord;
|
||||
layout (location = 1) in vec2 v_maskTexCoord;
|
||||
layout (location = 2) in float v_halfLength;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform sampler2D u_maskTex;
|
||||
uniform float u_opacity;
|
||||
uniform float u_outline;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
uniform vec3 u_lightArrowColor;
|
||||
uniform vec3 u_darkArrowColor;
|
||||
uniform vec3 u_outlineColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_trafficParams;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_lightArrowColor;
|
||||
vec4 u_darkArrowColor;
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
layout (binding = 2) uniform sampler2D u_maskTex;
|
||||
|
||||
const float kAntialiasingThreshold = 0.92;
|
||||
|
||||
const float kOutlineThreshold1 = 0.8;
|
||||
const float kOutlineThreshold2 = 0.5;
|
||||
|
||||
const float kMaskOpacity = 0.7;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture(u_colorTex, v_colorTexCoord);
|
||||
float alphaCode = color.a;
|
||||
vec4 mask = texture(u_maskTex, v_maskTexCoord);
|
||||
color.a = u_opacity * (1.0 - smoothstep(kAntialiasingThreshold, 1.0, abs(v_halfLength)));
|
||||
color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor, u_darkArrowColor, step(alphaCode, 0.6)), mask.a * kMaskOpacity);
|
||||
color.rgb = mix(color.rgb, mask.rgb * mix(u_lightArrowColor.rgb, u_darkArrowColor.rgb, step(alphaCode, 0.6)), mask.a * kMaskOpacity);
|
||||
if (u_outline > 0.0)
|
||||
{
|
||||
color.rgb = mix(color.rgb, u_outlineColor, step(kOutlineThreshold1, abs(v_halfLength)));
|
||||
color.rgb = mix(color.rgb, u_outlineColor, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength)));
|
||||
color.rgb = mix(color.rgb, u_outlineColor.rgb, step(kOutlineThreshold1, abs(v_halfLength)));
|
||||
color.rgb = mix(color.rgb, u_outlineColor.rgb, smoothstep(kOutlineThreshold2, kOutlineThreshold1, abs(v_halfLength)));
|
||||
}
|
||||
v_FragColor = color;
|
||||
}
|
||||
|
|
|
@ -1,16 +1,23 @@
|
|||
in vec3 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec4 a_colorTexCoord;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec4 a_colorTexCoord;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec2 v_maskTexCoord;
|
||||
layout (location = 2) out float v_halfLength;
|
||||
|
||||
uniform vec4 u_trafficParams;
|
||||
|
||||
out vec2 v_colorTexCoord;
|
||||
out vec2 v_maskTexCoord;
|
||||
out float v_halfLength;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_trafficParams;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_lightArrowColor;
|
||||
vec4 u_darkArrowColor;
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
const float kArrowVSize = 0.25;
|
||||
|
||||
|
@ -26,7 +33,6 @@ void main()
|
|||
transformedAxisPos = calcLineTransformedAxisPos(transformedAxisPos, a_position.xy + norm,
|
||||
u_modelView, length(norm));
|
||||
}
|
||||
|
||||
float uOffset = length(vec4(kShapeCoordScalar, 0, 0, 0) * u_modelView) * a_normal.w;
|
||||
v_colorTexCoord = a_colorTexCoord.xy;
|
||||
float v = mix(a_colorTexCoord.z, a_colorTexCoord.z + kArrowVSize, 0.5 * a_normal.z + 0.5);
|
||||
|
|
|
@ -1,17 +1,28 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
in vec2 v_colorTexCoord;
|
||||
in vec3 v_radius;
|
||||
layout (location = 0) in vec2 v_colorTexCoord;
|
||||
layout (location = 1) in vec3 v_radius;
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_trafficParams;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_lightArrowColor;
|
||||
vec4 u_darkArrowColor;
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
const float kAntialiasingThreshold = 0.92;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture(u_colorTex, v_colorTexCoord);
|
||||
|
|
|
@ -1,16 +1,22 @@
|
|||
in vec4 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec2 a_colorTexCoord;
|
||||
layout (location = 0) in vec4 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec2 a_colorTexCoord;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoord;
|
||||
layout (location = 1) out vec3 v_radius;
|
||||
|
||||
uniform vec3 u_lightArrowColor; // Here we store left sizes by road classes.
|
||||
uniform vec3 u_darkArrowColor; // Here we store right sizes by road classes.
|
||||
|
||||
out vec2 v_colorTexCoord;
|
||||
out vec3 v_radius;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_trafficParams;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_lightArrowColor;
|
||||
vec4 u_darkArrowColor;
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -28,7 +34,6 @@ void main()
|
|||
}
|
||||
// radius = (leftSize + rightSize) / 2
|
||||
v_radius = vec3(a_normal.zw, 1.0) * 0.5 * (leftSize + rightSize);
|
||||
|
||||
vec2 finalPos = transformedAxisPos + v_radius.xy;
|
||||
v_colorTexCoord = a_colorTexCoord;
|
||||
vec4 pos = vec4(finalPos, a_position.z, 1.0) * u_projection;
|
||||
|
|
|
@ -1,9 +1,21 @@
|
|||
uniform sampler2D u_colorTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) in vec2 v_colorTexCoord;
|
||||
|
||||
in vec2 v_colorTexCoord;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_trafficParams;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_lightArrowColor;
|
||||
vec4 u_darkArrowColor;
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,11 +1,20 @@
|
|||
in vec3 a_position;
|
||||
in vec2 a_colorTexCoord;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec2 a_colorTexCoord;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec2 v_colorTexCoord;
|
||||
|
||||
out vec2 v_colorTexCoord;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_trafficParams;
|
||||
vec4 u_outlineColor;
|
||||
vec4 u_lightArrowColor;
|
||||
vec4 u_darkArrowColor;
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
in vec4 v_color;
|
||||
layout (location = 0) in vec4 v_color;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,14 +1,18 @@
|
|||
in vec3 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec4 v_color;
|
||||
|
||||
uniform float u_lineHalfWidth;
|
||||
|
||||
out vec4 v_color;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_params;
|
||||
float u_lineHalfWidth;
|
||||
float u_maxRadius;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,18 +1,16 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
in vec3 v_radius;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) in vec3 v_radius;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
const float aaPixelsCount = 2.5;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 finalColor = v_color;
|
||||
|
||||
float smallRadius = v_radius.z - aaPixelsCount;
|
||||
float stepValue = smoothstep(smallRadius * smallRadius, v_radius.z * v_radius.z,
|
||||
dot(v_radius.xy, v_radius.xy));
|
||||
|
|
|
@ -1,16 +1,19 @@
|
|||
in vec3 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec3 v_radius;
|
||||
layout (location = 1) out vec4 v_color;
|
||||
|
||||
uniform float u_lineHalfWidth;
|
||||
uniform float u_maxRadius;
|
||||
|
||||
out vec3 v_radius;
|
||||
out vec4 v_color;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_params;
|
||||
float u_lineHalfWidth;
|
||||
float u_maxRadius;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
in vec4 v_offsets;
|
||||
in vec4 v_color;
|
||||
layout (location = 0) in vec4 v_offsets;
|
||||
layout (location = 1) in vec4 v_color;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
@ -9,11 +9,9 @@ void main()
|
|||
vec2 radius;
|
||||
radius.x = max(0.0, abs(v_offsets.x) - v_offsets.z);
|
||||
radius.y = max(0.0, abs(v_offsets.y) - v_offsets.w);
|
||||
|
||||
float maxRadius = 1.0;
|
||||
float aaRadius = 0.9;
|
||||
float stepValue = smoothstep(aaRadius * aaRadius, maxRadius * maxRadius, dot(radius.xy, radius.xy));
|
||||
finalColor.a = finalColor.a * (1.0 - stepValue);
|
||||
|
||||
v_FragColor = finalColor;
|
||||
}
|
||||
|
|
|
@ -1,15 +1,19 @@
|
|||
in vec3 a_position;
|
||||
in vec4 a_normal;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec4 a_normal;
|
||||
layout (location = 2) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
layout (location = 0) out vec4 v_offsets;
|
||||
layout (location = 1) out vec4 v_color;
|
||||
|
||||
uniform vec3 u_params;
|
||||
|
||||
out vec4 v_offsets;
|
||||
out vec4 v_color;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec4 u_params;
|
||||
float u_lineHalfWidth;
|
||||
float u_maxRadius;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,14 +1,24 @@
|
|||
// Warning! Beware to use this shader. "discard" command may significally reduce performance.
|
||||
// Unfortunately some CG algorithms cannot be implemented on OpenGL ES 2.0 without discarding
|
||||
// fragments from depth buffer.
|
||||
// Unfortunately some CG algorithms cannot be implemented without discarding fragments from depth buffer.
|
||||
|
||||
uniform sampler2D u_colorTex;
|
||||
uniform float u_opacity;
|
||||
layout (location = 0) in vec4 v_texCoords;
|
||||
layout (location = 1) in vec4 v_maskColor;
|
||||
|
||||
in vec4 v_texCoords;
|
||||
in vec4 v_maskColor;
|
||||
layout (location = 0) out vec4 v_FragColor;
|
||||
|
||||
out vec4 v_FragColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
layout (binding = 1) uniform sampler2D u_colorTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
|
@ -1,22 +1,28 @@
|
|||
in vec3 a_position;
|
||||
in vec3 a_normalAndAnimateOrZ;
|
||||
in vec4 a_texCoords;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec3 a_normalAndAnimateOrZ;
|
||||
layout (location = 2) in vec4 a_texCoords;
|
||||
layout (location = 3) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_interpolation;
|
||||
layout (location = 0) out vec4 v_texCoords;
|
||||
layout (location = 1) out vec4 v_maskColor;
|
||||
|
||||
out vec4 v_texCoords;
|
||||
out vec4 v_maskColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 normal = a_normalAndAnimateOrZ.xy;
|
||||
if (a_normalAndAnimateOrZ.z > 0.0)
|
||||
normal = u_interpolation * normal;
|
||||
|
||||
vec4 p = vec4(a_position, 1.0) * u_modelView;
|
||||
vec4 pos = vec4(normal, 0.0, 0.0) + p;
|
||||
vec4 projectedPivot = p * u_projection;
|
||||
|
|
|
@ -1,22 +1,28 @@
|
|||
in vec3 a_position;
|
||||
in vec3 a_normalAndAnimateOrZ;
|
||||
in vec4 a_texCoords;
|
||||
in vec4 a_color;
|
||||
layout (location = 0) in vec3 a_position;
|
||||
layout (location = 1) in vec3 a_normalAndAnimateOrZ;
|
||||
layout (location = 2) in vec4 a_texCoords;
|
||||
layout (location = 3) in vec4 a_color;
|
||||
|
||||
uniform mat4 u_modelView;
|
||||
uniform mat4 u_projection;
|
||||
uniform mat4 u_pivotTransform;
|
||||
uniform float u_interpolation;
|
||||
layout (location = 0) out vec4 v_texCoords;
|
||||
layout (location = 1) out vec4 v_maskColor;
|
||||
|
||||
out vec4 v_texCoords;
|
||||
out vec4 v_maskColor;
|
||||
layout (binding = 0) uniform UBO
|
||||
{
|
||||
mat4 u_modelView;
|
||||
mat4 u_projection;
|
||||
mat4 u_pivotTransform;
|
||||
vec2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
};
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 normal = a_normalAndAnimateOrZ.xy;
|
||||
if (a_normalAndAnimateOrZ.z > 0.0)
|
||||
normal = u_interpolation * normal;
|
||||
|
||||
vec4 pivot = vec4(a_position, 1.0) * u_modelView;
|
||||
vec4 offset = vec4(normal, 0.0, 0.0) * u_projection;
|
||||
vec4 projectedPivot = pivot * u_projection;
|
||||
|
|
|
@ -8,11 +8,11 @@ typedef struct
|
|||
float4x4 u_modelView;
|
||||
float4x4 u_projection;
|
||||
float4x4 u_pivotTransform;
|
||||
packed_float2 u_contrastGamma;
|
||||
float u_opacity;
|
||||
float u_zScale;
|
||||
float u_interpolation;
|
||||
float u_isOutlinePass;
|
||||
packed_float2 u_contrastGamma;
|
||||
} Uniforms_T;
|
||||
|
||||
// Area/AreaOutline
|
||||
|
|
|
@ -12,13 +12,13 @@ typedef struct
|
|||
float4 u_color;
|
||||
float4 u_maskColor;
|
||||
float4 u_outlineColor;
|
||||
float4 u_fakeColor;
|
||||
float4 u_fakeOutlineColor;
|
||||
packed_float2 u_fakeBorders;
|
||||
packed_float2 u_pattern;
|
||||
packed_float2 u_angleCosSin;
|
||||
float u_arrowHalfWidth;
|
||||
float u_opacity;
|
||||
packed_float2 u_fakeBorders;
|
||||
float4 u_fakeColor;
|
||||
float4 u_fakeOutlineColor;
|
||||
} Uniforms_T;
|
||||
|
||||
// Route/RouteDash
|
||||
|
|
|
@ -10,8 +10,9 @@ typedef struct
|
|||
float4x4 u_projection;
|
||||
float4x4 u_pivotTransform;
|
||||
packed_float3 u_position;
|
||||
float u_accuracy;
|
||||
float u_dummy1;
|
||||
packed_float2 u_lineParams;
|
||||
float u_accuracy;
|
||||
float u_zScale;
|
||||
float u_opacity;
|
||||
float u_azimut;
|
||||
|
|
|
@ -10,10 +10,13 @@ typedef struct
|
|||
float4x4 u_pivotTransform;
|
||||
float4 u_trafficParams;
|
||||
packed_float3 u_outlineColor;
|
||||
float u_outline;
|
||||
float u_dummy1; // alignment
|
||||
packed_float3 u_lightArrowColor;
|
||||
float u_opacity;
|
||||
float u_dummy2; // alignment
|
||||
packed_float3 u_darkArrowColor;
|
||||
float u_dummy3; // alignment
|
||||
float u_outline;
|
||||
float u_opacity;
|
||||
} Uniforms_T;
|
||||
|
||||
// Traffic
|
||||
|
|
|
@ -9,6 +9,7 @@ typedef struct
|
|||
float4x4 u_projection;
|
||||
float4x4 u_pivotTransform;
|
||||
packed_float3 u_params;
|
||||
float u_dummy1;
|
||||
float u_lineHalfWidth;
|
||||
float u_maxRadius;
|
||||
} Uniforms_T;
|
||||
|
|
|
@ -46,12 +46,12 @@ template <typename ParamType> class GLTypeWrapper;
|
|||
|
||||
BIND_GL_TYPE(float, gl_const::GLFloatType)
|
||||
BIND_GL_TYPE(glsl::vec2, gl_const::GLFloatVec2)
|
||||
BIND_GL_TYPE(glsl::vec3, gl_const::GLFloatVec3)
|
||||
BIND_GL_TYPE(glsl::vec3, gl_const::GLFloatVec4)
|
||||
BIND_GL_TYPE(glsl::vec4, gl_const::GLFloatVec4)
|
||||
BIND_GL_TYPE(glsl::mat4, gl_const::GLFloatMat4)
|
||||
BIND_GL_TYPE(int, gl_const::GLIntType)
|
||||
BIND_GL_TYPE(glsl::ivec2, gl_const::GLIntVec2)
|
||||
BIND_GL_TYPE(glsl::ivec3, gl_const::GLIntVec3)
|
||||
BIND_GL_TYPE(glsl::ivec3, gl_const::GLIntVec4)
|
||||
BIND_GL_TYPE(glsl::ivec4, gl_const::GLIntVec4)
|
||||
|
||||
class Parameter
|
||||
|
|
|
@ -11,6 +11,9 @@ HIGHP_SEARCH = "highp"
|
|||
VERTEX_SHADER_EXT = ".vsh.glsl"
|
||||
FRAG_SHADER_EXT = ".fsh.glsl"
|
||||
|
||||
UBO_KEY = "UBO"
|
||||
UNIFORMS_KEY = "Uniforms"
|
||||
|
||||
SHADERS_LIB_COMMON_PATTERN = "// Common"
|
||||
SHADERS_LIB_VS_PATTERN = "// VS"
|
||||
SHADERS_LIB_FS_PATTERN = "// FS"
|
||||
|
@ -125,7 +128,7 @@ def write_definition_file(defines_file, generation_dir):
|
|||
output_file.write("{\n")
|
||||
output_file.write("extern char const * GL3_SHADER_VERSION;\n")
|
||||
output_file.write("extern char const * GLES3_SHADER_VERSION;\n\n")
|
||||
output_file.write("extern GLProgramInfo GetProgramInfo(dp::ApiVersion apiVersion, Program program);\n")
|
||||
output_file.write("extern GLProgramInfo const & GetProgramInfo(dp::ApiVersion apiVersion, Program program);\n")
|
||||
output_file.write("} // namespace gpu\n")
|
||||
|
||||
if not os.path.isfile(defines_file) or not filecmp.cmp(defines_file, defines_file_tmp, False):
|
||||
|
@ -162,57 +165,143 @@ def get_shaders_lib_content(shader_file, shaders_library):
|
|||
return lib_content
|
||||
|
||||
|
||||
def write_shader_line(output_file, line):
|
||||
def write_shader_line(output_file, line, shader_file, binding_info):
|
||||
if line.lstrip().startswith("//") or line == '\n' or len(line) == 0:
|
||||
return
|
||||
return False
|
||||
|
||||
if line.find(LOWP_SEARCH) >= 0:
|
||||
print("Incorrect shader. Do not use lowp in shader, use LOW_P instead.")
|
||||
print(f"Incorrect shader {shader_file}. Do not use lowp in shader, use LOW_P instead.")
|
||||
exit(2)
|
||||
if line.find(MEDIUMP_SEARCH) >= 0:
|
||||
print("Incorrect shader. Do not use mediump in shader, use MEDIUM_P instead.")
|
||||
print(f"Incorrect shader {shader_file}. Do not use mediump in shader, use MEDIUM_P instead.")
|
||||
exit(2)
|
||||
if line.find(HIGHP_SEARCH) >= 0:
|
||||
print("Incorrect shader. Do not use highp in shader, use HIGH_P instead.")
|
||||
print(f"Incorrect shader {shader_file}. Do not use highp in shader, use HIGH_P instead.")
|
||||
exit(2)
|
||||
|
||||
output_line = line.rstrip()
|
||||
output_file.write(" %s \\n\\\n" % output_line)
|
||||
|
||||
# Extract and remove layout binding
|
||||
binding_match = re.search(r"layout\s*\(\s*binding\s*=\s*(\d+)\s*\)", output_line)
|
||||
if binding_match:
|
||||
binding_index = int(binding_match.group(1))
|
||||
# Remove the matched layout part from the string
|
||||
output_line = re.sub(r"layout\s*\(\s*binding\s*=\s*\d+\s*\)\s*", "", output_line)
|
||||
else:
|
||||
binding_index = None
|
||||
|
||||
# Extract sampler name
|
||||
sampler_match = re.search(r"sampler2D\s+(\w+)", output_line)
|
||||
sampler_name = sampler_match.group(1) if sampler_match else None
|
||||
|
||||
if binding_index is None and sampler_name is not None:
|
||||
print(f"Incorrect shader {shader_file}. Sampler must have binding index")
|
||||
exit(2)
|
||||
|
||||
ubo_started = False
|
||||
if line.find("uniform UBO") >= 0:
|
||||
if binding_index is not None:
|
||||
binding_info[shader_file].append({UBO_KEY: binding_index})
|
||||
ubo_started = True
|
||||
else:
|
||||
print(f"Incorrect shader {shader_file}. Uniform block must have binding index")
|
||||
exit(2)
|
||||
|
||||
if binding_index and sampler_name:
|
||||
binding_info[shader_file].append({sampler_name: binding_index})
|
||||
|
||||
if not ubo_started:
|
||||
output_file.write(" %s \\n\\\n" % output_line)
|
||||
|
||||
return ubo_started
|
||||
|
||||
|
||||
def write_shader_body(output_file, shader_file, shader_dir, shaders_library):
|
||||
def find_by_name_in_list(lst, name):
|
||||
return next((item[name] for item in lst if name in item), None)
|
||||
|
||||
|
||||
def write_uniform_shader_line(output_file, line, shader_file, binding_info):
|
||||
if line.lstrip().startswith("//") or line == '\n' or len(line) == 0:
|
||||
return False
|
||||
output_line = line.lstrip().rstrip()
|
||||
if output_line.find("};") >= 0:
|
||||
return True
|
||||
if output_line.find("{") >= 0:
|
||||
return False
|
||||
if output_line.find(",") >= 0 or output_line.count("u_") > 1:
|
||||
print(f"Incorrect shader {shader_file}. Only one uniform per line")
|
||||
exit(2)
|
||||
|
||||
find_by_name_in_list(binding_info[shader_file], UNIFORMS_KEY).append(output_line)
|
||||
|
||||
output_file.write(" uniform %s \\n\\\n" % output_line)
|
||||
return False
|
||||
|
||||
|
||||
def write_shader_body(output_file, shader_file, shader_dir, shaders_library, binding_info):
|
||||
lib_content = get_shaders_lib_content(shader_file, shaders_library)
|
||||
ubo_started = False
|
||||
for line in open(os.path.join(shader_dir, shader_file)):
|
||||
if ubo_started:
|
||||
if write_uniform_shader_line(output_file, line, shader_file, binding_info):
|
||||
ubo_started = False
|
||||
continue
|
||||
if line.lstrip().startswith("void main"):
|
||||
for lib_line in lib_content.splitlines():
|
||||
write_shader_line(output_file, lib_line)
|
||||
write_shader_line(output_file, line)
|
||||
write_shader_line(output_file, lib_line, shader_file, binding_info)
|
||||
ubo_started = write_shader_line(output_file, line, shader_file, binding_info)
|
||||
if ubo_started:
|
||||
binding_info[shader_file].append({UNIFORMS_KEY: []})
|
||||
|
||||
output_file.write("\";\n\n")
|
||||
|
||||
|
||||
def write_shader(output_file, shader_file, shader_dir, shaders_library):
|
||||
def write_shader(output_file, shader_file, shader_dir, shaders_library, binding_info):
|
||||
output_file.write("char const %s[] = \" \\\n" % format_shader_source_name(shader_file))
|
||||
write_shader_gles_header(output_file)
|
||||
write_shader_body(output_file, shader_file, shader_dir, shaders_library)
|
||||
write_shader_body(output_file, shader_file, shader_dir, shaders_library, binding_info)
|
||||
|
||||
|
||||
def write_gpu_programs_map(file, programs_def):
|
||||
def write_gpu_programs_map(file, programs_def, binding_info):
|
||||
for program in programs_def.keys():
|
||||
vertex_shader = programs_def[program][0]
|
||||
vertex_source_name = format_shader_source_name(vertex_shader)
|
||||
|
||||
fragment_shader = programs_def[program][1]
|
||||
fragment_source_name = format_shader_source_name(fragment_shader)
|
||||
|
||||
check_bindings(vertex_shader, fragment_shader, binding_info[vertex_shader], binding_info[fragment_shader])
|
||||
|
||||
file.write(" GLProgramInfo(\"%s\", \"%s\", %s, %s),\n" % (
|
||||
vertex_source_name, fragment_source_name, vertex_source_name, fragment_source_name))
|
||||
|
||||
|
||||
def check_bindings(vs, fs, vs_bindings, fs_bindings):
|
||||
dict1 = {k: v for d in vs_bindings for k, v in d.items()}
|
||||
dict2 = {k: v for d in fs_bindings for k, v in d.items()}
|
||||
if UBO_KEY in dict1 and UBO_KEY in dict2:
|
||||
if dict1[UBO_KEY] != dict2[UBO_KEY]:
|
||||
print(f"Shaders {vs} and {fs} must use the same binding indexes for the UBO. VS:{dict1[UBO_KEY]}, FS:{dict2[UBO_KEY]}")
|
||||
exit(2)
|
||||
if UNIFORMS_KEY in dict1 and UNIFORMS_KEY in dict2:
|
||||
if dict1[UNIFORMS_KEY] != dict2[UNIFORMS_KEY]:
|
||||
print(f"Shaders {vs} and {fs} must use the same unforms inside the UBO. VS:{dict1[UNIFORMS_KEY]}, FS:{dict2[UNIFORMS_KEY]}")
|
||||
exit(2)
|
||||
common_keys = dict1.keys() & dict2.keys()
|
||||
for key in common_keys:
|
||||
if key == UBO_KEY or key == UNIFORMS_KEY:
|
||||
continue
|
||||
if dict1[key] != dict2[key]:
|
||||
print(f"Shaders {vs} and {fs} must use the same binding indexes for textures. VS:{dict1[key]}, FS:{dict2[key]}")
|
||||
exit(2)
|
||||
|
||||
|
||||
def write_implementation_file(programs_def, shader_index, shader_dir, impl_file, def_file, generation_dir,
|
||||
shaders_library):
|
||||
impl_file = os.path.join(generation_dir, impl_file)
|
||||
# Write to temporary file first, and then compare if its content has changed to avoid unnecessary code rebuilds.
|
||||
impl_file_tmp = impl_file + ".tmp"
|
||||
binding_info = dict()
|
||||
with open(impl_file_tmp, 'w') as file:
|
||||
file.write("#include \"shaders/%s\"\n\n" % (def_file))
|
||||
file.write("#include \"base/assert.hpp\"\n\n")
|
||||
|
@ -221,22 +310,23 @@ def write_implementation_file(programs_def, shader_index, shader_dir, impl_file,
|
|||
|
||||
file.write("namespace gpu\n")
|
||||
file.write("{\n")
|
||||
file.write("char const * GL3_SHADER_VERSION = \"#version 150 core \\n\";\n")
|
||||
file.write("char const * GL3_SHADER_VERSION = \"#version 410 core \\n\";\n")
|
||||
file.write("char const * GLES3_SHADER_VERSION = \"#version 300 es \\n\";\n\n")
|
||||
|
||||
for shader in shader_index.keys():
|
||||
write_shader(file, shader, shader_dir, shaders_library)
|
||||
binding_info[shader] = []
|
||||
write_shader(file, shader, shader_dir, shaders_library, binding_info)
|
||||
|
||||
file.write("GLProgramInfo GetProgramInfo(dp::ApiVersion apiVersion, Program program)\n")
|
||||
file.write("GLProgramInfo const & GetProgramInfo(dp::ApiVersion apiVersion, Program program)\n")
|
||||
file.write("{\n")
|
||||
file.write(" CHECK_EQUAL(apiVersion, dp::ApiVersion::OpenGLES3, ());\n")
|
||||
file.write(" static std::array<GLProgramInfo, static_cast<size_t>(Program::ProgramsCount)> gpuIndex = {{\n")
|
||||
write_gpu_programs_map(file, programs_def)
|
||||
write_gpu_programs_map(file, programs_def, binding_info)
|
||||
file.write(" }};\n")
|
||||
file.write(" return gpuIndex[static_cast<size_t>(program)];\n")
|
||||
file.write("}\n")
|
||||
file.write("} // namespace gpu\n")
|
||||
|
||||
|
||||
if not os.path.isfile(impl_file) or not filecmp.cmp(impl_file, impl_file_tmp, False):
|
||||
os.replace(impl_file_tmp, impl_file)
|
||||
print(impl_file + " was replaced")
|
||||
|
@ -260,13 +350,13 @@ if __name__ == '__main__':
|
|||
shaders = [file for file in os.listdir(shader_dir) if
|
||||
os.path.isfile(os.path.join(shader_dir, file)) and (
|
||||
file.endswith(VERTEX_SHADER_EXT) or file.endswith(FRAG_SHADER_EXT))]
|
||||
shaderIndex = generate_shader_indexes(shaders)
|
||||
shader_index = generate_shader_indexes(shaders)
|
||||
|
||||
programs_order = read_programs_file(os.path.join(shader_dir, '..', programs_file_name))
|
||||
programDefinition = read_index_file(os.path.join(shader_dir, index_file_name), programs_order)
|
||||
program_definition = read_index_file(os.path.join(shader_dir, index_file_name), programs_order)
|
||||
|
||||
shaders_library = read_shaders_lib_file(os.path.join(shader_dir, shaders_lib_file))
|
||||
|
||||
write_definition_file(defines_file, generation_dir)
|
||||
write_implementation_file(programDefinition, shaderIndex, shader_dir, impl_file, defines_file, generation_dir,
|
||||
write_implementation_file(program_definition, shader_index, shader_dir, impl_file, defines_file, generation_dir,
|
||||
shaders_library)
|
||||
|
|
|
@ -48,17 +48,22 @@ private:
|
|||
|
||||
#define ALIGNMENT alignas(16)
|
||||
|
||||
// NOTE: structs may contain dummy elements to fit MSL and GLSL struct alignment rules
|
||||
// 1. Add new fields in order from the highest byte size to the lowest, it minimizes alignment overhead
|
||||
// 2. Keep 16 bytes alignment for the whole struct, it complements the size of the latest element to vec4
|
||||
// 3. Consider vec3 as vec4, add float complement and don't reuse it
|
||||
|
||||
struct ALIGNMENT MapProgramParams
|
||||
{
|
||||
glsl::mat4 m_modelView;
|
||||
glsl::mat4 m_projection;
|
||||
glsl::mat4 m_pivotTransform;
|
||||
glsl::vec2 m_contrastGamma;
|
||||
float m_opacity = 1.0f;
|
||||
float m_zScale = 1.0f;
|
||||
float m_interpolation = 1.0f;
|
||||
float m_isOutlinePass = 1.0f;
|
||||
glsl::vec2 m_contrastGamma;
|
||||
|
||||
|
||||
BIND_PROGRAMS(MapProgramParams,
|
||||
Program::Area,
|
||||
Program::Area3d,
|
||||
|
@ -100,14 +105,14 @@ struct ALIGNMENT RouteProgramParams
|
|||
glsl::vec4 m_color;
|
||||
glsl::vec4 m_maskColor;
|
||||
glsl::vec4 m_outlineColor;
|
||||
glsl::vec4 m_fakeColor;
|
||||
glsl::vec4 m_fakeOutlineColor;
|
||||
glsl::vec2 m_fakeBorders;
|
||||
glsl::vec2 m_pattern;
|
||||
glsl::vec2 m_angleCosSin;
|
||||
float m_arrowHalfWidth = 0.0f;
|
||||
float m_opacity = 1.0f;
|
||||
glsl::vec2 m_fakeBorders;
|
||||
glsl::vec4 m_fakeColor;
|
||||
glsl::vec4 m_fakeOutlineColor;
|
||||
|
||||
|
||||
BIND_PROGRAMS(RouteProgramParams,
|
||||
Program::Route,
|
||||
Program::RouteDash,
|
||||
|
@ -122,10 +127,13 @@ struct ALIGNMENT TrafficProgramParams
|
|||
glsl::mat4 m_pivotTransform;
|
||||
glsl::vec4 m_trafficParams;
|
||||
glsl::vec3 m_outlineColor;
|
||||
float m_outline = 0.0f;
|
||||
float m_dummy1; // alignment
|
||||
glsl::vec3 m_lightArrowColor;
|
||||
float m_opacity = 1.0f;
|
||||
float m_dummy2; // alignment
|
||||
glsl::vec3 m_darkArrowColor;
|
||||
float m_dummy3; // alignment
|
||||
float m_outline = 0.0f;
|
||||
float m_opacity = 1.0f;
|
||||
|
||||
BIND_PROGRAMS(TrafficProgramParams,
|
||||
Program::Traffic,
|
||||
|
@ -139,6 +147,7 @@ struct ALIGNMENT TransitProgramParams
|
|||
glsl::mat4 m_projection;
|
||||
glsl::mat4 m_pivotTransform;
|
||||
glsl::vec3 m_params;
|
||||
float m_dummy1; // alignment
|
||||
float m_lineHalfWidth = 0.0f;
|
||||
float m_maxRadius = 0.0f;
|
||||
|
||||
|
@ -171,8 +180,9 @@ struct ALIGNMENT ShapesProgramParams
|
|||
glsl::mat4 m_projection;
|
||||
glsl::mat4 m_pivotTransform;
|
||||
glsl::vec3 m_position;
|
||||
float m_accuracy = 0.0;
|
||||
float m_dummy1; // alignment
|
||||
glsl::vec2 m_lineParams;
|
||||
float m_accuracy = 0.0;
|
||||
float m_zScale = 1.0f;
|
||||
float m_opacity = 1.0f;
|
||||
float m_azimut = 0.0;
|
||||
|
|
|
@ -16,8 +16,6 @@ SHADERS_LIB_COMMON_INDEX = 0
|
|||
SHADERS_LIB_VS_INDEX = 1
|
||||
SHADERS_LIB_FS_INDEX = 2
|
||||
|
||||
IN = 'in'
|
||||
OUT = 'out'
|
||||
UNIFORMS = 'uniforms'
|
||||
SAMPLERS = 'samplers'
|
||||
|
||||
|
@ -25,7 +23,7 @@ debug_output = False
|
|||
|
||||
|
||||
# Read index file which contains program to shaders bindings.
|
||||
def read_index_file(file_path, programs_order):
|
||||
def read_index_file(file_path):
|
||||
gpu_programs = dict()
|
||||
with open(file_path, 'r') as f:
|
||||
index = 0
|
||||
|
@ -35,10 +33,6 @@ def read_index_file(file_path, programs_order):
|
|||
print('Incorrect GPU program definition : ' + line)
|
||||
exit(1)
|
||||
|
||||
if line_parts[0] != programs_order[index]:
|
||||
print('Incorrect GPU program order or name : ' + line)
|
||||
exit(1)
|
||||
|
||||
vertex_shader = next(f for f in line_parts if f.endswith(VERTEX_SHADER_EXT))
|
||||
fragment_shader = next(f for f in line_parts if f.endswith(FRAG_SHADER_EXT))
|
||||
|
||||
|
@ -64,76 +58,6 @@ def read_index_file(file_path, programs_order):
|
|||
return gpu_programs_cache
|
||||
|
||||
|
||||
# Read hpp-file with programs enumeration.
|
||||
def read_programs_file(file_path):
|
||||
gpu_programs = []
|
||||
with open(file_path, 'r') as f:
|
||||
found = False
|
||||
for line in f:
|
||||
if not found and line.find('enum class Program') >= 0:
|
||||
found = True
|
||||
continue
|
||||
if found and line.find('}') >= 0:
|
||||
break
|
||||
if found and line.find('{') == -1:
|
||||
line_parts = re.split(',|=', line)
|
||||
name = line_parts[0].strip()
|
||||
if name and name != 'ProgramsCount':
|
||||
gpu_programs.append(name)
|
||||
return gpu_programs
|
||||
|
||||
|
||||
def drop_variable_initialization(line):
|
||||
equal_found = line.find('=')
|
||||
if equal_found:
|
||||
return line[:equal_found - 1]
|
||||
return line.replace(';', '')
|
||||
|
||||
|
||||
def get_program_param(line):
|
||||
glsl_found = line.find('glsl::')
|
||||
if glsl_found >= 0:
|
||||
return drop_variable_initialization(line[glsl_found + 6:].replace('m_', 'u_'))
|
||||
if line.find('float ') >= 0 or line.find('int ') >= 0:
|
||||
return drop_variable_initialization(line.lstrip().replace('m_', 'u_'))
|
||||
return None
|
||||
|
||||
|
||||
def get_program(line):
|
||||
program_found = line.find('Program::')
|
||||
if program_found >= 0:
|
||||
return line[program_found + 9:].replace(',', '').replace(')', '').replace('\n', '')
|
||||
return None
|
||||
|
||||
|
||||
# Read hpp-file with program parameters declaration.
|
||||
def read_program_params_file(file_path):
|
||||
program_params = []
|
||||
programs = []
|
||||
result = dict()
|
||||
with open(file_path, 'r') as f:
|
||||
block_found = False
|
||||
for line in f:
|
||||
if line.find('struct') >= 0 and line.find('ProgramParams') >= 0:
|
||||
block_found = True
|
||||
program_params = []
|
||||
programs = []
|
||||
continue
|
||||
if block_found and line.find('}') >= 0:
|
||||
block_found = False
|
||||
for p in programs:
|
||||
result[p] = program_params
|
||||
continue
|
||||
if block_found:
|
||||
param = get_program_param(line)
|
||||
if param:
|
||||
program_params.append(param.split(' '))
|
||||
program = get_program(line)
|
||||
if program:
|
||||
programs.append(program)
|
||||
return result
|
||||
|
||||
|
||||
# Read GLSL-file with common shader functions.
|
||||
def read_shaders_lib_file(file_path):
|
||||
shaders_library = ['', '', '']
|
||||
|
@ -174,112 +98,43 @@ def get_shaders_lib_content(shader_file, shaders_library):
|
|||
return lib_content
|
||||
|
||||
|
||||
def get_shader_line(line, layout_counters, is_fragment_shader):
|
||||
def get_shader_line(line, layout_counters):
|
||||
if line.lstrip().startswith('//') or line == '\n' or len(line) == 0:
|
||||
return None
|
||||
|
||||
output_line = line.rstrip()
|
||||
|
||||
if output_line.find('uniform ') >= 0:
|
||||
if output_line.find('layout (binding') >= 0:
|
||||
if output_line.find('sampler') >= 0:
|
||||
layout_counters[SAMPLERS][1].append(output_line)
|
||||
match = re.search(r"binding\s*=\s*(\d+)", output_line)
|
||||
sampler_match = re.search(r"sampler2D\s+(\w+)", output_line)
|
||||
if match and sampler_match:
|
||||
binding_index = int(match.group(1))
|
||||
sampler_name = sampler_match.group(1)
|
||||
if binding_index == 0:
|
||||
print('Binding index must not be 0 for sampler in the line: ' + line)
|
||||
exit(1)
|
||||
layout_counters[SAMPLERS][sampler_name] = binding_index
|
||||
else:
|
||||
print('Sampler name or binding index is not found in the line: ' + line)
|
||||
exit(1)
|
||||
else:
|
||||
match = re.search(r"binding\s*=\s*(\d+)", output_line)
|
||||
if match:
|
||||
binding_index = int(match.group(1))
|
||||
if binding_index != 0:
|
||||
print('Binding index must be 0 in the line: ' + line)
|
||||
exit(1)
|
||||
else:
|
||||
print('Binding index is not found in the line: ' + line)
|
||||
exit(1)
|
||||
layout_counters[UNIFORMS] += 1
|
||||
return None
|
||||
|
||||
if output_line.find('attribute ') >= 0:
|
||||
location = layout_counters[IN]
|
||||
layout_counters[IN] += 1
|
||||
output_line = output_line.replace('attribute', 'layout (location = {0}) in'.format(location))
|
||||
|
||||
if output_line.find('varying ') >= 0:
|
||||
if is_fragment_shader:
|
||||
location = layout_counters[IN]
|
||||
layout_counters[IN] += 1
|
||||
output_line = output_line.replace('varying', 'layout (location = {0}) in'.format(location))
|
||||
else:
|
||||
location = layout_counters[OUT]
|
||||
layout_counters[OUT] += 1
|
||||
output_line = output_line.replace('varying', 'layout (location = {0}) out'.format(location))
|
||||
output_line = output_line.replace('texture2D', 'texture')
|
||||
output_line = output_line.replace('gl_FragColor', 'v_FragColor')
|
||||
return output_line
|
||||
|
||||
|
||||
def get_size_by_type(type):
|
||||
if type == 'float' or type == 'int':
|
||||
return 1
|
||||
if type == 'vec2':
|
||||
return 2
|
||||
if type == 'vec3':
|
||||
return 3
|
||||
if type == 'vec4':
|
||||
return 4
|
||||
if type == 'mat4':
|
||||
return 16
|
||||
print('Type is not supported' + type)
|
||||
exit(1)
|
||||
|
||||
|
||||
def get_subscript(offset, param):
|
||||
symbols = ['x', 'y', 'z', 'w']
|
||||
subscript = ''
|
||||
for i in range(0, get_size_by_type(param[0])):
|
||||
subscript += symbols[offset + i]
|
||||
return subscript
|
||||
|
||||
|
||||
def write_uniform_block(output_file, program_params):
|
||||
groups = []
|
||||
c = 0
|
||||
group_index = 0
|
||||
group_params = []
|
||||
for p in program_params:
|
||||
sz = get_size_by_type(p[0])
|
||||
if sz % 4 == 0:
|
||||
groups.append((p[0], p[1], [p]))
|
||||
else:
|
||||
if c + sz < 4:
|
||||
group_params.append(p)
|
||||
c += sz
|
||||
elif c + sz == 4:
|
||||
group_params.append(p)
|
||||
groups.append(('vec4', 'u_grouped{0}'.format(group_index), group_params))
|
||||
group_index += 1
|
||||
group_params = []
|
||||
c = 0
|
||||
else:
|
||||
print('Must be possible to unite sequential variables to vec4')
|
||||
exit(1)
|
||||
if c != 0:
|
||||
groups.append(('vec4', 'u_grouped{0}'.format(group_index), group_params))
|
||||
|
||||
output_file.write('layout (binding = 0) uniform UBO\n')
|
||||
output_file.write('{\n')
|
||||
for g in groups:
|
||||
output_file.write(' {0} {1};\n'.format(g[0], g[1]))
|
||||
output_file.write('} uniforms;\n')
|
||||
for k in groups:
|
||||
name = k[1]
|
||||
params = k[2]
|
||||
offset = 0
|
||||
if len(params) == 1 and get_size_by_type(params[0][0]) % 4 == 0:
|
||||
output_file.write('#define {0} uniforms.{1}\n'.format(params[0][1], name))
|
||||
continue
|
||||
for param in params:
|
||||
output_file.write('#define {0} uniforms.{1}.{2}\n'.format(param[1], name, get_subscript(offset, param)))
|
||||
offset += get_size_by_type(param[0])
|
||||
|
||||
|
||||
def get_size_of_attributes_block(lines_before_main):
|
||||
for i, line in reversed(list(enumerate(lines_before_main))):
|
||||
if line.find('layout (location') >= 0:
|
||||
return i + 1
|
||||
return len(lines_before_main)
|
||||
|
||||
|
||||
def generate_spirv_compatible_glsl_shader(output_file, shader_file, shader_dir, shaders_library,
|
||||
program_params, layout_counters, reflection_dict):
|
||||
layout_counters, reflection_dict):
|
||||
output_file.write('#version 310 es\n')
|
||||
output_file.write('precision highp float;\n')
|
||||
output_file.write('#define LOW_P lowp\n')
|
||||
|
@ -290,8 +145,6 @@ def generate_spirv_compatible_glsl_shader(output_file, shader_file, shader_dir,
|
|||
lib_content = get_shaders_lib_content(shader_file, shaders_library)
|
||||
conditional_started = False
|
||||
conditional_skip = False
|
||||
lines_before_main = []
|
||||
main_found = False
|
||||
for line in open(os.path.join(shader_dir, shader_file)):
|
||||
# Remove some useless conditional compilation.
|
||||
if conditional_started and line.lstrip().startswith('#else'):
|
||||
|
@ -303,67 +156,40 @@ def generate_spirv_compatible_glsl_shader(output_file, shader_file, shader_dir,
|
|||
continue
|
||||
if conditional_skip:
|
||||
continue
|
||||
if line.lstrip().startswith('#ifdef ENABLE_VTF') or line.lstrip().startswith('#ifdef GLES3'):
|
||||
if line.lstrip().startswith('#ifdef ENABLE_VTF'):
|
||||
conditional_started = True
|
||||
continue
|
||||
|
||||
if line.lstrip().startswith('void main'):
|
||||
main_found = True
|
||||
|
||||
# Write attributes.
|
||||
sz = get_size_of_attributes_block(lines_before_main)
|
||||
for i in range(0, sz):
|
||||
output_file.write('%s\n' % lines_before_main[i])
|
||||
|
||||
if is_fragment_shader:
|
||||
output_file.write('layout (location = 0) out vec4 v_FragColor;\n')
|
||||
|
||||
# Write uniforms block.
|
||||
# Write reflection for uniforms block.
|
||||
uniforms_index = 'vs_uni';
|
||||
if is_fragment_shader:
|
||||
uniforms_index = 'fs_uni'
|
||||
if layout_counters[UNIFORMS] > 0:
|
||||
write_uniform_block(output_file, program_params)
|
||||
reflection_dict[uniforms_index] = 0
|
||||
else:
|
||||
reflection_dict[uniforms_index] = -1
|
||||
|
||||
# Write samplers.
|
||||
# Write reflection for samplers.
|
||||
sample_index = 'tex'
|
||||
samplers_offset = layout_counters[SAMPLERS][0]
|
||||
if layout_counters[UNIFORMS] > 0 and samplers_offset == 0:
|
||||
samplers_offset = 1
|
||||
for idx, s in enumerate(layout_counters[SAMPLERS][1]):
|
||||
output_file.write('layout (binding = {0}) {1}\n'.format(samplers_offset + idx, s))
|
||||
sampler = {'name': s[s.find('u_'):-1], 'idx': samplers_offset + idx, 'frag':int(is_fragment_shader)}
|
||||
if not sample_index in reflection_dict:
|
||||
reflection_dict[sample_index] = [sampler]
|
||||
else:
|
||||
reflection_dict[sample_index].append(sampler)
|
||||
layout_counters[SAMPLERS][0] = samplers_offset + len(layout_counters[SAMPLERS][1])
|
||||
layout_counters[SAMPLERS][1] = []
|
||||
if not sample_index in reflection_dict:
|
||||
reflection_dict[sample_index] = []
|
||||
for (s, idx) in layout_counters[SAMPLERS].items():
|
||||
sampler = {'name': s, 'idx': idx, 'frag':int(is_fragment_shader)}
|
||||
reflection_dict[sample_index].append(sampler)
|
||||
|
||||
# Write shaders library.
|
||||
for lib_line in lib_content.splitlines():
|
||||
shader_line = get_shader_line(lib_line, layout_counters, is_fragment_shader)
|
||||
shader_line = get_shader_line(lib_line, layout_counters)
|
||||
if shader_line:
|
||||
output_file.write('%s\n' % shader_line)
|
||||
|
||||
# Write rest lines.
|
||||
for i in range(sz, len(lines_before_main)):
|
||||
output_file.write('%s\n' % lines_before_main[i])
|
||||
|
||||
shader_line = get_shader_line(line, layout_counters, is_fragment_shader)
|
||||
if not shader_line:
|
||||
continue
|
||||
|
||||
if main_found:
|
||||
shader_line = get_shader_line(line, layout_counters)
|
||||
if shader_line:
|
||||
output_file.write('%s\n' % shader_line)
|
||||
else:
|
||||
lines_before_main.append(shader_line)
|
||||
layout_counters[IN] = 0
|
||||
layout_counters[OUT] = 0
|
||||
|
||||
layout_counters[UNIFORMS] = 0
|
||||
layout_counters[SAMPLERS] = dict()
|
||||
|
||||
|
||||
# Execute external program.
|
||||
|
@ -377,12 +203,12 @@ def execute_external(options):
|
|||
|
||||
|
||||
# Generate SPIR-V shader from GLSL source.
|
||||
def generate_shader(shader, shader_dir, generation_dir, shaders_library, program_name, program_params,
|
||||
def generate_shader(shader, shader_dir, generation_dir, shaders_library, program_name,
|
||||
layout_counters, output_name, reflection_dict, glslc_path):
|
||||
output_path = os.path.join(generation_dir, output_name)
|
||||
with open(output_path, 'w') as file:
|
||||
generate_spirv_compatible_glsl_shader(file, shader, shader_dir, shaders_library,
|
||||
program_params, layout_counters, reflection_dict)
|
||||
layout_counters, reflection_dict)
|
||||
spv_path = output_path + '.spv'
|
||||
try:
|
||||
execute_external([glslc_path, '-c', output_path, '-o', spv_path, '-std=310es', '--target-env=vulkan'])
|
||||
|
@ -402,21 +228,6 @@ def generate_shader(shader, shader_dir, generation_dir, shaders_library, program
|
|||
return spv_path
|
||||
|
||||
|
||||
# Check if varying are in the same order in vertex and fragment shaders.
|
||||
def check_varying_consistency(vs_file_name, fs_file_name):
|
||||
vs_varyings = []
|
||||
for line in open(vs_file_name):
|
||||
line = line.lstrip().rstrip()
|
||||
if line.startswith('varying '):
|
||||
vs_varyings.append(line)
|
||||
fs_varyings = []
|
||||
for line in open(fs_file_name):
|
||||
line = line.lstrip().rstrip()
|
||||
if line.startswith('varying '):
|
||||
fs_varyings.append(line)
|
||||
return vs_varyings == fs_varyings
|
||||
|
||||
|
||||
def write_shader_to_pack(pack_file, shader_file_name):
|
||||
offset = pack_file.tell()
|
||||
with open(shader_file_name, 'rb') as shader_file:
|
||||
|
@ -427,48 +238,38 @@ def write_shader_to_pack(pack_file, shader_file_name):
|
|||
|
||||
if __name__ == '__main__':
|
||||
if len(sys.argv) < 7:
|
||||
print('Usage : ' + sys.argv[0] + ' <shader_dir> <index_file> <programs_file> <program_params_file> <shaders_lib> <generation_dir> <glslc_path> [--debug]')
|
||||
print('Usage : ' + sys.argv[0] + ' <shader_dir> <index_file> <shaders_lib> <generation_dir> <glslc_path> [--debug]')
|
||||
exit(1)
|
||||
|
||||
shader_dir = sys.argv[1]
|
||||
index_file_name = sys.argv[2]
|
||||
programs_file_name = sys.argv[3]
|
||||
program_params_file_name = sys.argv[4]
|
||||
shaders_lib_file = sys.argv[5]
|
||||
generation_dir = sys.argv[6]
|
||||
glslc_path = sys.argv[7]
|
||||
shaders_lib_file = sys.argv[3]
|
||||
generation_dir = sys.argv[4]
|
||||
glslc_path = sys.argv[5]
|
||||
|
||||
if len(sys.argv) >= 9:
|
||||
debug_output = (sys.argv[8] == '--debug')
|
||||
if len(sys.argv) >= 7:
|
||||
debug_output = (sys.argv[6] == '--debug')
|
||||
|
||||
shaders = [file for file in os.listdir(shader_dir) if
|
||||
os.path.isfile(os.path.join(shader_dir, file)) and (
|
||||
file.endswith(VERTEX_SHADER_EXT) or file.endswith(FRAG_SHADER_EXT))]
|
||||
|
||||
programs_order = read_programs_file(os.path.join(shader_dir, '..', programs_file_name))
|
||||
program_params = read_program_params_file(os.path.join(shader_dir, '..', program_params_file_name))
|
||||
gpu_programs_cache = read_index_file(os.path.join(shader_dir, index_file_name), programs_order)
|
||||
gpu_programs_cache = read_index_file(os.path.join(shader_dir, index_file_name))
|
||||
shaders_library = read_shaders_lib_file(os.path.join(shader_dir, shaders_lib_file))
|
||||
reflection = []
|
||||
current_offset = 0
|
||||
with open(os.path.join(generation_dir, 'shaders_pack.spv'), 'wb') as pack_file:
|
||||
for (k, v) in gpu_programs_cache.items():
|
||||
if not k in program_params:
|
||||
print('Program params were not found for the shader ' + k)
|
||||
exit(1)
|
||||
if not check_varying_consistency(os.path.join(shader_dir, v[0]), os.path.join(shader_dir, v[1])):
|
||||
print('Varyings must be in the same order in VS and FS. Shaders: {0}, {1} / Program: {2}.'.format(v[0], v[1], k))
|
||||
exit(1)
|
||||
layout_counters = {IN: 0, OUT: 0, UNIFORMS: 0, SAMPLERS: [0, list()]}
|
||||
layout_counters = {UNIFORMS: 0, SAMPLERS: dict()}
|
||||
reflection_dict = {'prg': v[2], 'info': dict()}
|
||||
vs_offset = write_shader_to_pack(pack_file, generate_shader(v[0], shader_dir, generation_dir,
|
||||
shaders_library, k, program_params[k],
|
||||
shaders_library, k,
|
||||
layout_counters, k + VERTEX_SHADER_EXT_OUT,
|
||||
reflection_dict['info'], glslc_path))
|
||||
reflection_dict['vs_off'] = vs_offset[0]
|
||||
reflection_dict['vs_size'] = vs_offset[1]
|
||||
fs_offset = write_shader_to_pack(pack_file, generate_shader(v[1], shader_dir, generation_dir,
|
||||
shaders_library, k, program_params[k],
|
||||
shaders_library, k,
|
||||
layout_counters, k + FRAG_SHADER_EXT_OUT,
|
||||
reflection_dict['info'], glslc_path))
|
||||
reflection_dict['fs_off'] = fs_offset[0]
|
||||
|
|
|
@ -29,4 +29,4 @@ fi
|
|||
OMIM_PATH="${OMIM_PATH:-$(cd "$(dirname "$0")/../.."; pwd)}"
|
||||
SHADERS_GENERATOR="$OMIM_PATH/shaders/vulkan_shaders_preprocessor.py"
|
||||
|
||||
python3 "$SHADERS_GENERATOR" "$OMIM_PATH/shaders/GL" shader_index.txt programs.hpp program_params.hpp shaders_lib.glsl "$OMIM_PATH/data/vulkan_shaders" "$GLSLC_PATH" "$DEBUG"
|
||||
python3 "$SHADERS_GENERATOR" "$OMIM_PATH/shaders/GL" shader_index.txt shaders_lib.glsl "$OMIM_PATH/data/vulkan_shaders" "$GLSLC_PATH" "$DEBUG"
|
Loading…
Add table
Reference in a new issue