//===========================================================================//
// File:	l4vidper.hpp																	 	  //
// Project: MUNGA           Brick: Video Renderer Manager	                 //
// Contents: Interface specification Video performance monitoring renderables//
//---------------------------------------------------------------------------//
//   Date    Who  Modification                                               //
// --------  ---  ---------------------------------------------------------- //
// 03/05/96  GAC  initial code													        //
//---------------------------------------------------------------------------//
// Copyright (C) 1995, Virtual World Entertainment, Inc.                     //
// All Rights reserved worldwide                                             //
// This unpublished sourcecode is PROPRIETARY and CONFIDENTIAL               //
//===========================================================================//

#if !defined(L4VIDPER_HPP)
#	define L4VIDPER_HPP

#	if !defined(L4VIDRND_HPP)
#		include "l4vidrnd.hpp"
#	endif

#	if !defined(ROTATION_HPP)
#		include <rotation.hpp>
#	endif

#	if	!defined(RETICLE_HPP)
#		include <reticle.hpp>
#	endif

#	if !defined(SIMULATE_HPP)
#		include <simulate.hpp>
#	endif

#	if !defined(LINMTRX_HPP)
#		include <linmtrx.hpp>
#	endif

#include <dpl.h>
#include	<dplutils.h>
#include	<dpl_2d.h>

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// StripChartRenderable
//
	class StripChartRenderable:
		public VideoRenderable
	{
		public:
			StripChartRenderable(
				Entity					*entity,					// Entity to attach the renderable to
				ExecutionType			execution_type,		// How/when to execute the renderable
				dpl_VIEW					*this_view,				// the view associated with our eye
				float						left,
				float						right,
				float						top,
				float						bottom,
				int						max_samples,			// The number of samples to hold
				int						max_value,				//	The maximum value allowed
				int						min_value,				// the minimum value allowed
				int						*value_to_chart,		// the value we will be graphing
				int						update_interval);		// How frequently (in frames) to update the graphics

			~StripChartRenderable();

			Logical
				TestInstance() const;

			void
				Execute();

		protected:
			dpl_VIEW
				*myView;
			dpl2d_DISPLAY
				*mySystemDisplayList,
				*myDisplayList;
			int
				myMaxSamples,
				myMaxValue,
				myMinValue,
				*myValue,
				*myValueStorage,
				myUpdateInterval,
				myFrameCount,
				myCurrentSample;
			float
				myLeft,
				myRight,
				myTop,
				myBottom;

	};
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// RendererChartRenderable
//
	class RendererChartRenderable:
		public VideoRenderable
	{
		public:
			RendererChartRenderable(
				Entity					*entity,					// Entity to attach the renderable to
				ExecutionType			execution_type,		// How/when to execute the renderable
				dpl_VIEW					*this_view,				// the view associated with our eye
				float						left,
				float						right,
				float						top,
				float						bottom,
				int						max_samples,			// The number of samples to hold
				int						max_value,				//	The maximum value allowed
				int						min_value,				// the minimum value allowed
				int						update_interval);		// How frequently (in frames) to update the graphics

			~RendererChartRenderable();

			Logical
				TestInstance() const;

			void
				Execute();

		protected:
			dpl_VIEW
				*myView;
			dpl2d_DISPLAY
				*mySystemDisplayList,
				*myDisplayList;
			int
				*myCullStorage,
				*myDrawStorage,
				*myFrameStorage,
				*myPixelPlanesStorage,
				*myPrimativeStorage,
				myMaxSamples,
				myMaxValue,
				myMinValue,
				myUpdateInterval,
				myFrameCount,
				myCurrentSample;
			float
				myLeft,
				myRight,
				myTop,
				myBottom;

	};


#endif