This is the error I get from YoYo's Game Maker:
############################################################################################
FATAL ERROR in Vertex Shader compilation
ShaderName: sh_rimlighting
C:\Users\xxxxx\AppData\Local\Temp\gm_ttt_77174\memory(182,8): warning X3571: pow(f, e) will not work for negative f, use abs(f) or conditionally handle negative values if you expect them
at gml_Object_obj3DPlanet_Draw_0 (line 27) - shader_set( sh_rimlighting );
############################################################################################
This is the Vertex Shader I apply:
attribute vec3 in_Position; // (x,y,z)
attribute vec4 in_Colour; // (r,g,b,a)
attribute vec2 in_TextureCoord; // (u,v)
attribute vec3 in_Normal; // (x,y,z)
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
varying float dp;
uniform float rim_power; //Increase to reduce the effect or decrease to increase the effect
void main()
{
gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * vec4( in_Position, 1.0);
v_vColour = in_Colour;
v_vTexcoord = in_TextureCoord;
vec3 wvPosition = normalize((gm_Matrices[MATRIX_WORLD_VIEW] * vec4(in_Position, 1.0)).xyz);
vec3 wvNormal = normalize((gm_Matrices[MATRIX_WORLD_VIEW] * vec4(in_Normal, 0.0)).xyz);
//float power = 5.0; //Increase to reduce the effect or decrease to increase the effect
dp = pow(dot(wvPosition, wvNormal) + 1.0, rim_power);
}
This is the GML Code I call:
var rim_power = shader_get_uniform( sh_rimlighting, "rim_power" );
d3d_transform_add_rotation_x( 90 );
d3d_transform_add_rotation_y( planet_angle );
d3d_transform_add_scaling( planet_scale, planet_scale, planet_scale );
d3d_transform_add_translation( x, y + offset_y, 0 );
shader_set( sh_rimlighting );
shader_set_uniform_f( rim_power, 5.0 );
d3d_model_draw( modPlanet, 0, 0, 0, background_get_texture(tex_mars) );
shader_reset();
d3d_transform_set_identity();
I do not know where this error is coming from. If I uncomment "float power = 5.0" and use it instead of the uniform rim_power, then it works.
I also get this error when I set rim power to any number that has anything different than .0 as last number. So e.g. 1.0 works, but 2.3 leads to this error.
Any hint or insight is appreciated.