亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mrscreen.cpp

?? Games programming all in one code chapter 20
?? CPP
字號:
 /* 'mrScreen.cpp' */

 /* Complement header file */
#include "mrScreen.h"

 /* Singleton object */
mrScreen * mrScreen::m_pkSingleton = NULL;

 /* Default constructor */
mrScreen::mrScreen (void)
{
 m_pkD3D       = NULL;
 m_pkD3DDevice = NULL;
 m_hWindow     = NULL;
 m_iFPS        = 0;

 assert (!m_pkSingleton);
 m_pkSingleton = this;
}

 /* Assigment constructor */
mrScreen::mrScreen (HWND hWindow)
{
 m_pkD3D       = NULL;
 m_pkD3DDevice = NULL;
 m_iFPS        = 0;
 m_hWindow     = hWindow;

 assert (!m_pkSingleton);
 m_pkSingleton = this;

 Init (hWindow);
}

 /* Default destructor */
mrScreen::~mrScreen (void)
{
 if (NULL != m_pkD3DDevice)
 {
  m_pkD3DDevice->Release ();
  m_pkD3DDevice = NULL;
 }
 if (NULL != m_pkD3D)
 {
  m_pkD3D->Release ();
  m_pkD3D = NULL;
 }
 m_iFPS        = 0;

 assert (m_pkSingleton);
 m_pkSingleton = NULL;
}

 /* Initialize Direct3D */
mrError32 mrScreen::Init (HWND hWindow)
{
  /* Create Direct3D object */
 m_pkD3D = Direct3DCreate8 (D3D_SDK_VERSION);
 m_hWindow     = hWindow;

 if (NULL == m_pkD3D)
 {
  return mrErrorInitDirect3D;
 }
 return mrNoError;
}

 /* Sets the display mode / create the Direct3D device */
mrError32 mrScreen::SetMode (mrUInt32 iFullscreen, mrUInt16 iWidth, 
                             mrUInt16 iHeight, mrUInt16 iDepth, 
                             bool bHardware)
{
 D3DPRESENT_PARAMETERS kPresentParams; 
 mrUInt32              iDeviceType;

  /* Set type of device to create (hardware or software */
 if (!bHardware)
 {
  iDeviceType = D3DDEVTYPE_REF;
 }
 else
 {
  iDeviceType = D3DDEVTYPE_HAL;
 }

  /* Reset present parameters and set swap effect */
 ZeroMemory (&kPresentParams, sizeof (D3DPRESENT_PARAMETERS) );
 kPresentParams.SwapEffect = D3DSWAPEFFECT_DISCARD;
 
  /* If windowed mode */
 if (!iFullscreen)
 {
  D3DDISPLAYMODE kCurrentMode;

   /* Get current mode information */
  if (FAILED (m_pkD3D->GetAdapterDisplayMode (D3DADAPTER_DEFAULT,
              &kCurrentMode) ))
  {
   return mrErrorGetAdapterDisplayMode;
  }

   /* Set windowed mode and backbuffer format compatible with
      current format */
  kPresentParams.Windowed         = true;
  kPresentParams.BackBufferCount  = 1;
  kPresentParams.BackBufferFormat = kCurrentMode.Format;

   /* Try to create device */
  if (FAILED (m_pkD3D->CreateDevice (D3DADAPTER_DEFAULT, 
                                (D3DDEVTYPE) iDeviceType, 
                                m_hWindow,
                                D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                &kPresentParams, &m_pkD3DDevice ) ))
  {
   return mrErrorCreateDevice;
  }
 }
 else
 {
   /* Set full screen mode and full screen information */
  kPresentParams.Windowed         = false;
  kPresentParams.BackBufferCount  = 1;
  kPresentParams.BackBufferWidth  = iWidth;
  kPresentParams.BackBufferHeight = iHeight;

  kPresentParams.FullScreen_RefreshRateInHz = 
                                 D3DPRESENT_RATE_DEFAULT;
  kPresentParams.FullScreen_PresentationInterval = 
                                 D3DPRESENT_INTERVAL_DEFAULT;

   /* If 16 bit, try to create the device using different 16 bit pixel
      color formats */
  if (iDepth == 16)
  {
   kPresentParams.BackBufferFormat = D3DFMT_R5G6B5;
   if (FAILED (m_pkD3D->CreateDevice (D3DADAPTER_DEFAULT, 
                                   (D3DDEVTYPE) iDeviceType, 
                                   m_hWindow,
                                   D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                   &kPresentParams, &m_pkD3DDevice ) ))
   {
    kPresentParams.BackBufferFormat = D3DFMT_X1R5G5B5;
    if (FAILED (m_pkD3D->CreateDevice (D3DADAPTER_DEFAULT, 
                                    (D3DDEVTYPE) iDeviceType, 
                                    m_hWindow,
                                    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                    &kPresentParams, &m_pkD3DDevice ) ))
    {
     kPresentParams.BackBufferFormat = D3DFMT_A1R5G5B5;
     if (FAILED (m_pkD3D->CreateDevice (D3DADAPTER_DEFAULT, 
                                     (D3DDEVTYPE) iDeviceType, 
                                     m_hWindow,
                                     D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                     &kPresentParams, &m_pkD3DDevice ) ))
     {
      return mrErrorCreateDevice;
     }
    }
   }
  }
   /* If 32 bit, try to create the device using different pixel 32
      color formats */
  else
  {
   kPresentParams.BackBufferFormat = D3DFMT_A8R8G8B8;
   if (FAILED (m_pkD3D->CreateDevice (D3DADAPTER_DEFAULT, 
                                   (D3DDEVTYPE) iDeviceType, 
                                   m_hWindow,
                                   D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                   &kPresentParams, &m_pkD3DDevice ) ))
   {
    kPresentParams.BackBufferFormat = D3DFMT_X8R8G8B8;
    if (FAILED (m_pkD3D->CreateDevice (D3DADAPTER_DEFAULT, 
                                    (D3DDEVTYPE) iDeviceType, 
                                    m_hWindow,
                                    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
                                    &kPresentParams, &m_pkD3DDevice ) ))
    {
     return mrErrorCreateDevice;
    }
   }
  }
  
 }
 m_iFormat = kPresentParams.BackBufferFormat;

  /* Set render states */
 m_pkD3DDevice->SetRenderState (D3DRS_CULLMODE, D3DCULL_NONE);
 m_pkD3DDevice->SetRenderState (D3DRS_LIGHTING, FALSE);
 m_pkD3DDevice->SetRenderState (D3DRS_ALPHABLENDENABLE,   TRUE);
 m_pkD3DDevice->SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
 m_pkD3DDevice->SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);

  /* Set texture color states */
 m_pkD3DDevice->SetTextureStageState (0, D3DTSS_COLOROP, D3DTOP_MODULATE);
 m_pkD3DDevice->SetTextureStageState (0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);

 return mrNoError;
}

 /* Clear the window to color */
