void disable_mask()
	{	     
		assert(m_mask_level > 0);
		if (--m_mask_level == 0)
		{
			glDisable(GL_STENCIL_TEST); 
			return;
		}

		// begin submit previous mask

		glColorMask(0, 0, 0, 0);

		// we set the stencil buffer to 'm_mask_level' 
		// where the stencil buffer m_mask_level + 1
		glStencilFunc(GL_EQUAL, m_mask_level + 1, 0xFF);
		glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); 

		// draw the quad to fill stencil buffer
		glBegin(GL_QUADS);
		glVertex2f(0, 0);
		glVertex2f(m_display_width, 0);
		glVertex2f(m_display_width, m_display_height);
		glVertex2f(0, m_display_height);
		glEnd();

		end_submit_mask();
	}
	void disable_mask()
	{	     
		assert(m_mask_level > 0);
		if (--m_mask_level == 0)
		{
			glDisable(GL_STENCIL_TEST); 
			return;
		}

		// begin submit previous mask

		glColorMask(0, 0, 0, 0);

		// we set the stencil buffer to 'm_mask_level' 
		// where the stencil buffer m_mask_level + 1
		glStencilFunc(GL_EQUAL, m_mask_level + 1, 0xFF);
		glStencilOp(GL_KEEP, GL_KEEP, GL_DECR); 

		// draw the quad to fill stencil buffer

//		glBegin(GL_QUADS);
//		glVertex2f(0, 0);
//		glVertex2f(m_display_width, 0);
//		glVertex2f(m_display_width, m_display_height);
//		glVertex2f(0, m_display_height);
//		glEnd();
		
		Sint16 squareVertices[8]; 
		squareVertices[0] = 0;
		squareVertices[1] = 0;
		squareVertices[2] = m_display_width;
		squareVertices[3] = 0;
		squareVertices[4] = 0;
		squareVertices[5] = m_display_height;
		squareVertices[6] = m_display_width;
		squareVertices[7] = m_display_height;
		
		glVertexPointer(2, GL_SHORT, 0, squareVertices);
		glEnableClientState(GL_VERTEX_ARRAY);
		glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

		glDisableClientState(GL_VERTEX_ARRAY);

		end_submit_mask();
	}