annotate LightClone/Source/GuiImage.cpp @ 18:33cb6979ac51

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