Jump to content

  • Log In with Google      Sign In   
  • Create Account

FREE SOFTWARE GIVEAWAY

We have 4 x Pro Licences (valued at $59 each) for 2d modular animation software Spriter to give away in this Thursday's GDNet Direct email newsletter.


Read more in this forum topic or make sure you're signed up (from the right-hand sidebar on the homepage) and read Thursday's newsletter to get in the running!


#ActualGothSeiDank

Posted 07 August 2013 - 02:27 AM

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.


#1GothSeiDank

Posted 07 August 2013 - 02:26 AM

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 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.

 


PARTNERS