//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose: 
//
//=============================================================================//

#ifndef VIEW_SHARED_H
#define VIEW_SHARED_H

#ifdef _WIN32
#pragma once
#endif

//-----------------------------------------------------------------------------
// Purpose: Renderer setup data.  
//-----------------------------------------------------------------------------
class CViewSetup
{
public:
	CViewSetup()
	{
		m_bForceAspectRatio1To1 = false;
		m_bRenderToSubrectOfLargerScreen = false;
		bForceClearWholeRenderTarget = false;
		m_bUseRenderTargetAspectRatio = false;
	}

// shared by 2D & 3D views

	// User specified context
	int			context;			

	// left side of view window
	int			x;					
	// top side of view window
	int			y;					
	// width of view window
	int			width;				
	// height of view window
	int			height;				

	// clear the color buffer before rendering this view?
	bool		clearColor;			
	// clear the Depth buffer before rendering this view?
	bool		clearDepth;			
	// NOTE: This is for a workaround on ATI with building cubemaps.  Clearing just the viewport doesn't seem to work properly.
	bool		bForceClearWholeRenderTarget;

// the rest are only used by 3D views

	// Orthographic projection?
	bool		m_bOrtho;			
	// View-space rectangle for ortho projection.
	float		m_OrthoLeft;		
	float		m_OrthoTop;
	float		m_OrthoRight;
	float		m_OrthoBottom;

	// horizontal FOV in degrees
	float		fov;				
	// horizontal FOV in degrees for in-view model
	float		fovViewmodel;		

	// 3D origin of camera
	Vector		origin;					
	// Origin gets reflected on the water surface, but things like
	// displacement LOD need to be calculated from the viewer's 
	// real position.		
	Vector		m_vUnreflectedOrigin;																			
	
	// heading of camera (pitch, yaw, roll)
	QAngle		angles;				
	// local Z coordinate of near plane of camera
	float		zNear;			
		// local Z coordinate of far plane of camera
	float		zFar;			

	// local Z coordinate of near plane of camera ( when rendering view model )
	float		zNearViewmodel;		
	// local Z coordinate of far plane of camera ( when rendering view model )
	float		zFarViewmodel;		

	bool		m_bForceAspectRatio1To1;

	// set to true if this is to draw into a subrect of the larger screen
	// this really is a hack, but no more than the rest of the way this class is used
	bool		m_bRenderToSubrectOfLargerScreen;

	// Use this for situations like water where you want to render the aspect ratio of the
	// back buffer into a square (or otherwise) render target.
	bool		m_bUseRenderTargetAspectRatio;
};

#endif // VIEW_SHARED_H
