My Project
PaintEngineGPU.h
1 #pragma once
2 #include "ParaRegion.h"
3 #include "qtransform.h"
4 #include "PaintEngine.h"
5 #include "SpriteRenderer.h"
6 #include "PaintEngineGPUState.h"
7 
8 namespace ParaEngine
9 {
10  class CPaintDevice;
11  class CPaintEngineState;
12  class CFontEngine;
13  class CPainter;
14  class QLineF;
15  class QLine;
16  class CPainterPath;
17  class CPainterState;
18  class CPolygonF;
19  struct TextureEntity;
20  class CTextItem;
21 
24  class CPaintEngineGPU : public CPaintEngine, public boost::signals2::trackable
25  {
26  public:
28  virtual ~CPaintEngineGPU();
29 
30  static CPaintEngineGPU* GetInstance();
31  static void DestroyInstance();
32 
33  void Cleanup();
34  void InitDeviceObjects(); // device independent
35  void RestoreDeviceObjects(); // device dependent
36  void InvalidateDeviceObjects();
37  void DeleteDeviceObjects();
38 
39  void Init();
40  public:
41 
42  virtual bool begin(CPaintDevice *pdev);
43  virtual bool end();
44 
46  virtual void Flush();
47 
48  virtual CPainterState *createState(CPainterState *orig) const;
49  virtual void updateState(const CPaintEngineState &state);
50  virtual void setState(CPainterState *s);
52  virtual void ApplyStateChanges();
53 
54  CPaintEngineGPUState *GetState();
55  const CPaintEngineGPUState *GetState() const;
56 
57  virtual void drawPixmap(const QRectF &r, const TextureEntity &pm, const QRectF &sr);
58 
59 
62 
63  virtual bool IsScissorRectSupported() const;;
64  virtual bool IsStencilSupported() const;;
65  virtual void clip(const QRect & rect, ClipOperation op = ReplaceClip);
66 
70  virtual void SetUse3DTransform(bool bUse3DSpaceTransform);
71 
73  virtual bool IsUse3DTransform();
74 
75  virtual void drawLines(const QLine *lines, int lineCount);
76  virtual void drawLines(const QLineF *lines, int lineCount);
77  virtual void drawLines(const Vector3 *vertices, int lineCount);
78 
79  virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
80  virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);
81 
82  virtual void drawTriangles(const Vector3* vertices, int nTriangleCount);
83  public:
85  // following is for backward compatibility with old GUIResource API.
87  virtual HRESULT DrawRect(const RECT* rect, Color color, float depth);
88 
89  virtual HRESULT DrawQuad(TextureEntity* pTexture, const RECT* pSrcRect, const Vector3* vCenter, const Vector3* pPosition, Color c);
90 
91  virtual HRESULT drawText(SpriteFontEntity* pFont, const char* strText, int nCount, RECT* rect, DWORD dwTextFormat, DWORD textColor);
92  virtual HRESULT drawText(SpriteFontEntity* pFont, const char16_t* strText, int nCount, RECT* rect, DWORD dwTextFormat, DWORD textColor);;
93 
94  private:
95  virtual void transformChanged();
96 
97  void SetMatrixDirty();
98 
99  virtual void penChanged();
100  virtual void brushChanged();
101  virtual void brushOriginChanged();
102  virtual void opacityChanged();
103  virtual void clipEnabledChanged();
104  virtual void transformModeChanged();
105  virtual void compositionModeChanged();
106 
107  void RenderMask(const RECT& rcWindow);
108  void ApplyCompositionMode(CPainter::CompositionMode mode);
109  void regenerateClip();
110  void systemStateChanged();
111  void updateClipScissorTest();
112  float AdjustLineWidth(float fLineThickness, const Vector3& vPos);
114  float GetPixelWidthAtPos(const Vector3& vPos);
117  const Matrix4& GetWorldViewProjectMatrix();
120  const Matrix4& GetWorldViewMatrix();
121  const Vector3& GetWorldScaling();
122  void UpdateWorldViewParams();
123  protected:
124  friend class CPainter;
125 
126 #ifdef USE_DIRECTX_RENDERER
127  // shared state block
128  IDirect3DStateBlock9* m_pStateBlock;
129 #endif
130  // shared drawing sprite, for drawing all gui elements
131  CSpriteRenderer* m_pSprite;
132  bool m_bInitialized;
133  static bool s_IsScissorRectSupported;
134  static bool s_IsStencilSupported;
135  bool m_bUse3DTransform;
136 
137 
138  // Dirty flags
139  bool m_compositionModeDirty;
140  bool m_matrixDirty;
141  bool m_worldViewProjectMatDirty;
142  bool m_worldViewMatDirty;
143  Matrix4 m_matWorldViewProject;
144  Matrix4 m_matWorldView;
145  Vector3 m_vWorldScaling;
146  };
147 
148 
149 }
150 
Which DXT Compression to Use? Obviously, there are some trade-offs between the different formats whic...
Definition: TextureEntity.h:29
opengl/directX renderer
Definition: PaintEngineGPU.h:24
Definition: ParaPoint.h:203
different physics engine has different winding order.
Definition: EventBinding.h:32
Definition: ManagedDef.h:18
Definition: ParaLine.h:151
Definition: ParaRect.h:517
virtual void Flush()
flush sprite
Definition: PaintEngineGPU.cpp:230
when concerting QRect with QRectF and RECT, we ensure that their left, top and width, height are the same.
Definition: ParaRect.h:16
Standard 3-dimensional vector.
Definition: ParaVector3.h:16
Definition: ParaLine.h:6
Definition: PainterState.h:25
CSpriteRenderer * GetSprite()
get the global sprite object used to draw texture and images
Definition: PaintEngineGPU.cpp:199
virtual bool IsUse3DTransform()
return false by default.
Definition: PaintEngineGPU.cpp:404
base class for a surface to paint to.
Definition: Painter.h:38
Class encapsulating a standard 4x4 homogeneous matrix.
Definition: ParaMatrix4.h:23
Definition: ParaPoint.h:5
The CPaintEngine class provides an abstract definition of how CPainter draws to a given device on a g...
Definition: PaintEngine.h:34
virtual void SetUse3DTransform(bool bUse3DSpaceTransform)
by default, transforms are in 2d screen space.
Definition: PaintEngineGPU.cpp:399
base class for a surface to paint to.
Definition: PaintDevice.h:10
painter state, such as selected pen, brush, etc.
Definition: PaintEngine.h:178
Definition: ParaColor.h:275
virtual void ApplyStateChanges()
apply transform and blending mode, etc before drawing.
Definition: PaintEngineGPU.cpp:235
Definition: PaintEngineGPUState.h:6
base class for sprite renderer
Definition: SpriteRenderer.h:55
Definition: SpriteFontEntity.h:26