Generic secondary lights (landing light and searchlight) for ALS
This commit is contained in:
parent
379d3c1437
commit
33d1d8c70d
8 changed files with 187 additions and 22 deletions
|
@ -23,7 +23,6 @@
|
||||||
<grit_alpha>1.0</grit_alpha>
|
<grit_alpha>1.0</grit_alpha>
|
||||||
<overlay_bias>0.0</overlay_bias>
|
<overlay_bias>0.0</overlay_bias>
|
||||||
<overlay_alpha>1.0</overlay_alpha>
|
<overlay_alpha>1.0</overlay_alpha>
|
||||||
<use_headlight>0</use_headlight>
|
|
||||||
</parameters>
|
</parameters>
|
||||||
|
|
||||||
<technique n="2">
|
<technique n="2">
|
||||||
|
@ -115,7 +114,7 @@
|
||||||
</texture-unit>
|
</texture-unit>
|
||||||
<program>
|
<program>
|
||||||
<vertex-shader>Shaders/terrain-haze-ultra.vert</vertex-shader>
|
<vertex-shader>Shaders/terrain-haze-ultra.vert</vertex-shader>
|
||||||
<fragment-shader>Shaders/airfield.frag</fragment-shader>
|
<fragment-shader>Shaders/airfield-ALS.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/cloud-shadowfunc.frag</fragment-shader>
|
<fragment-shader>Shaders/cloud-shadowfunc.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
||||||
|
@ -221,6 +220,21 @@
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
<value><use>air_pollution</use></value>
|
<value><use>air_pollution</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>view_pitch_offset</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_pitch_offset</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>view_heading_offset</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_heading_offset</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>field_of_view</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_fov</use></value>
|
||||||
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>cloudpos1_x</name>
|
<name>cloudpos1_x</name>
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
|
@ -441,10 +455,25 @@
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
<value> <use>use_overlay</use></value>
|
<value> <use>use_overlay</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>use_headlight</name>
|
<name>use_searchlight</name>
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
<value> <use>use_headlight</use></value>
|
<value> <use>use_searchlight</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>use_landing_light</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value> <use>use_landing_light</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>display_xsize</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value><use>display_xsize</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>display_ysize</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value><use>display_ysize</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>texture</name>
|
<name>texture</name>
|
||||||
|
|
|
@ -84,7 +84,6 @@
|
||||||
<moonlight><use>/environment/moonlight</use></moonlight>
|
<moonlight><use>/environment/moonlight</use></moonlight>
|
||||||
<quality_level><use>/sim/rendering/shaders/landmass</use></quality_level>
|
<quality_level><use>/sim/rendering/shaders/landmass</use></quality_level>
|
||||||
<tquality_level><use>/sim/rendering/shaders/transition</use></tquality_level>
|
<tquality_level><use>/sim/rendering/shaders/transition</use></tquality_level>
|
||||||
<use_headlight>0</use_headlight>
|
|
||||||
<!-- END fog include -->
|
<!-- END fog include -->
|
||||||
</parameters>
|
</parameters>
|
||||||
<generate>
|
<generate>
|
||||||
|
@ -161,7 +160,7 @@
|
||||||
</texture-unit>
|
</texture-unit>
|
||||||
<program>
|
<program>
|
||||||
<vertex-shader>Shaders/terrain-haze-ultra.vert</vertex-shader>
|
<vertex-shader>Shaders/terrain-haze-ultra.vert</vertex-shader>
|
||||||
<fragment-shader>Shaders/runway-lightfield.frag</fragment-shader>
|
<fragment-shader>Shaders/runway-ALS.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/cloud-shadowfunc.frag</fragment-shader>
|
<fragment-shader>Shaders/cloud-shadowfunc.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
||||||
|
@ -262,6 +261,21 @@
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
<value><use>air_pollution</use></value>
|
<value><use>air_pollution</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>view_pitch_offset</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_pitch_offset</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>view_heading_offset</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_heading_offset</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>field_of_view</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_fov</use></value>
|
||||||
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>cloudpos1_x</name>
|
<name>cloudpos1_x</name>
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
|
@ -478,9 +492,24 @@
|
||||||
<value><use>tquality_level</use></value>
|
<value><use>tquality_level</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>use_headlight</name>
|
<name>use_searchlight</name>
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
<value> <use>use_headlight</use></value>
|
<value> <use>use_searchlight</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>use_landing_light</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value> <use>use_landing_light</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>display_xsize</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value><use>display_xsize</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>display_ysize</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value><use>display_ysize</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>texture</name>
|
<name>texture</name>
|
||||||
|
|
|
@ -116,6 +116,13 @@
|
||||||
<wind_effects><use>/sim/rendering/shaders/wind-effects</use></wind_effects>
|
<wind_effects><use>/sim/rendering/shaders/wind-effects</use></wind_effects>
|
||||||
<windE><use>/environment/sea/surface/wind-from-east-fps</use></windE>
|
<windE><use>/environment/sea/surface/wind-from-east-fps</use></windE>
|
||||||
<windN><use>/environment/sea/surface/wind-from-north-fps</use></windN>
|
<windN><use>/environment/sea/surface/wind-from-north-fps</use></windN>
|
||||||
|
<display_xsize><use>/sim/startup/xsize</use></display_xsize>
|
||||||
|
<display_ysize><use>/sim/startup/ysize</use></display_ysize>
|
||||||
|
<view_pitch_offset><use>/sim/current-view/pitch-offset-deg</use></view_pitch_offset>
|
||||||
|
<view_heading_offset><use>/sim/current-view/heading-offset-deg</use></view_heading_offset>
|
||||||
|
<view_fov><use>/sim/current-view/field-of-view</use></view_fov>
|
||||||
|
<use_searchlight><use>/sim/rendering/als-secondary-lights/use-searchlight</use></use_searchlight>
|
||||||
|
<use_landing_light><use>/sim/rendering/als-secondary-lights/use-landing-light</use></use_landing_light>
|
||||||
<quality_level><use>/sim/rendering/shaders/landmass</use></quality_level>
|
<quality_level><use>/sim/rendering/shaders/landmass</use></quality_level>
|
||||||
<tquality_level><use>/sim/rendering/shaders/transition</use></tquality_level>
|
<tquality_level><use>/sim/rendering/shaders/transition</use></tquality_level>
|
||||||
<cloudpos1_x><use>/local-weather/cloud-shadows/cloudpos-x[0]</use></cloudpos1_x>
|
<cloudpos1_x><use>/local-weather/cloud-shadows/cloudpos-x[0]</use></cloudpos1_x>
|
||||||
|
@ -295,6 +302,7 @@
|
||||||
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
<fragment-shader>Shaders/noise.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/cloud-shadowfunc.frag</fragment-shader>
|
<fragment-shader>Shaders/cloud-shadowfunc.frag</fragment-shader>
|
||||||
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
<fragment-shader>Shaders/hazes.frag</fragment-shader>
|
||||||
|
<fragment-shader>Shaders/secondary_lights.frag</fragment-shader>
|
||||||
</program>
|
</program>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>grain_strength</name>
|
<name>grain_strength</name>
|
||||||
|
@ -436,6 +444,21 @@
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
<value><use>air_pollution</use></value>
|
<value><use>air_pollution</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>view_pitch_offset</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_pitch_offset</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>view_heading_offset</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_heading_offset</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>field_of_view</name>
|
||||||
|
<type>float</type>
|
||||||
|
<value><use>view_fov</use></value>
|
||||||
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>cloudpos1_x</name>
|
<name>cloudpos1_x</name>
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
|
@ -646,6 +669,26 @@
|
||||||
<type>float</type>
|
<type>float</type>
|
||||||
<value><use>windN</use></value>
|
<value><use>windN</use></value>
|
||||||
</uniform>
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>use_searchlight</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value> <use>use_searchlight</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>use_landing_light</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value> <use>use_landing_light</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>display_xsize</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value><use>display_xsize</use></value>
|
||||||
|
</uniform>
|
||||||
|
<uniform>
|
||||||
|
<name>display_ysize</name>
|
||||||
|
<type>int</type>
|
||||||
|
<value><use>display_ysize</use></value>
|
||||||
|
</uniform>
|
||||||
<uniform>
|
<uniform>
|
||||||
<name>quality_level</name>
|
<name>quality_level</name>
|
||||||
<type>int</type>
|
<type>int</type>
|
||||||
|
|
|
@ -38,7 +38,8 @@ uniform int quality_level;
|
||||||
uniform int tquality_level;
|
uniform int tquality_level;
|
||||||
uniform int cloud_shadow_flag;
|
uniform int cloud_shadow_flag;
|
||||||
uniform int use_overlay;
|
uniform int use_overlay;
|
||||||
uniform int use_headlight;
|
uniform int use_searchlight;
|
||||||
|
uniform int use_landing_light;
|
||||||
|
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -54,7 +55,8 @@ float fog_func (in float targ, in float alt);
|
||||||
float rayleigh_in_func(in float dist, in float air_pollution, in float avisibility, in float eye_alt, in float vertex_alt);
|
float rayleigh_in_func(in float dist, in float air_pollution, in float avisibility, in float eye_alt, in float vertex_alt);
|
||||||
float alt_factor(in float eye_alt, in float vertex_alt);
|
float alt_factor(in float eye_alt, in float vertex_alt);
|
||||||
vec3 rayleigh_out_shift(in vec3 color, in float outscatter);
|
vec3 rayleigh_out_shift(in vec3 color, in float outscatter);
|
||||||
vec3 headlight(in float dist);
|
vec3 searchlight(in float dist);
|
||||||
|
vec3 landing_light(in float dist);
|
||||||
|
|
||||||
float light_func (in float x, in float a, in float b, in float c, in float d, in float e)
|
float light_func (in float x, in float a, in float b, in float c, in float d, in float e)
|
||||||
{
|
{
|
||||||
|
@ -266,9 +268,13 @@ if (quality_level > 3)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (use_headlight == 1)
|
if (use_searchlight == 1)
|
||||||
{
|
{
|
||||||
color.rgb += headlight(dist);
|
color.rgb += searchlight(dist);
|
||||||
|
}
|
||||||
|
if (use_landing_light == 1)
|
||||||
|
{
|
||||||
|
color.rgb += landing_light(dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
fragColor = color * texel + specular;
|
fragColor = color * texel + specular;
|
|
@ -35,7 +35,8 @@ uniform float uvstretch;
|
||||||
uniform int quality_level;
|
uniform int quality_level;
|
||||||
uniform int tquality_level;
|
uniform int tquality_level;
|
||||||
uniform int cloud_shadow_flag;
|
uniform int cloud_shadow_flag;
|
||||||
uniform int use_headlight;
|
uniform int use_searchlight;
|
||||||
|
uniform int use_landing_light;
|
||||||
|
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -48,8 +49,8 @@ float mie_angle;
|
||||||
float shadow_func (in float x, in float y, in float noise, in float dist);
|
float shadow_func (in float x, in float y, in float noise, in float dist);
|
||||||
float Noise2D(in vec2 coord, in float wavelength);
|
float Noise2D(in vec2 coord, in float wavelength);
|
||||||
float fog_func (in float targ, in float alt);
|
float fog_func (in float targ, in float alt);
|
||||||
vec3 headlight(in float dist);
|
vec3 searchlight(in float dist);
|
||||||
|
vec3 landing_light(in float dist);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -245,9 +246,13 @@ if ((dist < 5000.0)&& (quality_level > 3) && (wetness>0.0))
|
||||||
// is closer to what the OpenGL fixed function pipeline does.
|
// is closer to what the OpenGL fixed function pipeline does.
|
||||||
color = clamp(color, 0.0, 1.0);
|
color = clamp(color, 0.0, 1.0);
|
||||||
|
|
||||||
if (use_headlight == 1)
|
if (use_searchlight == 1)
|
||||||
{
|
{
|
||||||
color.rgb += headlight(dist);
|
color.rgb += searchlight(dist);
|
||||||
|
}
|
||||||
|
if (use_landing_light == 1)
|
||||||
|
{
|
||||||
|
color.rgb += landing_light(dist);
|
||||||
}
|
}
|
||||||
|
|
||||||
fragColor = color * texel + specular;
|
fragColor = color * texel + specular;
|
|
@ -1,9 +1,15 @@
|
||||||
// -*-C++-*-
|
// -*-C++-*-
|
||||||
|
|
||||||
vec3 headlight(in float dist)
|
uniform int display_xsize;
|
||||||
|
uniform int display_ysize;
|
||||||
|
uniform float field_of_view;
|
||||||
|
uniform float view_pitch_offset;
|
||||||
|
uniform float view_heading_offset;
|
||||||
|
|
||||||
|
vec3 searchlight(in float dist)
|
||||||
{
|
{
|
||||||
|
|
||||||
vec2 center = vec2 (600.0, 400.0);
|
vec2 center = vec2 (float(display_xsize) * 0.5, float(display_ysize) * 0.4);
|
||||||
float angularDist;
|
float angularDist;
|
||||||
float headlightIntensity;
|
float headlightIntensity;
|
||||||
|
|
||||||
|
@ -11,7 +17,39 @@ angularDist = length(gl_FragCoord.xy -center);
|
||||||
if (angularDist <200.0)
|
if (angularDist <200.0)
|
||||||
{
|
{
|
||||||
headlightIntensity = pow(cos(angularDist/200.0 * 3.1415/2.0),2.0);
|
headlightIntensity = pow(cos(angularDist/200.0 * 3.1415/2.0),2.0);
|
||||||
headlightIntensity = headlightIntensity * min(1.0, 1000.0/(dist*dist));
|
headlightIntensity = headlightIntensity * min(1.0, 10000.0/(dist*dist));
|
||||||
|
return headlightIntensity * vec3 (0.5,0.5, 0.5);
|
||||||
|
}
|
||||||
|
else return vec3 (0.0,0.0,0.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
vec3 landing_light(in float dist)
|
||||||
|
{
|
||||||
|
|
||||||
|
float fov_h = field_of_view;
|
||||||
|
float fov_v = float(display_ysize)/float(display_xsize) * field_of_view;
|
||||||
|
|
||||||
|
float yaw_offset;
|
||||||
|
|
||||||
|
if (view_heading_offset > 180.0)
|
||||||
|
{yaw_offset = -360.0+view_heading_offset;}
|
||||||
|
else
|
||||||
|
{yaw_offset = view_heading_offset;}
|
||||||
|
|
||||||
|
float x_offset = (float(display_xsize) / fov_h * yaw_offset);
|
||||||
|
float y_offset = -(float(display_ysize) / fov_v * view_pitch_offset);
|
||||||
|
|
||||||
|
vec2 center = vec2 (float(display_xsize) * 0.5 + x_offset, float(display_ysize) * 0.4 + y_offset);
|
||||||
|
|
||||||
|
|
||||||
|
float angularDist;
|
||||||
|
float headlightIntensity;
|
||||||
|
|
||||||
|
angularDist = length(gl_FragCoord.xy -center);
|
||||||
|
if (angularDist <200.0)
|
||||||
|
{
|
||||||
|
headlightIntensity = pow(cos(angularDist/200.0 * 3.1415/2.0),2.0);
|
||||||
|
headlightIntensity = headlightIntensity * min(1.0, 10000.0/(dist*dist));
|
||||||
return headlightIntensity * vec3 (0.5,0.5, 0.5);
|
return headlightIntensity * vec3 (0.5,0.5, 0.5);
|
||||||
}
|
}
|
||||||
else return vec3 (0.0,0.0,0.0);
|
else return vec3 (0.0,0.0,0.0);
|
||||||
|
|
|
@ -59,6 +59,8 @@ uniform int tquality_level;
|
||||||
uniform int wind_effects;
|
uniform int wind_effects;
|
||||||
uniform int cloud_shadow_flag;
|
uniform int cloud_shadow_flag;
|
||||||
uniform int rock_strata;
|
uniform int rock_strata;
|
||||||
|
uniform int use_searchlight;
|
||||||
|
uniform int use_landing_light;
|
||||||
|
|
||||||
const float EarthRadius = 5800000.0;
|
const float EarthRadius = 5800000.0;
|
||||||
const float terminator_width = 200000.0;
|
const float terminator_width = 200000.0;
|
||||||
|
@ -78,6 +80,8 @@ float fog_func (in float targ, in float alt);
|
||||||
float rayleigh_in_func(in float dist, in float air_pollution, in float avisibility, in float eye_alt, in float vertex_alt);
|
float rayleigh_in_func(in float dist, in float air_pollution, in float avisibility, in float eye_alt, in float vertex_alt);
|
||||||
float alt_factor(in float eye_alt, in float vertex_alt);
|
float alt_factor(in float eye_alt, in float vertex_alt);
|
||||||
vec3 rayleigh_out_shift(in vec3 color, in float outscatter);
|
vec3 rayleigh_out_shift(in vec3 color, in float outscatter);
|
||||||
|
vec3 searchlight(in float dist);
|
||||||
|
vec3 landing_light(in float dist);
|
||||||
|
|
||||||
float light_func (in float x, in float a, in float b, in float c, in float d, in float e)
|
float light_func (in float x, in float a, in float b, in float c, in float d, in float e)
|
||||||
{
|
{
|
||||||
|
@ -456,7 +460,14 @@ if ((dist < 5000.0)&& (quality_level > 3) && (combined_wetness>0.0))
|
||||||
// is closer to what the OpenGL fixed function pipeline does.
|
// is closer to what the OpenGL fixed function pipeline does.
|
||||||
color = clamp(color, 0.0, 1.0);
|
color = clamp(color, 0.0, 1.0);
|
||||||
|
|
||||||
|
if (use_searchlight == 1)
|
||||||
|
{
|
||||||
|
color.rgb += searchlight(dist);
|
||||||
|
}
|
||||||
|
if (use_landing_light == 1)
|
||||||
|
{
|
||||||
|
color.rgb += landing_light(dist);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
fragColor = color * texel + specular;
|
fragColor = color * texel + specular;
|
||||||
|
|
|
@ -287,6 +287,10 @@ Started September 2000 by David Megginson, david@megginson.com
|
||||||
<!-- OSG default is 300, but this means we burn lots of memory on no-longer
|
<!-- OSG default is 300, but this means we burn lots of memory on no-longer
|
||||||
visible trees / random buildings -->
|
visible trees / random buildings -->
|
||||||
<max-paged-lod type="int">16</max-paged-lod>
|
<max-paged-lod type="int">16</max-paged-lod>
|
||||||
|
<als-secondary-lights>
|
||||||
|
<use-searchlight type="bool">false</use-searchlight>
|
||||||
|
<use-landing-light type="bool">false</use-landing-light>
|
||||||
|
</als-secondary-lights>
|
||||||
</rendering>
|
</rendering>
|
||||||
<model-hz type="int">120</model-hz>
|
<model-hz type="int">120</model-hz>
|
||||||
<navdb>
|
<navdb>
|
||||||
|
|
Loading…
Reference in a new issue