@@ -793,26 +793,12 @@ void gr_opengl_start_clip_plane()
793793
794794void gr_opengl_set_clip_plane (vec3d *clip_normal, vec3d *clip_point)
795795{
796- if ( Current_shader != NULL && Current_shader->shader == SDR_TYPE_MODEL) {
797- return ;
798- }
799-
800796 if ( clip_normal == NULL || clip_point == NULL ) {
801- GL_state.ClipPlane (0 , GL_FALSE );
797+ GL_state.ClipDistance (0 , false );
802798 } else {
803- GLdouble clip_equation[4 ];
804-
805- clip_equation[0 ] = (GLdouble)clip_normal->xyz .x ;
806- clip_equation[1 ] = (GLdouble)clip_normal->xyz .y ;
807- clip_equation[2 ] = (GLdouble)clip_normal->xyz .z ;
808-
809- clip_equation[3 ] = (GLdouble)(clip_normal->xyz .x * clip_point->xyz .x )
810- + (GLdouble)(clip_normal->xyz .y * clip_point->xyz .y )
811- + (GLdouble)(clip_normal->xyz .z * clip_point->xyz .z );
812- clip_equation[3 ] *= -1.0 ;
799+ Assertion (Current_shader != NULL && Current_shader->shader == SDR_TYPE_MODEL, " Clip planes are only supported by the model shader!" );
813800
814-
815- GL_state.ClipPlane (0 , GL_TRUE);
801+ GL_state.ClipDistance (0 , true );
816802 }
817803}
818804
@@ -902,7 +888,7 @@ void opengl_tnl_set_material(material* material_info, bool set_base_map)
902888
903889 material::clip_plane &clip_params = material_info->get_clip_plane ();
904890
905- if ( clip_params. enabled ) {
891+ if ( material_info-> is_clipped () ) {
906892 gr_opengl_set_clip_plane (&clip_params.normal , &clip_params.position );
907893 } else {
908894 gr_opengl_set_clip_plane (NULL , NULL );
@@ -951,14 +937,18 @@ void opengl_tnl_set_model_material(model_material *material_info)
951937 }
952938
953939 if ( Current_shader->flags & SDR_FLAG_MODEL_CLIP ) {
954- bool clip = material_info->is_clipped ();
955-
956- if ( clip ) {
940+ if (material_info->is_clipped ()) {
957941 material::clip_plane &clip_info = material_info->get_clip_plane ();
958942
959943 Current_shader->program ->Uniforms .setUniformi (" use_clip_plane" , 1 );
960- Current_shader->program ->Uniforms .setUniform3f (" clip_normal" , clip_info.normal );
961- Current_shader->program ->Uniforms .setUniform3f (" clip_position" , clip_info.position );
944+
945+ vec4 clip_equation;
946+ clip_equation.xyzw .x = clip_info.normal .xyz .x ;
947+ clip_equation.xyzw .y = clip_info.normal .xyz .y ;
948+ clip_equation.xyzw .z = clip_info.normal .xyz .z ;
949+ clip_equation.xyzw .w = -vm_vec_dot (&clip_info.normal , &clip_info.position );
950+
951+ Current_shader->program ->Uniforms .setUniform4f (" clip_equation" , clip_equation);
962952 } else {
963953 Current_shader->program ->Uniforms .setUniformi (" use_clip_plane" , 0 );
964954 }
0 commit comments