18
|
1 /*
|
|
2 * GuiImage
|
|
3 */
|
|
4
|
|
5 #include "GuiImage.h"
|
|
6 #include "VertexTypes.h"
|
|
7
|
|
8 /*
|
|
9 * GuiImage
|
|
10 */
|
|
11 GuiImage::GuiImage() : pEffect(NULL), pVertexBuffer(NULL), pTexture(NULL)
|
|
12 {
|
|
13 }
|
|
14
|
|
15 /*
|
|
16 * Initialize
|
|
17 */
|
|
18 ErrorCode GuiImage::Initialize(ResourceManager* pManager)
|
|
19 {
|
|
20 pResourceManager = pManager;
|
|
21
|
|
22 ErrorCode eCode = pResourceManager->CreateEffectFromFile("Data\\Shaders\\TexturedQuad.fx", &pEffect);
|
|
23 if(eCode == Error_Success)
|
|
24 {
|
|
25 eCode = pResourceManager->CreateVertexBuffer(6 * sizeof(Vertex::Quad), D3DUSAGE_WRITEONLY, D3DPOOL_MANAGED, &pVertexBuffer);
|
|
26 if(eCode == Error_Success)
|
|
27 {
|
|
28 eCode = SetupVertexBuffer();
|
|
29 }
|
|
30 }
|
|
31
|
|
32 return eCode;
|
|
33 }
|
|
34
|
|
35 /*
|
|
36 * Terminate
|
|
37 */
|
|
38 void GuiImage::Terminate()
|
|
39 {
|
|
40 if(pTexture)
|
|
41 {
|
|
42 pTexture->Release();
|
|
43 pTexture = NULL;
|
|
44 }
|
|
45
|
|
46 if(pVertexBuffer)
|
|
47 {
|
|
48 pVertexBuffer->Release();
|
|
49 pVertexBuffer = NULL;
|
|
50 }
|
|
51
|
|
52 if(pEffect)
|
|
53 {
|
|
54 pEffect->Release();
|
|
55 pEffect = NULL;
|
|
56 }
|
|
57 }
|
|
58
|
|
59 /*
|
|
60 * Update
|
|
61 */
|
|
62 void GuiImage::Update(float fElapsed)
|
|
63 {
|
|
64 }
|
|
65
|
|
66 /*
|
|
67 * Render
|
|
68 */
|
|
69 void GuiImage::Render(RenderContext& kContext, Camera& kCamera)
|
|
70 {
|
|
71 if(pTexture)
|
|
72 {
|
|
73 uint32 nPasses = 0;
|
|
74
|
|
75 const float fOffsetX = -0.5f * ScreenSizeX;
|
|
76 const float fOffsetY = +0.5f * ScreenSizeY;
|
|
77
|
|
78 const D3DXVECTOR4 kColorVector(1.0f, 1.0f, 1.0f, 1.0f);
|
|
79
|
|
80 kContext.ApplyCameraToEffect(kCamera, pEffect);
|
|
81
|
|
82 pEffect->SetTechnique(pEffect->GetTechnique(0));
|
|
83 pEffect->Begin(&nPasses, 0);
|
|
84 pEffect->BeginPass(0);
|
|
85
|
|
86 D3DXMATRIX kScale;
|
|
87 D3DXMatrixScaling(&kScale, kDimensions.x, kDimensions.y, 1.0f);
|
|
88
|
|
89 D3DXMATRIX kTranslate;
|
|
90 D3DXMatrixTranslation(&kTranslate, fOffsetX + kPosition.x + 0.5f, fOffsetY - kPosition.y + 0.5f, 0.0f);
|
|
91
|
|
92 D3DXMATRIX kWorldMatrix;
|
|
93 D3DXMatrixMultiply(&kWorldMatrix, &kScale, &kTranslate);
|
|
94
|
|
95 pEffect->SetMatrix(pEffect->GetParameterByName(NULL, "kWorld"), &kWorldMatrix);
|
|
96 pEffect->SetVector(pEffect->GetParameterByName(NULL, "kColor"), &kColorVector);
|
|
97 pEffect->SetTexture(pEffect->GetParameterByName(NULL, "kTexture"), pTexture);
|
|
98 pEffect->CommitChanges();
|
|
99
|
|
100 kContext.DrawTriangles(Vertex::Quad::Declaration, pVertexBuffer, sizeof(Vertex::Quad), TrianglesPerFace);
|
|
101
|
|
102 pEffect->EndPass();
|
|
103 pEffect->End();
|
|
104 }
|
|
105 }
|
|
106
|
|
107 /*
|
|
108 * SetTexture
|
|
109 */
|
|
110 ErrorCode GuiImage::SetTexture(const char* pName)
|
|
111 {
|
|
112 if(pTexture)
|
|
113 {
|
|
114 pTexture->Release();
|
|
115 pTexture = NULL;
|
|
116 }
|
|
117
|
|
118 return pResourceManager->CreateTextureFromFile(pName, &pTexture);
|
|
119 }
|
|
120
|
|
121 /*
|
|
122 * SetupVertexBuffer
|
|
123 */
|
|
124 ErrorCode GuiImage::SetupVertexBuffer()
|
|
125 {
|
|
126 Vertex::Quad* pVertices = NULL;
|
|
127
|
|
128 HRESULT hResult = pVertexBuffer->Lock(0, 0, (void**)&pVertices, D3DLOCK_DISCARD);
|
|
129 if(FAILED(hResult))
|
|
130 {
|
|
131 return Error_Fail;
|
|
132 }
|
|
133
|
|
134 pVertices[0] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f);
|
|
135 pVertices[1] = Vertex::Quad(+0.0f, +0.0f, 1.0f, 0.0f, 0.0f);
|
|
136 pVertices[2] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f);
|
|
137 pVertices[3] = Vertex::Quad(+0.0f, -1.0f, 1.0f, 0.0f, 1.0f);
|
|
138 pVertices[4] = Vertex::Quad(+1.0f, +0.0f, 1.0f, 1.0f, 0.0f);
|
|
139 pVertices[5] = Vertex::Quad(+1.0f, -1.0f, 1.0f, 1.0f, 1.0f);
|
|
140
|
|
141 pVertexBuffer->Unlock();
|
|
142
|
|
143 return Error_Success;
|
|
144 }
|