mrError32 mrScreen::Clear (mrUInt8 iRed, mrUInt8 iGreen, mrUInt8 iBlue, 
																											mrUInt8 iAlpha)
{
	mrUInt32 iColor;
	iColor = D3DCOLOR_RGBA (iRed, iGreen, iBlue, iAlpha);

  /* Clear the screen to certain color */
 if (FAILED (m_pkD3DDevice->Clear (0, NULL, D3DCLEAR_TARGET, iColor, 
             0, 0) ))
 {
  return mrErrorClear;
 }
 return mrNoError;
}

 /* Start rendering */
mrError32 mrScreen::StartFrame (void)
{
 m_kTimer.Update ();

  /* Start rendering */
 if (FAILED (m_pkD3DDevice->BeginScene () ))
 {
  return mrErrorBeginScene;
 }
 return mrNoError;
}

 /* End rendering */
mrError32 mrScreen::EndFrame (void)
{
  /* End rendering */
 if (FAILED (m_pkD3DDevice->EndScene () ))
 {
  return mrErrorEndScene;
 }

  /* Present data to the screen */
 if (FAILED (m_pkD3DDevice->Present (NULL, NULL, NULL, NULL) ))
 {
  return mrErrorPresent;
 }

  /* Calculate framer per second */
 m_kTimer.Update ();
 m_iFPS = (mrUInt32) (1 / m_kTimer.GetDelta ());

 return mrNoError;
}


mrError32 mrScreen::DrawLine (mrReal32 fX1, mrReal32 fY1, 
                         mrReal32 fX2, mrReal32 fY2,
                         mrUInt8 iRed, mrUInt8 iGreen, 
																					    mrUInt8 iBlue, mrUInt8 iAlpha)
{
	mrUInt32 iColor;
	iColor = D3DCOLOR_RGBA (iRed, iGreen, iBlue, iAlpha);

	 /* Create rectangle vertices */
 mrVertex kVertices [] =
 {  /* x, y, z, w, color, texture coordinates (u,v) */
  {fX1, fY1, 0, 1.0f, iColor, 0, 0},
  {fX2, fY2, 0, 1.0f, iColor, 0, 0},
 };
 
  /* Draw the line */
 mrScreen::GetSingleton ()->GetDevice ()->SetVertexShader (
                                      D3DFVF_MIRUSVERTEX);
 if (FAILED (mrScreen::GetSingleton ()->GetDevice ()->DrawPrimitiveUP (
                                      D3DPT_LINELIST, 2, kVertices, 
                                      sizeof (mrVertex))) )
 {
  return mrErrorDrawPrimitive;
 }

 return mrNoError;
}

