GSRendererHW.h
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:2k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. /* 
  2.  * Copyright (C) 2003-2005 Gabest
  3.  * http://www.gabest.org
  4.  *
  5.  *  This Program is free software; you can redistribute it and/or modify
  6.  *  it under the terms of the GNU General Public License as published by
  7.  *  the Free Software Foundation; either version 2, or (at your option)
  8.  *  any later version.
  9.  *   
  10.  *  This Program is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13.  *  GNU General Public License for more details.
  14.  *   
  15.  *  You should have received a copy of the GNU General Public License
  16.  *  along with GNU Make; see the file COPYING.  If not, write to
  17.  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. 
  18.  *  http://www.gnu.org/copyleft/gpl.html
  19.  *
  20.  */
  21. #pragma once
  22. #include "GSRenderer.h"
  23. #pragma pack(push, 1)
  24. __declspec(align(16)) union GSVertexHW
  25. {
  26. struct
  27. {
  28. float x, y, z, rhw;
  29. union {struct {BYTE r, g, b, a;}; D3DCOLOR color;};
  30. D3DCOLOR fog;
  31. float tu, tv;
  32. };
  33. struct {__m128i xmm[2];};
  34. #if _M_IX86_FP >= 2 || defined(_M_AMD64)
  35. GSVertexHW& operator = (GSVertexHW& v) {xmm[0] = v.xmm[0]; xmm[1] = v.xmm[1]; return *this;}
  36. #endif
  37. };
  38. #pragma pack(pop)
  39. class GSRendererHW : public GSRenderer<GSVertexHW>
  40. {
  41. protected:
  42. CSurfMap<IDirect3DTexture9> m_pRTs;
  43. CSurfMap<IDirect3DSurface9> m_pDSs;
  44. CAtlMap<DWORD, CGSWnd*> m_pRenderWnds;
  45. GSTextureCache m_tc;
  46. void SetupTexture(const GSTextureBase& t, float tsx, float tsy);
  47. void SetupAlphaBlend();
  48. void SetupColorMask();
  49. void SetupZBuffer();
  50. void SetupAlphaTest();
  51. void SetupScissor(scale_t& s);
  52. void Reset();
  53. void VertexKick(bool fSkip);
  54. int DrawingKick(bool fSkip);
  55. void FlushPrim();
  56. void Flip();
  57. void EndFrame();
  58. void InvalidateTexture(const GIFRegBITBLTBUF& BITBLTBUF, CRect r);
  59. void InvalidateLocalMem(DWORD BP, DWORD TBP0, DWORD PSM, CRect r);
  60. void MinMaxUV(int w, int h, CRect& r);
  61. D3DPRIMITIVETYPE m_primtype;
  62. public:
  63. GSRendererHW(HWND hWnd, HRESULT& hr);
  64. ~GSRendererHW();
  65. HRESULT ResetDevice(bool fForceWindowed = false);
  66. void LOGVERTEX(GSVertexHW& v, LPCTSTR type)
  67. {
  68. int tw = 1, th = 1;
  69. if(m_pPRIM->TME) {tw = 1<<m_ctxt->TEX0.TW; th = 1<<m_ctxt->TEX0.TH;}
  70. LOG2(_T("t %s (%.2f, %.2f, %.2f, %.2f) (%08x) (%f, %f) (%f, %f)n"), 
  71. type,
  72. v.x, v.y, v.z, v.rhw, 
  73. v.color, v.tu, v.tv,
  74. v.tu*tw, v.tv*th);
  75. }
  76. };