import javax.media.opengl.*;

class StipplePattern {

  public StipplePattern() {}

  public void drawStippledPolygon( GL gl ) 
    {

      gl.glPolygonMode( GL.GL_FRONT_AND_BACK, GL.GL_FILL );
      gl.glEnable( GL.GL_POLYGON_STIPPLE );
      //gl.glPolygonStipple( stripe, 0 );
      gl.glPolygonStipple( fly, 0 );

      float a = 0.25f;
      float b = 0.45f;

      //gl.glRecti( -1, -1, 1 , 1 ); return;

      gl.glBegin(GL.GL_POLYGON);
      gl.glEdgeFlag( true );
      gl.glVertex3f(-a, -a, 0);
      gl.glEdgeFlag( false );
      gl.glVertex3f( a, -a, 0);
      gl.glVertex3f(-a,  a, 0);
      gl.glEdgeFlag( true );
      gl.glVertex3f( a,  a, 0);
      gl.glVertex3f( 0,  b, 0);
      gl.glVertex3f(-a,  a, 0);
      gl.glEdgeFlag( false );
      gl.glVertex3f(-a, -a, 0);
      gl.glEdgeFlag( true );
      gl.glVertex3f( a,  a, 0);
      gl.glVertex3f( a, -a, 0);
      gl.glEnd();

    }

//////////////////////////// data ////////////////////

      byte stripe [] = { 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff,
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, 
      }; 

// pattern provided in the OpenGL Redbook
      byte fly[] = {
	(byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
	(byte) 0x03, (byte) 0x80, (byte) 0x01, (byte) 0xC0, (byte) 0x06, (byte) 0xC0, (byte) 0x03, (byte) 0x60, 
	(byte) 0x04, (byte) 0x60, (byte) 0x06, (byte) 0x20, (byte) 0x04, (byte) 0x30, (byte) 0x0C, (byte) 0x20, 
	(byte) 0x04, (byte) 0x18, (byte) 0x18, (byte) 0x20, (byte) 0x04, (byte) 0x0C, (byte) 0x30, (byte) 0x20,
	(byte) 0x04, (byte) 0x06, (byte) 0x60, (byte) 0x20, (byte) 0x44, (byte) 0x03, (byte) 0xC0, (byte) 0x22, 
	(byte) 0x44, (byte) 0x01, (byte) 0x80, (byte) 0x22, (byte) 0x44, (byte) 0x01, (byte) 0x80, (byte) 0x22, 
	(byte) 0x44, (byte) 0x01, (byte) 0x80, (byte) 0x22, (byte) 0x44, (byte) 0x01, (byte) 0x80, (byte) 0x22,
	(byte) 0x44, (byte) 0x01, (byte) 0x80, (byte) 0x22, (byte) 0x44, (byte) 0x01, (byte) 0x80, (byte) 0x22, 
	(byte) 0x66, (byte) 0x01, (byte) 0x80, (byte) 0x66, (byte) 0x33, (byte) 0x01, (byte) 0x80, (byte) 0xCC, 
	(byte) 0x19, (byte) 0x81, (byte) 0x81, (byte) 0x98, (byte) 0x0C, (byte) 0xC1, (byte) 0x83, (byte) 0x30,
	(byte) 0x07, (byte) 0xe1, (byte) 0x87, (byte) 0xe0, (byte) 0x03, (byte) 0x3f, (byte) 0xfc, (byte) 0xc0, 
	(byte) 0x03, (byte) 0x31, (byte) 0x8c, (byte) 0xc0, (byte) 0x03, (byte) 0x33, (byte) 0xcc, (byte) 0xc0, 
	(byte) 0x06, (byte) 0x64, (byte) 0x26, (byte) 0x60, (byte) 0x0c, (byte) 0xcc, (byte) 0x33, (byte) 0x30,
	(byte) 0x18, (byte) 0xcc, (byte) 0x33, (byte) 0x18, (byte) 0x10, (byte) 0xc4, (byte) 0x23, (byte) 0x08, 
	(byte) 0x10, (byte) 0x63, (byte) 0xC6, (byte) 0x08, (byte) 0x10, (byte) 0x30, (byte) 0x0c, (byte) 0x08, 
	(byte) 0x10, (byte) 0x18, (byte) 0x18, (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x08
      };

}

