Index: trunk/src/gl/gl_context.cc
===================================================================
--- trunk/src/gl/gl_context.cc	(revision 232)
+++ trunk/src/gl/gl_context.cc	(revision 233)
@@ -171,4 +171,14 @@
 }
 
+void gl_context::apply_polygon_mode( const polygon_mode& mode )
+{
+	if ( m_render_state.polygon_mode.fill != mode.fill )
+	{
+		glPolygonMode( GL_FRONT_AND_BACK, polygon_mode_fill_to_enum( mode.fill ) );
+		m_render_state.polygon_mode.fill = mode.fill;
+	}
+}
+
+
 void gl_context::apply_depth_range( const depth_range& range )
 {
@@ -316,4 +326,5 @@
 		state.color_mask.blue, state.color_mask.alpha 
 	);
+	glPolygonMode( GL_FRONT_AND_BACK, polygon_mode_fill_to_enum( state.polygon_mode.fill ) );
 }
 
@@ -347,4 +358,5 @@
 	apply_color_mask( state.color_mask );
 	apply_depth_mask( state.depth_mask );
+	apply_polygon_mode( state.polygon_mode );
 }
 
Index: trunk/src/gl/gl_enum.cc
===================================================================
--- trunk/src/gl/gl_enum.cc	(revision 232)
+++ trunk/src/gl/gl_enum.cc	(revision 233)
@@ -33,4 +33,17 @@
 	}
 }
+
+unsigned int nv::polygon_mode_fill_to_enum( polygon_mode::fill_type type )
+{
+	switch( type )
+	{
+	case polygon_mode::FILL           : return GL_FILL;
+	case polygon_mode::LINE           : return GL_LINE;
+	case polygon_mode::POINT          : return GL_POINT;
+	NV_RETURN_COVERED_DEFAULT( 0 );
+	}
+}
+
+
 
 unsigned int nv::blending_factor_to_enum( blending::factor type )
