void JRenderServer::RecreateDefaultRes() { m_pDevice->ResourceManagerDiscardBytes( 0 ); m_pDevice->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &m_pBackBuffer ); m_pDevice->GetDepthStencilSurface( &m_pDepthStencil ); for (int i = 0; i < m_VBuffers.size(); i++) { VBInstance& vb = m_VBuffers[i]; CreateVB( vb.m_Name.c_str(), vb.m_Size, !vb.m_bDynamic ); } for (int i = 0; i < m_IBuffers.size(); i++) { IBInstance& ib = m_IBuffers[i]; CreateIB( ib.m_Name.c_str(), ib.m_Size, !ib.m_bDynamic ); } for (int i = 0; i < m_Textures.size(); i++) { TextureFile& tex = m_Textures[i]; if (tex.m_Prop.m_PoolType == PoolType_Video) { CreateTexture( tex.m_Prop ); } } CreateQuadIB(); } // JRenderServer::RecreateDefaultRes
VOID CameraWorkBase::CreateImage( LPIMAGE _pImage, LPINFO _pInfo ) { // Vertex는 외부에서 받아온다 if( _pImage->pVB == NULL && _pImage->pIB == NULL ) { // 처음 만들거나 iNumVertices정보가 변경되었을때 // Create VertexBuffer _pImage->iNumVertices = _pInfo->iNumVertices; CreateVB( &_pImage->pVB, _pImage->iNumVertices, sizeof( VERTEX ), VERTEX::FVF ); SetVB( _pImage->pVB, _pInfo->pVertex, _pImage->iNumVertices, sizeof( VERTEX ) ); // Create IndexBuffer _pImage->iNumIndices = _pInfo->iNumIndices; CreateIB( &_pImage->pIB, _pImage->iNumIndices, sizeof( INDEX ) ); SetIB( _pImage->pIB, _pInfo->pIndex, _pImage->iNumIndices, sizeof( INDEX) ); return; } LPVOID pVertices; if( FAILED( _pImage->pVB->Lock( 0, sizeof( VERTEX ) * _pInfo->iNumVertices, (LPVOID*)&pVertices, 0 ) ) ) { MessageBox( NULL, L"CreateImage_Course(){ ... pVB->Lock failed ... }", NULL, MB_OK ); return; } memcpy( pVertices, _pInfo->pVertex, sizeof( VERTEX ) * _pInfo->iNumVertices ); _pImage->pVB->Unlock(); }
void CAMeshSHSkin::MakeVIB (const CAModelVIB& modelVIB) { m_dwFVF = CAVertex::FVF; m_nNumVertices = (int)modelVIB.m_listVertex.size (); m_nNumTriangles = (int)modelVIB.m_listIndex.size (); CreateVB (modelVIB); CreateIB (modelVIB); }
VOID CameraWorkBase::CreateImage_Box( LPIMAGE _pImage ) { INT iNumVertices = 8; INT iNumIndices = 12; _pImage->iNumVertices = iNumVertices; _pImage->iNumIndices = iNumIndices; // Init Vertex VERTEX aVertex[ 8 ]; aVertex[ 0 ].vecPos = D3DXVECTOR3( -1.0f, 1.0f, -1.0f ); aVertex[ 1 ].vecPos = D3DXVECTOR3( 1.0f, 1.0f, -1.0f ); aVertex[ 2 ].vecPos = D3DXVECTOR3( -1.0f, 1.0f, 1.0f ); aVertex[ 3 ].vecPos = D3DXVECTOR3( 1.0f, 1.0f, 1.0f ); aVertex[ 4 ].vecPos = D3DXVECTOR3( -1.0f, -1.0f, -1.0f ); aVertex[ 5 ].vecPos = D3DXVECTOR3( 1.0f, -1.0f, -1.0f ); aVertex[ 6 ].vecPos = D3DXVECTOR3( -1.0f, -1.0f, 1.0f ); aVertex[ 7 ].vecPos = D3DXVECTOR3( 1.0f, -1.0f, 1.0f ); aVertex[ 0 ].dColor = m_dColBox; aVertex[ 1 ].dColor = m_dColBox; aVertex[ 2 ].dColor = m_dColBox; aVertex[ 3 ].dColor = m_dColBox; aVertex[ 4 ].dColor = m_dColBox; aVertex[ 5 ].dColor = m_dColBox; aVertex[ 6 ].dColor = m_dColBox; aVertex[ 7 ].dColor = m_dColBox; // Init Index INDEX aIndex[ 12 ]; aIndex[ 0 ]._0 = 0; aIndex[ 0 ]._1 = 1; aIndex[ 1 ]._0 = 0; aIndex[ 1 ]._1 = 2; aIndex[ 2 ]._0 = 2; aIndex[ 2 ]._1 = 3; aIndex[ 3 ]._0 = 3; aIndex[ 3 ]._1 = 1; aIndex[ 4 ]._0 = 0; aIndex[ 4 ]._1 = 4; aIndex[ 5 ]._0 = 1; aIndex[ 5 ]._1 = 5; aIndex[ 6 ]._0 = 2; aIndex[ 6 ]._1 = 6; aIndex[ 7 ]._0 = 3; aIndex[ 7 ]._1 = 7; aIndex[ 8 ]._0 = 4; aIndex[ 8 ]._1 = 5; aIndex[ 9 ]._0 = 5; aIndex[ 9 ]._1 = 7; aIndex[ 10 ]._0 = 6; aIndex[ 10 ]._1 = 7; aIndex[ 11 ]._0 = 6; aIndex[ 11 ]._1 = 4; // Init VertexBuffer, IndexBuffer CreateVB( &_pImage->pVB, iNumVertices, sizeof( VERTEX ), VERTEX::FVF ); SetVB( _pImage->pVB, aVertex, iNumVertices, sizeof( VERTEX ) ); CreateIB( &_pImage->pIB, iNumIndices, sizeof( INDEX ) ); SetIB( _pImage->pIB, aIndex, iNumIndices, sizeof( INDEX) ); }
CTile::CTile(LPDIRECT3DDEVICE9 _device, float _x, float _z) { D3DXMatrixIdentity(&m_matWorld); m_pTex = NULL; m_pIB = NULL; m_pVB = NULL; _b = false; ZeroMemory(&m_matrl, sizeof(D3DMATERIAL9)); CreateVB(_device, _x, _z); CreateIB(_device); }
void JRenderServer::CreateQuadIB() { // create quad index buffer m_QuadIB = CreateIB( "QuadIndexBuffer", c_QuadIBSize, true ); WORD* pQuadIdx = (WORD*)LockIB( m_QuadIB, 0, c_QuadIBSize ); if (!pQuadIdx) { rlog.err( "JRenderServer: Could not create internal quad index buffer." ); return; } int curV = 0; for (int i = 0; i < c_QuadIBSize/2; i += 6) { pQuadIdx[i ] = curV; pQuadIdx[i + 1] = curV + 1; pQuadIdx[i + 2] = curV + 2; pQuadIdx[i + 3] = curV + 2; pQuadIdx[i + 4] = curV + 1; pQuadIdx[i + 5] = curV + 3; curV += 4; } UnlockIB( m_QuadIB ); } // JRenderServer::CreateQuadIB
HRESULT CShadowCell::Create( LPDIRECT3DDEVICE9 a_pD3dDevice, FLOAT a_Vertex11, FLOAT a_Vertex12, FLOAT a_Vertex13, FLOAT a_Vertex21, FLOAT a_Vertex22, FLOAT a_Vertex23, FLOAT a_Vertex31, FLOAT a_Vertex32, FLOAT a_Vertex33, FLOAT a_Vertex41, FLOAT a_Vertex42, FLOAT a_Vertex43, FLOAT a_Uv11, FLOAT a_Uv12, FLOAT a_Uv21, FLOAT a_Uv22, FLOAT a_Uv31, FLOAT a_Uv32, FLOAT a_Uv41, FLOAT a_Uv42, LPCWSTR a_FileName ) { m_pD3dDevice = a_pD3dDevice; if( S_OK != CreateVB( a_Vertex11, a_Vertex12, a_Vertex13, a_Vertex21, a_Vertex22, a_Vertex23, a_Vertex31, a_Vertex32, a_Vertex33, a_Vertex41, a_Vertex42, a_Vertex43, a_Uv11, a_Uv12, a_Uv21, a_Uv22, a_Uv31, a_Uv32, a_Uv41, a_Uv42 ) ) { return E_FAIL; } if( S_OK != CreateIB() ) { return E_FAIL; } if( S_OK != LoadTexture( a_FileName ) ) { return E_FAIL; } return S_OK; }
void SkyBox::build() { _Assert(NUM_VERTICES == 24); _Assert(NUM_TRIES == 12); Vector3* pos = New Vector3[24]; pos[0] = DIST * Vector3(-1.0f, 1.0f, 1.0f); pos[1] = DIST * Vector3( 1.0f, 1.0f, 1.0f); pos[2] = DIST * Vector3(-1.0f, 1.0f, -1.0f); pos[3] = DIST * Vector3( 1.0f, 1.0f, -1.0f); pos[4] = DIST * Vector3( 1.0f, -1.0f, 1.0f); pos[5] = DIST * Vector3(-1.0f, -1.0f, 1.0f); pos[6] = DIST * Vector3( 1.0f, -1.0f, -1.0f); pos[7] = DIST * Vector3(-1.0f, -1.0f, -1.0f); pos[8] = DIST * Vector3( 1.0f, 1.0f, 1.0f); pos[9] = DIST * Vector3(-1.0f, 1.0f, 1.0f); pos[10] = DIST * Vector3( 1.0f, -1.0f, 1.0f); pos[11] = DIST * Vector3(-1.0f, -1.0f, 1.0f); pos[12] = DIST * Vector3(-1.0f, 1.0f, -1.0f); pos[13] = DIST * Vector3( 1.0f, 1.0f, -1.0f); pos[14] = DIST * Vector3(-1.0f, -1.0f, -1.0f); pos[15] = DIST * Vector3( 1.0f, -1.0f, -1.0f); pos[16] = DIST * Vector3(-1.0f, 1.0f, 1.0f); pos[17] = DIST * Vector3(-1.0f, 1.0f, -1.0f); pos[18] = DIST * Vector3(-1.0f, -1.0f, 1.0f); pos[19] = DIST * Vector3(-1.0f, -1.0f, -1.0f); pos[20] = DIST * Vector3( 1.0f, 1.0f, -1.0f); pos[21] = DIST * Vector3( 1.0f, 1.0f, 1.0f); pos[22] = DIST * Vector3( 1.0f, -1.0f, -1.0f); pos[23] = DIST * Vector3( 1.0f, -1.0f, 1.0f); Vector2 *uv = New Vector2[24]; uv[0] = Vector2(0, 0); uv[1] = Vector2(1, 0); uv[2] = Vector2(0, 1); uv[3] = Vector2(1, 1); uv[4] = Vector2(0, 0); uv[5] = Vector2(1, 0); uv[6] = Vector2(0, 1); uv[7] = Vector2(1, 1); uv[8] = Vector2(0, 0); uv[9] = Vector2(1, 0); uv[10] = Vector2(0, 1); uv[11] = Vector2(1, 1); uv[12] = Vector2(0, 0); uv[13] = Vector2(1, 0); uv[14] = Vector2(0, 1); uv[15] = Vector2(1, 1); uv[16] = Vector2(0, 0); uv[17] = Vector2(1, 0); uv[18] = Vector2(0, 1); uv[19] = Vector2(1, 1); uv[20] = Vector2(0, 0); uv[21] = Vector2(1, 0); uv[22] = Vector2(0, 1); uv[23] = Vector2(1, 1); DWORD* indices = New DWORD[36]; for(int i = 0; i < 6; i++) { indices[6*i + 0] = 4*i; indices[6*i + 1] = 4*i + 2; indices[6*i + 2] = 4*i + 1; indices[6*i + 3] = 4*i + 2; indices[6*i + 4] = 4*i + 3; indices[6*i + 5] = 4*i + 1; } void* vertexData = New VertexUV[NUM_VERTICES]; for(int i = 0; i < NUM_VERTICES; ++i) { VertexUV vert = VertexUV(pos[i].x, pos[i].y, pos[i].z, uv[i].x, uv[i].y); ((VertexUV*)vertexData)[i] = vert; } CreateVB(gEngine->GetDriver()->GetD3DDevice(), &mVertexBuffer, vertexData, NUM_VERTICES, XYZ_UV); CreateIB(gEngine->GetDriver()->GetD3DDevice(), &mIndexBuffer, indices, 3 * NUM_TRIES); delete[] pos; delete[] uv; delete[] indices; delete[] vertexData; }
void Mesh::CreateIndexBuffer(int nIndices) { CreateIB(D3DDevice, &indexBuffer, indexData, nIndices); }