/****************************************************************************************

		InteractiveRenderDefs.h

		Copyright: (c) 2001 Eovia Corp. All rights reserved.

		Author:	Charles
		Date:	07/09/99

		Revision History

		when		who			what & why
		==========	==========	======================================================
		08/02/99	Alec		added ERenderActivity
		07/09/99	Charles		Created

*****************************************************************************************/

#ifndef __InteractiveRenderDefs__
#define __InteractiveRenderDefs__

#if CP_PRAGMA_ONCE
#pragma once
#endif

// Make sure these constants match up with InteractiveRenderer.r.  
// The enums have type-safety, but can't be used in the .r file.

// Note these names are too close to InteractiveRendererDefs.h and InteractiveSettings.

/// This struct defines a number of constants that are used for the interactive renderer.
///
struct InteractiveSettings
{
	enum ERendererType
	{
		kMetaSoftware		= 0,
		kOpenGLHardware 	= 1,
		kD3DHardware 		= 2
	};


	enum ERenderMode
	{
		kRenderMode_None			= 0,

		kRenderMode_BoundingBox		= 1,
		kRenderMode_Wireframe		= 2,
		kRenderMode_LitWireframe	= 3,
		
		kRenderMode_Flat			= 10,
		kRenderMode_Gouraud			= 11,
		kRenderMode_Phong			= 12, // not supported yet
		kRenderMode_Textured		= 13,
		kRenderMode_ShadowBuffer	= 14, // do not render the colorBuffer
		kRenderMode_NPR				= 15, // renders ZBuffer and object buffer

		kRenderMode_Sketch			= 20,
		kRenderMode_Max				= 0x7fffffff // not a valid constant
	};

	enum ESilhouetteMode
	{
		kSilhouette_BoxOnly			= 0,
		kSilhouette_ActivePlane		= 1,
		kSilhouette_AllPlanes 		= 2,
		kSilhouette_None      		= 3
	};

	enum ESilhouetteColorMode
	{
		kSilhouetteColor_Constant	= 0,
		kSilhouetteColor_Object		= 1
	};



	// The hardware driver cannot be specified per renderer.
	// You cannot mix ogl and d3d together - let the renderer decide which one to use
	// (prefers D3D when available)

	// lighting combines with the 
	enum ELightingMode
	{
		kLightingMode_Lighting				= 0,
		kLightingMode_LightMapGlobalSpace	= 1,	// we this has been removed !!!!
		kLightingMode_LightMapEyeSpace		= 2,
		kLightingMode_LightMapAndLighting	= 3,
		kLightingMode_Max					= 0x7fffffff // not a valid constant
	};

	// the working box and ground plane looks
	enum EWorkingBoxLook
	{
		kWorkingBoxLook_WireGrid		= 0,
		kWorkingBoxLook_SolidGrid		= 1,
		kWorkingBoxLook_TransparentGrid	= 2,
		kWorkingBoxLook_CheckeredGrid	= 3, // this is just too busy, grid suffices
		kWorkingBoxLook_Max				= 0x7fffffff // not a valid constant
	};

	enum EGroundPlaneLook
	{
		kGroundPlaneLook_None			= 0, // this and the fDoGroundPlane determine visiblity
		kGroundPlaneLook_WireGrid		= 1,
		kGroundPlaneLook_OpaqueGrid		= 2, // hides underground but not bg image
		kGroundPlaneLook_SolidGrid		= 3,
		kGroundPlaneLook_Max			= 0x7fffffff // not a valid constant
	};

	// this provides information about the current renderer activity loop
	// the renderer can degrade, perform interrupts, and accelerate rendering appropriately
	// return the setting to kRenderActivityLoop_None when finished
	enum ERenderActivity
	{
		kRenderActivity_None					= 0,
		
		kRenderActivity_TimeLoop				= 1,
		kRenderActivity_TimeChanged				= 2,

		kRenderActivity_PanLoop					= 3,
		kRenderActivity_Zoom					= 4,

		kRenderActivity_Selection				= 5,
		kRenderActivity_TrackLoop				= 6, // rotate, transl, scale
		kRenderActivity_UpdateLight				= 7, // rotate, transl, scale
		kRenderActivity_UpdateTexture			= 8, // rotate, transl, scale
		
		kRenderActivity_UpdateBackdrop			= 9,

		kRenderActivity_CameraOrbitLoop			= 10,
		kRenderActivity_CameraTranslateLoop		= 11,
		kRenderActivity_CameraTranslateXYLoop	= 12,

		kRenderActivity_RenderAll				= 13,

		kRenderActivity_InteractiveHilite		= 14,

		//kRenderActivity_FinalRender			= 15,
		
		kRenderActivity_Max						= 0x7fffffff // not a valid constant
	};
};

	// *********************************************************************************
	//						PMAP IDs
	// *********************************************************************************


// quality settings (these names should match the enum names ?)
#define kRenderingMode			IDTYPE('M','O','D','E')
#define kLightingSettings		IDTYPE('L','I','T','E')

// to turn on anti-alias wires, a boolean
#define kAntialiasWire			IDTYPE('A','W','i','r')
#define kDisplayGroundPlane		'GPOn'

#endif