CProgressiveGeometry *CMesh::BuildProgressiveGeometry(int iMaterial, UINT uiNoReorderVertexCount, UINT uiMaxCollapses) { CProgressiveGeometry *pProgGeom = new CProgressiveGeometry(); CArray<uint8_t> arrUsedVertices; if (uiNoReorderVertexCount > (UINT) (m_arrCollapses.m_iCount + m_hashVertices.m_iCount)) uiNoReorderVertexCount = m_arrCollapses.m_iCount + m_hashVertices.m_iCount; if (!m_arrReverseReorder.m_iCount) BuildReverseReorder(uiNoReorderVertexCount); pProgGeom->m_pInputDesc = m_pOrgGeom->m_pInputDesc; if (!m_pVB) m_pVB = BuildVB(uiNoReorderVertexCount); pProgGeom->m_pVB = m_pVB; pProgGeom->m_pIB = BuildIB(iMaterial, arrUsedVertices); pProgGeom->m_ePrimitiveType = CGeometry::PT_TRIANGLELIST; pProgGeom->m_uiVertices = pProgGeom->GetVBVertexCount(); pProgGeom->m_uiIndices = pProgGeom->GetIBIndexCount(); if (m_pOrgGeom->m_pBound) pProgGeom->m_pBound = m_pOrgGeom->m_pBound->Clone(); BuildCollapseBuffer(uiNoReorderVertexCount || iMaterial >= 0, uiMaxCollapses, arrUsedVertices, pProgGeom); return pProgGeom; }
void ParticleSystem::init(ID3D11Device* device, ParticleEffect* fx, ID3D11ShaderResourceView* texArraySRV, ID3D11ShaderResourceView* randomTexSRV, UINT maxParticles) { mMaxParticles = maxParticles; mFX = fx; mTexArraySRV = texArraySRV; mRandomTexSRV = randomTexSRV; BuildVB(device); }
void ParticleSystem::Init( HlslEffect effect, Texture dataTexture, size_t maxParticles ) { mFX = effect; mTexure = dataTexture; mMaxParticles = maxParticles; mRandomTex = Texture::createRandom1D(); const D3D11_INPUT_ELEMENT_DESC elements[5] = { {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"VELOCITY", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"SIZE", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"AGE", 0, DXGI_FORMAT_R32_FLOAT, 0, 32, D3D11_INPUT_PER_VERTEX_DATA, 0}, {"TYPE", 0, DXGI_FORMAT_R32_UINT, 0, 36, D3D11_INPUT_PER_VERTEX_DATA, 0}, }; HR(mFX.createInputLayout(elements, ARRAYSIZE(elements), &mInputLayout)); BuildVB(); }