mrError32 mrScreen::DrawRectangle (mrReal32 fX1, mrReal32 fY1,
                                   mrReal32 fX2, mrReal32 fY2, 
                                   mrUInt8 iRed, mrUInt8 iGreen, 
																																			mrUInt8 iBlue, mrUInt8 iAlpha)
{
	mrUInt32 iColor;
	iColor = D3DCOLOR_RGBA (iRed, iGreen, iBlue, iAlpha);
 
	 /* Create rectangle vertices */
 mrVertex kVertices [] =
 {  /* x, y, z, w, color, texture coordinates (u,v) */
  {fX1, fY1, 0, 1.0f, iColor, 0, 0},
  {fX2, fY1, 0, 1.0f, iColor, 0, 0},
  {fX2, fY2, 0, 1.0f, iColor, 0, 0},
  {fX1, fY2, 0, 1.0f, iColor, 0, 0},
  {fX1, fY1, 0, 1.0f, iColor, 0, 0},
 };
 
  /* Draw the line */
 mrScreen::GetSingleton ()->GetDevice ()->SetVertexShader (
                                      D3DFVF_MIRUSVERTEX);
 if (FAILED (mrScreen::GetSingleton ()->GetDevice ()->DrawPrimitiveUP (
                                      D3DPT_LINESTRIP, 4, kVertices, 
                                      sizeof (mrVertex))) )
 {
  return mrErrorDrawPrimitive;
 }

 return mrNoError;
}

mrError32 mrScreen::DrawCircle (mrReal32 iCenterX, mrReal32 iCenterY, 
                                mrReal32 iRadius, mrUInt8 iRed, 
																																mrUInt8 iGreen, mrUInt8 iBlue, 
																																mrUInt8 iAlpha, mrUInt32 iVertices)
{
	mrUInt32 iColor;
	iColor = D3DCOLOR_RGBA (iRed, iGreen, iBlue, iAlpha);

 mrVertex * pkVertices;
  /* Allocate needed vertices */
 pkVertices = new mrVertex [iVertices + 1];

 mrReal32 fAngle = 0;
 mrReal32 fComplete;

 mrUInt32 iVertex;

  /* Calculate each vertice position */
 for (iVertex = 0; iVertex < iVertices; iVertex ++)
 {
		 /* Percentage of circle already drawn */
  fComplete = (mrReal32)iVertex / (mrReal32)iVertices;
  pkVertices [iVertex].m_fX = (mrReal32) ((mrReal32)iCenterX + 
                ((mrReal32)iRadius * cos (6.2831f*fComplete)));
  pkVertices [iVertex].m_fY = (mrReal32) ((mrReal32)iCenterY + 
                ((mrReal32)iRadius * sin (6.2831f*fComplete)));

  pkVertices [iVertex].m_fZ     = 0;
  pkVertices [iVertex].m_fRHW   = 1.0f;
  pkVertices [iVertex].m_iColor = iColor;
  pkVertices [iVertex].m_ftU    = 0;
  pkVertices [iVertex].m_ftV    = 0;
 }

  /* Close the circle */
 pkVertices [iVertex].m_fX = pkVertices [0].m_fX;
 pkVertices [iVertex].m_fY = pkVertices [0].m_fY;

 pkVertices [iVertex].m_fZ     = 0;
 pkVertices [iVertex].m_fRHW   = 1.0f;
 pkVertices [iVertex].m_iColor = iColor;
 pkVertices [iVertex].m_ftU    = 0;
 pkVertices [iVertex].m_ftV    = 0;

  /* Draw the circle */
 mrScreen::GetSingleton ()->GetDevice ()->SetVertexShader (
                                      D3DFVF_MIRUSVERTEX);
 if (FAILED (mrScreen::GetSingleton ()->GetDevice ()->DrawPrimitiveUP (
                                      D3DPT_LINESTRIP, iVertices,
                                      pkVertices, sizeof (mrVertex))) )
 {
  return mrErrorDrawPrimitive;
 }
 delete [] pkVertices;
 return mrNoError;
}

 /* Check if mode is supported */
