Merge pull request #5056 from maxGimeno/Demo-Fix_compatibility_shaders-maxGImeno

Polyhedron_demo : Fix for compatibility shader
This commit is contained in:
Laurent Rineau 2020-10-09 17:34:24 +02:00
commit 6a2e3a4df4
4 changed files with 54 additions and 54 deletions

View File

@ -1,13 +1,13 @@
varying highp vec4 color; varying highp vec4 color;
varying highp vec4 fP; varying highp vec4 fP;
varying highp vec3 fN; varying highp vec3 fN;
uniform highp vec4 light_pos; uniform highp vec4 light_pos;
uniform highp vec4 light_diff; uniform highp vec4 light_diff;
uniform highp vec4 light_spec; uniform highp vec4 light_spec;
uniform highp vec4 light_amb; uniform highp vec4 light_amb;
uniform highp float spec_power ; uniform highp float spec_power ;
uniform int is_two_side; uniform int is_two_side;
uniform bool is_selected; uniform bool is_selected;
uniform highp float near; uniform highp float near;
uniform highp float far; uniform highp float far;
@ -32,29 +32,29 @@ void main(void) {
gl_FragColor = vec4(d,d,d,1.0); gl_FragColor = vec4(d,d,d,1.0);
else else
{ {
if(color.w<0) if(color.w<0.)
{ {
highp vec4 my_color = vec4(color.xyz, 1.); highp vec4 my_color = vec4(color.xyz, 1.);
highp vec3 L = light_pos.xyz - fP.xyz; highp vec3 L = light_pos.xyz - fP.xyz;
highp vec3 V = -fP.xyz; highp vec3 V = -fP.xyz;
highp vec3 N; highp vec3 N;
if(fN == vec3(0.0,0.0,0.0)) if(fN == vec3(0.0,0.0,0.0))
{ {
gl_FragColor = my_color; gl_FragColor = my_color;
return; return;
} }
else else
N = normalize(fN); N = normalize(fN);
L = normalize(L); L = normalize(L);
V = normalize(V); V = normalize(V);
highp vec3 R = reflect(-L, N); highp vec3 R = reflect(-L, N);
highp vec4 diffuse; highp vec4 diffuse;
if(is_two_side == 1) if(is_two_side == 1)
diffuse = abs(dot(N,L)) * light_diff * my_color; diffuse = abs(dot(N,L)) * light_diff * my_color;
else else
diffuse = max(dot(N,L), 0.0) * light_diff * my_color; diffuse = max(dot(N,L), 0.0) * light_diff * my_color;
highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec; highp vec4 specular = pow(max(dot(R,V), 0.0), spec_power) * light_spec;
highp vec4 ret_color = vec4((my_color*light_amb).xyz + diffuse.xyz + specular.xyz,1); highp vec4 ret_color = vec4((my_color*light_amb).xyz + diffuse.xyz + specular.xyz,1);
if(is_selected) if(is_selected)
gl_FragColor = vec4(ret_color.r+70.0/255.0, ret_color.g+70.0/255.0, ret_color.b+70.0/255.0, alpha); gl_FragColor = vec4(ret_color.r+70.0/255.0, ret_color.g+70.0/255.0, ret_color.b+70.0/255.0, alpha);

View File

@ -1,4 +1,4 @@
//#version 100 //#version 100
attribute highp vec4 vertex; attribute highp vec4 vertex;
attribute highp vec3 normals; attribute highp vec3 normals;
attribute highp vec3 colors; attribute highp vec3 colors;
@ -7,33 +7,33 @@ uniform highp mat4 mvp_matrix;
uniform highp mat4 mv_matrix; uniform highp mat4 mv_matrix;
uniform highp vec4 cutplane; uniform highp vec4 cutplane;
uniform highp float shrink_factor; uniform highp float shrink_factor;
varying highp vec4 fP; varying highp vec4 fP;
varying highp vec3 fN; varying highp vec3 fN;
varying highp vec4 color; varying highp vec4 color;
uniform highp float point_size; uniform highp float point_size;
void main(void) void main(void)
{ {
gl_PointSize = point_size; gl_PointSize = point_size;
color = vec4(colors, vertex.x * cutplane.x + vertex.y * cutplane.y + vertex.z * cutplane.z + cutplane.w); color = vec4(colors, vertex.x * cutplane.x + vertex.y * cutplane.y + vertex.z * cutplane.z + cutplane.w);
fP = mv_matrix * vertex; fP = mv_matrix * vertex;
mat3 mv_matrix_3; mat3 mv_matrix_3;
mv_matrix_3[0] = mv_matrix[0].xyz; mv_matrix_3[0] = mv_matrix[0].xyz;
mv_matrix_3[1] = mv_matrix[1].xyz; mv_matrix_3[1] = mv_matrix[1].xyz;
mv_matrix_3[2] = mv_matrix[2].xyz; mv_matrix_3[2] = mv_matrix[2].xyz;
fN = mv_matrix_3* normals; fN = mv_matrix_3* normals;
highp mat4 transOB = mat4(1, 0, 0, 0, // first column highp mat4 transOB = mat4(1., 0., 0., 0., // first column
0, 1, 0, 0, // second column 0., 1., 0., 0., // second column
0, 0, 1, 0, // third column 0., 0., 1., 0., // third column
center.x, center.y, center.z, 1); // fourth column center.x, center.y, center.z, 1); // fourth column
highp mat4 transBO = mat4(1, 0, 0, 0, // first column highp mat4 transBO = mat4(1., 0., 0., 0., // first column
0, 1, 0, 0, // second column 0., 1., 0., 0., // second column
0, 0, 1, 0, // third column 0., 0., 1., 0., // third column
-center.x, -center.y, -center.z, 1); // fourth column -center.x, -center.y, -center.z, 1); // fourth column
highp mat4 scaling = mat4(shrink_factor, 0, 0, 0, highp mat4 scaling = mat4(shrink_factor, 0., 0., 0.,
0, shrink_factor, 0, 0, 0., shrink_factor, 0., 0.,
0, 0, shrink_factor, 0, 0., 0., shrink_factor, 0.,
0, 0, 0, 1); 0., 0., 0., 1.);
gl_Position = mvp_matrix *transOB * scaling * transBO * vertex; gl_Position = mvp_matrix *transOB * scaling * transBO * vertex;
} }

View File

@ -1,9 +1,9 @@
varying highp vec4 color; varying highp vec4 color;
void main(void) void main(void)
{ {
if(color.w<0) if(color.w<0.)
gl_FragColor = vec4(0,0,0,1.0); gl_FragColor = vec4(0.,0.,0.,1.0);
else else
discard; discard;
} }

View File

@ -23,9 +23,9 @@ uniform bool back_front_shading;
uniform sampler2D sampler; uniform sampler2D sampler;
uniform highp float alpha; uniform highp float alpha;
highp float depth(float z) highp float depth(highp float z)
{ {
return (2 * near) / (far + near - z * (far - near)); return (2.0 * near) / (far + near - z * (far - near));
} }
void main(void) { void main(void) {
@ -53,7 +53,7 @@ void main(void) {
highp vec4 my_color = highp vec4(color.xyz, 1.0); highp vec4 my_color = highp vec4(color.xyz, 1.0);
if(fN == vec3(0.0,0.0,0.0)) if(fN == vec3(0.0,0.0,0.0))
{ {
out_color = my_color; gl_FragColor = my_color;
return; return;
} }
N = normalize(fN); N = normalize(fN);
@ -61,16 +61,16 @@ void main(void) {
V = normalize(V); V = normalize(V);
highp vec3 R = reflect(-L, N); highp vec3 R = reflect(-L, N);
highp vec4 diffuse; highp vec4 diffuse;
float dot_prod = dot(N,L); highp float dot_prod = dot(N,L);
if(back_front_shading) if(back_front_shading)
{ {
if (dot_prod > 0) if (dot_prod > 0.0)
my_color = front_color; my_color = front_color;
else else
my_color = back_color; my_color = back_color;
} }
if(is_two_side == 1) if(is_two_side == 1)
diffuse = abs(dot(N,L)) * light_diff * color; diffuse = abs(dot(N,L)) * light_diff * color;
else else