2010-12-04 16:14:34 +00:00
// Copyright (C) 2010-2012, XFX Team
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the copyright holder nor the names of any
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
# include <GraphicsDeviceManager.h>
2012-09-28 20:36:02 +00:00
# include <Game.h>
# include <System/Event.h>
2011-01-16 00:47:37 +00:00
2012-03-29 22:02:43 +00:00
# include <sassert.h>
2012-09-28 20:36:02 +00:00
# if DEBUG
extern " C "
{
# include <openxdk/debug.h>
2011-01-16 00:47:37 +00:00
}
2012-09-28 20:36:02 +00:00
# endif
2010-12-04 16:14:34 +00:00
namespace XFX
{
const int GraphicsDeviceManager : : DefaultBackBufferWidth = 640 ;
const int GraphicsDeviceManager : : DefaultBackBufferHeight = 480 ;
2012-09-28 20:36:02 +00:00
SurfaceFormat_t GraphicsDeviceManager : : ValidAdapterFormats [ ] = { SurfaceFormat : : Bgr565 } ; // TODO figure out which ones are really supported
SurfaceFormat_t GraphicsDeviceManager : : ValidBackBufferFormats [ ] = { SurfaceFormat : : Bgr565 , SurfaceFormat : : Bgra5551 , SurfaceFormat : : Color } ; // idem
2011-01-16 00:47:37 +00:00
2012-09-28 20:36:02 +00:00
GraphicsDeviceManager : : GraphicsDeviceManager ( Game * const game )
: _game ( game ) , backBufferFormat ( SurfaceFormat : : Color ) , backBufferHeight ( DefaultBackBufferHeight ) , backBufferWidth ( DefaultBackBufferWidth )
2011-01-16 00:47:37 +00:00
{
SynchronizeWithVerticalRetrace = true ;
2012-09-28 20:36:02 +00:00
preferredDepthStencilFormat = DepthFormat : : Depth24 ;
2011-01-16 00:47:37 +00:00
2012-09-28 20:36:02 +00:00
sassert ( game - > getServices ( ) . GetService ( " IGraphicsDeviceManager " ) = = null , " A graphics device manager is already registered. The graphics device manager cannot be changed once it is set. " ) ;
2012-03-29 22:02:43 +00:00
2012-09-28 20:36:02 +00:00
# if DEBUG
debugPrint ( " Registering GraphicsDeviceManager \n " ) ;
# endif
2012-03-29 22:02:43 +00:00
game - > getServices ( ) . AddService ( " IGraphicsDeviceManager " , this ) ;
game - > getServices ( ) . AddService ( " IGraphicsDeviceService " , this ) ;
}
GraphicsDeviceManager : : GraphicsDeviceManager ( const GraphicsDeviceManager & obj )
2012-09-28 20:36:02 +00:00
: _game ( obj . _game ) , backBufferFormat ( obj . backBufferFormat ) , backBufferHeight ( obj . backBufferHeight ) , backBufferWidth ( obj . backBufferWidth )
{
}
GraphicsDeviceManager : : ~ GraphicsDeviceManager ( )
2012-03-29 22:02:43 +00:00
{
2012-09-28 20:36:02 +00:00
// TODO: implement
2011-01-16 00:47:37 +00:00
}
2012-03-29 22:02:43 +00:00
GraphicsDevice * GraphicsDeviceManager : : getGraphicsDevice ( ) const
2010-12-04 16:14:34 +00:00
{
return graphicsDevice ;
}
2011-01-16 00:47:37 +00:00
bool GraphicsDeviceManager : : IsFullScreen ( )
2010-12-04 16:14:34 +00:00
{
2012-09-28 20:36:02 +00:00
return isFullScreen ;
2010-12-04 16:14:34 +00:00
}
void GraphicsDeviceManager : : ApplyChanges ( )
{
}
2011-01-16 00:47:37 +00:00
bool GraphicsDeviceManager : : BeginDraw ( )
{
return true ;
}
2012-03-29 22:02:43 +00:00
bool GraphicsDeviceManager : : CanResetDevice ( const GraphicsDeviceInformation newDeviceInfo )
2010-12-04 16:14:34 +00:00
{
2012-03-29 22:02:43 +00:00
/*if (graphicsDevice->getDeviceType() != newDeviceInfo.DeviceType_)
2010-12-27 01:01:25 +00:00
{
return false ;
2012-03-29 22:02:43 +00:00
} */
2010-12-27 01:01:25 +00:00
return true ;
2010-12-04 16:14:34 +00:00
}
2011-01-16 00:47:37 +00:00
void GraphicsDeviceManager : : CreateDevice ( )
2010-12-04 16:14:34 +00:00
{
2012-09-28 20:36:02 +00:00
# if DEBUG
debugPrint ( " Creating GraphicsDevice \n " ) ;
# endif
PresentationParameters * p = new PresentationParameters ( ) ;
p - > BackBufferWidth = backBufferWidth ;
p - > BackBufferHeight = backBufferHeight ;
p - > BackBufferFormat = backBufferFormat ;
p - > IsFullScreen = true ;
2012-03-29 22:02:43 +00:00
// TODO: properly construct the GraphicsDevice- requires lots of additional coding in multiple places
2012-09-28 20:36:02 +00:00
graphicsDevice = new GraphicsDevice ( null , p ) ;
graphicsDevice - > Disposing + = new EventHandler : : T < GraphicsDeviceManager > ( this , & GraphicsDeviceManager : : OnDeviceDisposing ) ;
graphicsDevice - > DeviceResetting + = new EventHandler : : T < GraphicsDeviceManager > ( this , & GraphicsDeviceManager : : OnDeviceResetting ) ;
graphicsDevice - > DeviceReset + = new EventHandler : : T < GraphicsDeviceManager > ( this , & GraphicsDeviceManager : : OnDeviceReset ) ;
2012-03-29 22:02:43 +00:00
2012-09-28 20:36:02 +00:00
OnDeviceCreated ( this , const_cast < EventArgs * > ( EventArgs : : Empty ) ) ;
2011-01-16 00:47:37 +00:00
}
void GraphicsDeviceManager : : Dispose ( )
{
Dispose ( true ) ;
2012-09-28 20:36:02 +00:00
delete graphicsDevice ;
2011-01-16 00:47:37 +00:00
}
void GraphicsDeviceManager : : Dispose ( bool disposing )
{
if ( disposing )
{
2012-03-29 22:02:43 +00:00
graphicsDevice - > Dispose ( ) ;
2011-01-16 00:47:37 +00:00
}
}
2010-12-27 01:01:25 +00:00
2011-01-16 00:47:37 +00:00
void GraphicsDeviceManager : : EndDraw ( )
{
2012-03-29 22:02:43 +00:00
graphicsDevice - > Present ( ) ;
2010-12-27 01:01:25 +00:00
}
2012-09-28 20:36:02 +00:00
int GraphicsDeviceManager : : GetType ( ) const
{
}
void GraphicsDeviceManager : : OnDeviceCreated ( Object * sender , EventArgs * args )
2010-12-27 01:01:25 +00:00
{
2012-09-28 20:36:02 +00:00
DeviceCreated ( sender , args ) ;
2010-12-27 01:01:25 +00:00
}
2012-09-28 20:36:02 +00:00
void GraphicsDeviceManager : : OnDeviceDisposing ( Object * sender , EventArgs * args )
2010-12-27 01:01:25 +00:00
{
2012-09-28 20:36:02 +00:00
DeviceDisposing ( sender , args ) ;
2010-12-27 01:01:25 +00:00
}
2012-09-28 20:36:02 +00:00
void GraphicsDeviceManager : : OnDeviceReset ( Object * sender , EventArgs * args )
2010-12-27 01:01:25 +00:00
{
2012-09-28 20:36:02 +00:00
DeviceReset ( sender , args ) ;
2010-12-27 01:01:25 +00:00
}
2012-09-28 20:36:02 +00:00
void GraphicsDeviceManager : : OnDeviceResetting ( Object * sender , EventArgs * args )
2010-12-27 01:01:25 +00:00
{
2012-09-28 20:36:02 +00:00
DeviceResetting ( sender , args ) ;
2010-12-27 01:01:25 +00:00
}
2010-12-04 16:14:34 +00:00
void GraphicsDeviceManager : : ToggleFullscreen ( )
{
2012-09-28 20:36:02 +00:00
isFullScreen = ! isFullScreen ;
PresentationParameters * p = graphicsDevice - > getPresentationParameters ( ) ;
p - > IsFullScreen = isFullScreen ;
graphicsDevice - > Reset ( p ) ;
2010-12-04 16:14:34 +00:00
}
}