/* =========================================================================== Wolfenstein: Enemy Territory GPL Source Code Copyright (C) 1999-2010 id Software LLC, a ZeniMax Media company. This file is part of the Wolfenstein: Enemy Territory GPL Source Code (“Wolf ET Source Code”). Wolf ET Source Code is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Wolf ET Source Code is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Wolf ET Source Code. If not, see . In addition, the Wolf: ET Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Wolf ET Source Code. If not, please request a copy in writing from id Software at the address below. If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA. =========================================================================== */ // ====================================================================== // CDrawSprocket.h // ====================================================================== #pragma once // ====================================================================== // includes // ====================================================================== #include // ====================================================================== // structures // ====================================================================== class CDrawSprocket { private: DSpContextReference mContext; // Currently active context DSpContextReference mGameContext; // Context we'll use for the game DSpContextReference mAltGameContext; // Context we'll use for the game DSpContextReference mMovieContext; // Context we'll use for movies DSpContextAttributes mAttributes; // Attributes of current context DSpContextAttributes mGameAttributes; // Attributes of current context DSpContextAttributes mAltGameAttributes; // Attributes of current context DSpContextAttributes mMovieAttributes; // Attributes of current context Boolean mUseDefaultContext; // When true, we let Draw Sprocket pick a monitor DisplayIDType mDisplayID; // Try to use this screen ID when switching contexts Boolean mGammaFadedOut; Boolean mPickedMonitor; // true if the user has chosen a display already short mXOffset; // Used if we have to center the screen output manually in a context short mYOffset; // that's too large long mWRefCon; //ÊSimilar to a MacOS Window's RefCon - phs, 9/30/99 bool mDoubleBuffered; // Set this to "true" if you want a single // DSp Context (as opposed to swapping buffers // between two contexts) bool mHasQueue; // True if we have the DSp 1.7 Queue/Switch calls available bool mInWindow; // True if we're drawing into a window instead of a fullscreen context public: CDrawSprocket( DisplayIDType inPreferredMonitor = 0 ); virtual ~CDrawSprocket(); virtual void EnableDebugging( Boolean inDebugMode ); virtual Boolean IsValidResolution( short inWidth, short inHeight, short inDepth, Fixed inFrequency = 0 ); virtual Boolean FindBestContext( short inWidth, short inHeight, short inDepth, Fixed inFrequency, short inPageCount, DSpContextReference *outContext, DSpContextAttributes *outAttributes ); virtual Boolean FindFirstContext( DSpContextReference *outContext, DSpContextAttributes *outAttributes ); virtual Boolean FindNextContext( DSpContextReference *outContext, DSpContextAttributes *outAttributes ); DSpContextReference GetCurrentContext() { return mContext; } DSpContextReference GetGameContext() { return mGameContext; } DSpContextReference GetAltGameContext() { return mAltGameContext; } DSpContextReference GetMovieContext() { return mMovieContext; } virtual Boolean ConfigureMovieContext( short inWidth, short inHeight, short inDepth, Fixed inFrequency, short inPageCount ); virtual Boolean ConfigureGameContext( short inWidth, short inHeight, short inDepth, Fixed inFrequency, short inPageCount ); virtual Boolean ConfigureAltGameContext( short inWidth, short inHeight, short inDepth, Fixed inFrequency, short inPageCount ); virtual Boolean SwitchToContext( DSpContextReference inContext, DSpContextAttributes *inAttrib, Boolean inDoFade ); virtual Boolean SwitchToMovieContext( Boolean inDoFade = true ); virtual Boolean SwitchToGameContext( Boolean inDoFade = true ); virtual Boolean SwitchToAltGameContext( Boolean inDoFade = true ); virtual Boolean SwitchToResolution( short inWidth, short inHeight, short inDepth, Fixed inFrequency, short inPageCount, Boolean inDoFade ); virtual Boolean GetResolution( short *outWidth, short *outHeight, short *outDepth, Fixed *outFrequency, short *outPageCount ); virtual Boolean GetGameResolution( short *outWidth, short *outHeight, short *outDepth, Fixed *outFrequency, short *outPageCount ); virtual Boolean SetState( DSpContextState inState ); virtual void GetMouse( Point *outPoint ); virtual DisplayIDType GetDisplayID( void ); virtual GDHandle GetGDevice( void ); virtual DSpContextState GetState(); virtual Boolean SetCLUTEntries( ColorSpec *inColorSpec, unsigned short inStartingEntry, unsigned short inEntryCount ); virtual Boolean SetRGBIndex( UInt16 red, UInt16 green, UInt16 blue, unsigned short inIndex ); virtual Boolean SetRGBEntries_8( UInt8 const *rgbArray, unsigned short inStartingEntry, unsigned short inEntryCount ); virtual Boolean FadeGammaUp( Boolean inFadeAllScreens ); virtual Boolean FadeGammaDown( Boolean inFadeAllScreens ); virtual Boolean FadeGammaUpImmediate( Boolean inFadeAllScreens ); virtual Boolean FadeGammaDownImmediate( Boolean inFadeAllScreens ); bool IsDoubleBuffered() { return mDoubleBuffered; } virtual CGrafPtr GetFrontBuffer(); virtual CGrafPtr GetBackBuffer(); void SetDrawingPort( void ); void SetFrontPort( void ); void SetBackPort( void ); long GetRowBytes( void ); CGrafPtr GetDrawingBuffer(); // Returns the buffer to draw into (back normally) - KLC. void CopyGWorld( GWorldPtr theGWorld, Rect *blitRect ); // Copies a gworld to the current drawing buffer void SwapBuffers(); // Blits entire screen - KLC. void ClearBackBuffer( RGBColor *inColor ); // Sets the back buffer to specified color - phs, 8/19/99 void InvalBackBufferRect( Rect *inRect ); void SetWRefCon( long inWRefCon ) { mWRefCon = inWRefCon; } long GetWRefCon( void ) { return mWRefCon; } void UseQueueAndSwitch( bool useIt ); void UseWindow( bool useWindow ); }; // Single global instance of the CDrawSprocket class. extern CDrawSprocket *gDrawSprocket;