raSystem  1.0 bata
raGPUParticleSystem.cpp
Go to the documentation of this file.
1 #include "..\include\raMain.h"
2 
3 namespace System
4 {
6  LPCSTR ParticleTexture,
7  LPCSTR EffectFile,
8  LPCSTR Technique) : raVisual(dx, true, true)
9  {
10  raGPUParticleSystem(dx, new raTexturedMaterial(dx, EffectFile, Technique, ParticleTexture));
11  }
13  raVisual(dx, true, true)
14  {
15  this->m_bDepthDisable = true;
16  m_mat = ParticleMat;
17 
18  this->m_numMaterials = 1;
20  m_pMaterials[0] = ParticleMat;
21 
22  this->m_Particles.resize(MAXPARTICLES);
23  for(int i = 0; i < MAXPARTICLES; i++)
24  {
25  m_Particles[i].position = raVector3(raGetRandFloat(-10.0f, 10.0f),
26  raGetRandFloat(-10.0f, 10.0f), raGetRandFloat(-10.0f, 10.0f));
27  m_Particles[i].velocity = 2.0f * raVector3(raGetRandFloat(-1.0f, 1.0f),
28  raGetRandFloat(-1.0f, 1.0f), raGetRandFloat(-1.0f, 1.0f));
29 
30  for(int j = 0; j < 3; j++) m_Particles[i].color[j] =
31  raGetRandFloat(0.0f, 1.0f);
32  }
33 
34  m_pCS = new raCSIOBuffer(dx, "./raEffects\\ParticleGPU.hlsl", "CSCompute", (const raFloat*)&m_Particles[0],
35  sizeof(PARTICLEVERTEX) / 4 * MAXPARTICLES);
36  }
38  const raLight* pLight)
39  {
40  raVisual::SetupEffectVariables(pView, pProj, pLight);
41 
42  ID3DX11Effect* pEffect = m_pMaterials[0]->GetEffect();
43  ID3DX11EffectMatrixVariable* pmInvView_ParticleSystem = pEffect->
44  GetVariableByName("g_mInvView")->AsMatrix();
45 
46  raMatrix mInvView = raMatrixInvert(pView);
47  pmInvView_ParticleSystem->SetMatrix((float*)&mInvView);
48  }
49 
50  bool raGPUParticleSystem::RenderMesh(LPCSTR techniqueName)
51  {
52  m_pMaterials[0]->Setup();
53 
54  UINT Strides[1];
55  UINT Offsets[1];
56 
57  Strides[0] = GetStrideSize();
58  Offsets[0] = 0;
59 
60  ID3D11Buffer* aBuffers[1] = { m_pCS->GetBuffer() };
61  m_dx->GetImmediateContext()->IASetVertexBuffers(0, 1, aBuffers, Strides, Offsets);
62 
63  ID3DX11EffectTechnique* pTech =
65  HRESULT hr = pTech->GetPassByIndex(0)->Apply(0, m_dx->GetImmediateContext());
66 
67  if(FAILED(hr))
68  {
69  RERROR_DX11("ID3DX11EffectTechnique::GetPassByIndex::Apply", hr);
70  return false;
71  }
72 
73  m_dx->GetImmediateContext()->IASetPrimitiveTopology(this->GetPrimitiveTopology(0));
75 
76  ID3D11Buffer* ppVBNULL[1] = { 0 };
77  m_dx->GetImmediateContext()->IASetVertexBuffers(0, 1, ppVBNULL, Strides, Offsets);
78 
79  return true;
80  }
81 };
virtual UINT GetStrideSize()
Definition: raLight.h:5
ID3D11DeviceContext * GetImmediateContext(void)
Definition: raDirectX.h:31
virtual void SetupEffectVariables(const raMatrix &pView, const raMatrix &pProj, const raLight *pLight)
Definition: raVisual.cpp:117
interface ID3DX11EffectTechnique ID3DX11EffectTechnique
void RAPI RERROR_DX11(raString x, HRESULT h)
Definition: raMain.cpp:156
virtual D3D11_PRIMITIVE_TOPOLOGY GetPrimitiveTopology(UINT n)
float raFloat
Definition: raMain.h:106
virtual void Setup()
Definition: raMaterial.cpp:160
ID3D11Buffer * GetBuffer()
Definition: raCSIOBuffer.h:16
interface ID3DX11Effect ID3DX11Effect
raMaterial ** m_pMaterials
Definition: raVisual.h:97
bool m_bDepthDisable
Definition: raVisual.h:114
interface ID3DX11EffectMatrixVariable ID3DX11EffectMatrixVariable
Definition: d3dx11effect.h:279
std::vector< PARTICLEVERTEX > m_Particles
virtual bool RenderMesh(LPCSTR techniqueName="")
ID3DX11Effect * GetEffect(void)
Definition: raMaterial.h:30
raGPUParticleSystem(raDirectX *dx, LPCSTR ParticleTexture="raGrafik\articlered.bmp", LPCSTR EffectFile="raEffects\articleEffect.fx", LPCSTR Technique="RenderParticle")
RAPI float raGetRandFloat(float min, float max)
Definition: raUtility.cpp:195
virtual void SetupEffectVariables(const raMatrix &pView, const raMatrix &pProj, const raLight *pLight)
raSmartPointer< raDirectX > m_dx
Definition: raVisual.h:99
raString GetTechniqueName(void)
Definition: raMaterial.h:38
DWORD m_numMaterials
Definition: raVisual.h:96
ID3DX11EffectTechnique * GetEffectTechnique(LPCSTR techniqueName="")
Definition: raMaterial.h:31
RAPI raMatrix raMatrixInvert(const raMatrix &m)
Definition: raMatrix.cpp:122
static const int MAXPARTICLES