Revised shaders to catch NVidia length bug that generates NAN's

git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@15105 16af8721-9629-0410-8352-f15c8da7e697
This commit is contained in:
Robert Osfield
2015-08-12 08:34:57 +00:00
parent 23d582fef5
commit c1f083a67e
8 changed files with 64 additions and 49 deletions

View File

@@ -61,16 +61,18 @@ char volume_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(te-t0).xyz/(num_iterations-1.0);\n"
" vec3 texcoord = t0.xyz;\n"
"\n"
" vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" vec4 color = texture3D( baseTexture, texcoord);\n"
" float r = color[3]*TransparencyValue;\n"

View File

@@ -62,13 +62,14 @@ char volume_iso_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
"\n"
" vec3 deltaTexCoord=(t0-te).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(t0-te).xyz/(num_iterations-1.0);\n"
" vec3 texcoord = te.xyz;\n"
"\n"
" vec4 previousColor = texture3D( baseTexture, texcoord);\n"
@@ -78,7 +79,7 @@ char volume_iso_frag[] = "uniform sampler3D baseTexture;\n"
" vec3 deltaY = vec3(0.0, normalSampleDistance, 0.0);\n"
" vec3 deltaZ = vec3(0.0, 0.0, normalSampleDistance);\n"
" \n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" vec4 color = texture3D( baseTexture, texcoord);\n"
"\n"

View File

@@ -62,12 +62,14 @@ char volume_lit_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(te-t0).xyz/(num_iterations-1.0);\n"
" vec3 texcoord = t0.xyz;\n"
"\n"
" float normalSampleDistance = 1.0/512.0;\n"
@@ -76,7 +78,7 @@ char volume_lit_frag[] = "uniform sampler3D baseTexture;\n"
" vec3 deltaZ = vec3(0.0, 0.0, normalSampleDistance);\n"
"\n"
" vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0); \n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" vec4 color = texture3D( baseTexture, texcoord);\n"
"\n"

View File

@@ -69,12 +69,14 @@ char volume_lit_tf_frag[] = "uniform sampler3D baseTexture;\n"
"\n"
" vec3 eyeDirection = normalize((te-t0).xyz);\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(te-t0).xyz/(num_iterations-1.0);\n"
" vec3 texcoord = t0.xyz;\n"
"\n"
" float normalSampleDistance = 1.0/512.0;\n"
@@ -83,7 +85,7 @@ char volume_lit_tf_frag[] = "uniform sampler3D baseTexture;\n"
" vec3 deltaZ = vec3(0.0, 0.0, normalSampleDistance);\n"
"\n"
" vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0); \n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" float v = texture3D( baseTexture, texcoord).a * tfScale + tfOffset;\n"
" vec4 color = texture1D( tfTexture, v);\n"

View File

@@ -61,16 +61,18 @@ char volume_mip_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(te-t0).xyz/(num_iterations-1.0);\n"
" vec3 texcoord = t0.xyz;\n"
"\n"
" vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" vec4 color = texture3D( baseTexture, texcoord);\n"
" if (fragColor.w<color.w)\n"

View File

@@ -66,16 +66,18 @@ char volume_tf_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(te-t0).xyz/(num_iterations-1.0);\n"
" vec3 texcoord = t0.xyz;\n"
"\n"
" vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" float v = texture3D( baseTexture, texcoord).a * tfScale + tfOffset;\n"
" vec4 color = texture1D( tfTexture, v);\n"

View File

@@ -67,13 +67,15 @@ char volume_tf_iso_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
"\n"
" vec3 deltaTexCoord=(t0-te).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(t0-te).xyz/float(num_iterations-1.0);\n"
" vec3 texcoord = te.xyz;\n"
" float previousV = texture3D( baseTexture, texcoord).a;\n"
"\n"
@@ -82,7 +84,7 @@ char volume_tf_iso_frag[] = "uniform sampler3D baseTexture;\n"
" vec3 deltaY = vec3(0.0, normalSampleDistance, 0.0);\n"
" vec3 deltaZ = vec3(0.0, 0.0, normalSampleDistance);\n"
" \n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
"\n"
" float v = texture3D( baseTexture, texcoord).a;\n"

View File

@@ -66,16 +66,18 @@ char volume_tf_mip_frag[] = "uniform sampler3D baseTexture;\n"
" t0 = t0 * texgen;\n"
" te = te * texgen;\n"
"\n"
" const int max_iteratrions = 2048;\n"
" int num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<2) num_iterations = 2;\n"
" if (num_iterations>max_iteratrions) num_iterations = max_iteratrions;\n"
" const float min_iterations = 2.0;\n"
" const float max_iterations = 2048.0;\n"
" float num_iterations = ceil(length((te-t0).xyz)/SampleDensityValue);\n"
" if (num_iterations<min_iterations) num_iterations = min_iterations;\n"
" else if (num_iterations>max_iterations) num_iterations = max_iterations;\n"
" else if (num_iterations!=num_iterations) num_iterations = max_iterations;\n"
"\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1);\n"
" vec3 deltaTexCoord=(te-t0).xyz/float(num_iterations-1.0);\n"
" vec3 texcoord = t0.xyz;\n"
"\n"
" vec4 fragColor = vec4(0.0, 0.0, 0.0, 0.0);\n"
" while(num_iterations>0)\n"
" while(num_iterations>0.0)\n"
" {\n"
" float v = texture3D( baseTexture, texcoord).s * tfScale + tfOffset;\n"
" vec4 color = texture1D( tfTexture, v);\n"