mrBool32 mrScreen::IsModeSupported (mrUInt16 iWidth, mrUInt16 iHeight,
                                    mrUInt16 iDepth)
{
 mrUInt32       iNumberOfModes;
 mrUInt32       iMode;
 D3DDISPLAYMODE kMode;

  /* Get number of available modes */
 iNumberOfModes = m_pkD3D->GetAdapterModeCount (D3DADAPTER_DEFAULT);

  /* For each mode check if mode is equal */
 for (iMode = 0; iMode < iNumberOfModes; iMode ++)
 {
   /* Get mode information */
  m_pkD3D->EnumAdapterModes (D3DADAPTER_DEFAULT, iMode, &kMode);

   /* Compare dimensions */
  if ((iWidth == kMode.Width) && (iHeight == kMode.Height))
  {
    /* Compare bit depth */
   if (iDepth == 16)
   {
    if ((kMode.Format == D3DFMT_R5G6B5) || 
        (kMode.Format == D3DFMT_X1R5G5B5) || 
        (kMode.Format == D3DFMT_A1R5G5B5) )
    {
     return mrTrue;
    }
   }
   else
   {
    if ((kMode.Format == D3DFMT_A8R8G8B8) || 
        (kMode.Format == D3DFMT_X8R8G8B8))
    {
     return mrTrue;
    }  
   }
  }
 }

 return mrFalse;
}

 /* Shows or hides the cursor */
void mrScreen::ShowCursor (mrUInt32 iShowCursor)
{
 m_pkD3DDevice->ShowCursor (iShowCursor);
}

 /* Returns the Direct3D device */
LPDIRECT3DDEVICE8 mrScreen::GetDevice (void)
{
 return m_pkD3DDevice;
}

 /* Returns the frames per second */
mrUInt32 mrScreen::GetFPS (void)
{
 return m_iFPS;
}

 /* Returns the backbuffer format */
mrUInt32 mrScreen::GetFormat (void)
{
 return m_iFormat;
}

 /* Returns the backbuffer depth */
mrUInt32 mrScreen::GetBitdepth (void)
{
 mrUInt32 iBitdepth;

 switch (m_iFormat)
 {
 case D3DFMT_R5G6B5:
 case D3DFMT_X1R5G5B5:
 case D3DFMT_A1R5G5B5:
  iBitdepth = 16;
  break;
 case D3DFMT_A8R8G8B8:
 case D3DFMT_X8R8G8B8:
  iBitdepth = 32;
  break;
 }

 return iBitdepth;
}

 /* Returns the mrScreen singleton */
