home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / XenonSource.exe / gamesystem / source / gs_visual.cpp < prev   
Encoding:
C/C++ Source or Header  |  2000-05-01  |  2.4 KB  |  120 lines

  1. //-------------------------------------------------------------
  2. //
  3. // Class:    gsCVisual
  4. //
  5. // Author:    John M Phillips
  6. //
  7. // Started:    12/03/00
  8. //
  9. // Base:    gsCObject
  10. //
  11. // Derived:    gsCScreen
  12. //            gsCImage
  13. //
  14. //-------------------------------------------------------------
  15.  
  16. #include "gamesystem.h"
  17.  
  18. //-------------------------------------------------------------
  19.  
  20. gsLPDIRECTDRAW gsCVisual::m_dd = 0;
  21. gsLPDIRECTDRAWOBJECT gsCVisual::m_direct_draw = 0;
  22.  
  23. gsCList<gsCVisual *> gsCVisual::m_active_visuals;
  24.  
  25. //-------------------------------------------------------------
  26.  
  27. bool gsCVisual::initialize()
  28. {
  29.     if (!m_direct_draw) {
  30.  
  31.         HRESULT hr;
  32.  
  33.         // get DirectDraw1 interface
  34.         
  35.         hr = DirectDrawCreate(NULL,&m_dd,NULL);
  36.         
  37.         if (hr != DD_OK) {
  38.             gsREPORT("gsCVisual::initialize couldn't create direct draw 1 interface");
  39.             return false;
  40.             }
  41.  
  42.         // get appopriate DirectDraw(n) interface
  43.             
  44.         hr = m_dd->QueryInterface(gsID_DIRECTDRAW,(LPVOID *)&m_direct_draw);
  45.         
  46.         if (hr != DD_OK) {
  47.             gsREPORT("gsCVisual::initialize couldn't create direct draw n interface");
  48.             return false;
  49.             }
  50.         }
  51.  
  52.     return true;
  53. }
  54.  
  55. //-------------------------------------------------------------
  56.  
  57. bool gsCVisual::shutdown()
  58. {
  59.     if (m_direct_draw) {
  60.         m_direct_draw->Release();
  61.         m_direct_draw = 0;
  62.         }
  63.  
  64.     if (m_dd) {
  65.         m_dd->Release();
  66.         m_dd = 0;
  67.         }
  68.  
  69.     return true;
  70. }
  71.  
  72. //-------------------------------------------------------------
  73.  
  74. gsCVisual::gsCVisual()
  75. {
  76. }
  77.  
  78. //-------------------------------------------------------------
  79.  
  80. gsCVisual::~gsCVisual()
  81. {
  82. }
  83.  
  84. //-------------------------------------------------------------
  85.  
  86. gsLPDIRECTDRAWSURFACE gsCVisual::createSurface(const gsCPoint& size)
  87. {
  88.     gsDDSURFACEDESC ddsd;
  89.  
  90.     // try to create in video memory
  91.     // if that fails try a default create
  92.  
  93.     for (int attempt = 0; attempt < 2; attempt++) {
  94.  
  95.         ZeroMemory(&ddsd,sizeof(ddsd));
  96.         ddsd.dwSize = sizeof(ddsd);
  97.         ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
  98.         ddsd.dwWidth = size.getX();
  99.         ddsd.dwHeight = size.getY();
  100.         ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
  101.         
  102.         if (attempt == 0)
  103.             ddsd.ddsCaps.dwCaps |= DDSCAPS_VIDEOMEMORY;
  104.  
  105.         gsLPDIRECTDRAWSURFACE m_surface;
  106.  
  107.         HRESULT hr;
  108.  
  109.         hr = m_direct_draw->CreateSurface(&ddsd,&m_surface,NULL);
  110.     
  111.         if (hr == DD_OK)
  112.             return m_surface;
  113.         }
  114.     
  115.     gsREPORT("gsCVisual::createSurface failed");
  116.     return 0;
  117. }
  118.  
  119. //-------------------------------------------------------------
  120.