mrScreen * mrScreen::GetSingleton (void)
{
 assert (m_pkSingleton);
 return m_pkSingleton;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香激情综合国产| 欧美在线观看一区| 亚洲福利电影网| 自拍偷拍国产精品| 国产日产欧美一区| 久久久久久久久伊人| 26uuu久久天堂性欧美| 久久品道一品道久久精品| 亚洲精品成a人| 亚洲综合久久av| 亚洲成人久久影院| 日本亚洲天堂网| 久久精品二区亚洲w码| 韩国视频一区二区| 激情都市一区二区| 欧美高清精品3d| 欧美一区二区三区性视频| 欧美刺激午夜性久久久久久久| 一本久道久久综合中文字幕| 一道本成人在线| 国产精品高潮呻吟久久| 一区二区三区免费| 久久国产尿小便嘘嘘尿| 欧美天堂亚洲电影院在线播放| 日韩午夜在线影院| 中文字幕一区日韩精品欧美| 一区二区三区 在线观看视频| 丁香一区二区三区| 欧美日韩在线观看一区二区 | 中文一区一区三区高中清不卡| 国产精品系列在线| 午夜精品福利一区二区三区av| 麻豆极品一区二区三区| 成人黄色免费短视频| 欧美性猛片xxxx免费看久爱| 亚洲人妖av一区二区| 婷婷综合五月天| 欧美性一级生活| 亚洲成人av福利| 欧美日韩免费电影| 亚洲国产成人一区二区三区| 国产激情偷乱视频一区二区三区| 欧美在线不卡视频| 亚洲成人你懂的| 欧美一区二区三区在线看| 久久精品国产99| 国产欧美日韩久久| 99re66热这里只有精品3直播 | 天涯成人国产亚洲精品一区av| 欧美视频日韩视频在线观看| 亚洲成av人片在线观看| 在线播放中文一区| 狠狠色狠狠色综合系列| 久久久久亚洲蜜桃| 99视频在线精品| 精品欧美一区二区在线观看| 国产一区视频网站| 欧美一卡二卡在线| 国产福利精品一区| 一区二区三区加勒比av| 7777精品伊人久久久大香线蕉| 国产精品久久久久久久久久久免费看| aaa亚洲精品| 偷拍日韩校园综合在线| 久久久久久99久久久精品网站| 99免费精品视频| 日本欧美在线观看| 国产精品高潮久久久久无| 欧美日韩精品久久久| 国产一区二区三区四区五区入口| 中文字幕一区二区三区不卡| 欧美性猛交xxxxxx富婆| 精品亚洲porn| 26uuu精品一区二区| 91视频免费播放| 亚洲欧洲成人自拍| 欧美精品乱码久久久久久| 国内精品不卡在线| 亚洲网友自拍偷拍| 国产日产亚洲精品系列| 欧美日本一区二区三区| 国产成人亚洲综合a∨猫咪| 亚洲午夜久久久久久久久电影院 | 亚洲国产精品麻豆| 国产日产欧美一区二区视频| 欧美区一区二区三区| 成人av午夜电影| 精品一区二区三区久久| 亚洲综合色网站| 国产精品的网站| 久久久综合网站| 91精品国产福利| 色综合天天综合给合国产| 综合久久给合久久狠狠狠97色 | 午夜婷婷国产麻豆精品| 国产精品麻豆久久久| 精品人伦一区二区色婷婷| 欧美日韩一区二区三区在线看| av中文字幕亚洲| 国产成人在线视频网址| 免费在线观看视频一区| 久久午夜电影网| 日韩欧美国产三级电影视频| 欧美在线制服丝袜| 99久久精品免费看| 成人免费va视频| 国产二区国产一区在线观看| 久久99蜜桃精品| 美女一区二区视频| 免费一级片91| 日本欧美一区二区三区| 国产一区二区三区免费播放| 琪琪久久久久日韩精品| 亚洲成人777| 亚洲成av人**亚洲成av**| 一区二区成人在线观看| 亚洲男人都懂的| 亚洲伦在线观看| 亚洲精品写真福利| 亚洲精品欧美激情| 亚洲伦在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品免费视频网站| 国产精品久久久久久久久免费丝袜| 亚洲国产高清aⅴ视频| 国产精品久久久久天堂| 亚洲欧洲成人自拍| 一区二区三区四区视频精品免费| 一区二区三区日韩在线观看| 亚洲国产wwwccc36天堂| 午夜精品久久久| 看片的网站亚洲| 国产精品系列在线播放| 亚洲一区中文在线| 亚洲午夜久久久久久久久电影网| 亚洲mv在线观看| 久久爱www久久做| 成人污视频在线观看| 色综合天天综合网天天看片| 欧美乱妇23p| 精品蜜桃在线看| 亚洲欧美在线视频观看| 天天综合网天天综合色 | 亚洲精品视频在线观看免费| 午夜久久电影网| 久久国产尿小便嘘嘘| av一区二区三区四区| 欧美日韩国产bt| 久久久99精品免费观看不卡| 日韩午夜电影av| 国产精品婷婷午夜在线观看| 亚洲美女一区二区三区| 美女久久久精品| 91麻豆福利精品推荐| 4hu四虎永久在线影院成人| 国产日韩精品一区| 天堂久久久久va久久久久| 亚洲一二三四区不卡| 精品一区二区三区久久久| 日本韩国欧美三级| 在线观看免费成人| 国产日产欧美一区| 天天影视网天天综合色在线播放| 国产白丝精品91爽爽久久 | 国产精品另类一区| 青青草视频一区| 成人av中文字幕| 欧美r级在线观看| 亚洲高清视频的网址| 不卡电影免费在线播放一区| 欧美一区午夜精品| 一区二区三区久久| 国产成都精品91一区二区三| 欧美日韩高清影院| 亚洲美女免费在线| 风间由美性色一区二区三区| 91精品国产综合久久久久久久| 国产精品久久久一本精品| 精品一区二区综合| 国产精品美女久久久久久久| 日本在线观看不卡视频| 日本精品裸体写真集在线观看| 国产三区在线成人av| 久久66热re国产| 欧美日韩综合在线免费观看| 国产精品二三区| 国产成人日日夜夜| 精品日韩一区二区| 久久精品国产亚洲高清剧情介绍 | 亚洲国产精品成人综合| 久久99蜜桃精品| 欧美一二三在线| 亚洲电影欧美电影有声小说| 91免费小视频| 亚洲免费色视频| 色综合久久综合网欧美综合网| 中文字幕一区二区三区在线播放| 成人性生交大片| 中文字幕日本不卡| 色综合久久中文综合久久牛|