//------------------------------------------------------------------------------- int CMaterialManager::SetDefaultTexture(TextureID* p_ppiOut) { Image3 img; img.create( FORMAT_RGBA8,//??? 256, 256,1,1); *p_ppiOut=IRenderer::GetRendererInstance()->addTexture( &img, false, IRenderer::GetRendererInstance()->Getlinear() ,STATIC); return 1; }
//------------------------------------------------------------------------------- int CMaterialManager::LoadTexture(TextureID* p_ppiOut,aiString* szPath) { //???ai_assert(-1 != *p_ppiOut); ai_assert(0 != szPath); *p_ppiOut = -1; #if 1 LOG_PRINT("szPath=%s\n", szPath); // first get a valid path to the texture if( 5 == FindValidPath(szPath)) { // embedded file. Find its index unsigned int iIndex = atoi(szPath->data+1); if (iIndex < mr->GetAsset()->pcScene->mNumTextures) { /* if (0 == mr->GetAsset()->pcScene->mTextures[iIndex]->mHeight) { // it is an embedded file ... don't need the file format hint, // simply let D3DXFROMWINE load the file if (FAILED(D3DXFROMWINECreateTextureFromFileInMemoryEx(mr->m_piDevice, mr->GetAsset()->pcScene->mTextures[iIndex]->pcData, mr->GetAsset()->pcScene->mTextures[iIndex]->mWidth, D3DXFROMWINE_DEFAULT, D3DXFROMWINE_DEFAULT, 0, D3DUSAGE_AUTOGENMIPMAP, D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DXFROMWINE_DEFAULT, D3DXFROMWINE_DEFAULT, 0, 0, 0, p_ppiOut))) { std::string sz = "[ERROR] Unable to load embedded texture (#1): "; sz.append(szPath->data); //CLogDisplay::Instance().AddEntry(sz,D3DCOLOR_ARGB(0xFF,0xFF,0x0,0x0)); this->SetDefaultTexture(p_ppiOut); return 1; } } else*/ { // fill a new texture ... Image3 img; BYTE* dst=img.create( FORMAT_RGBA8,//??? mr->GetAsset()->pcScene->mTextures[iIndex]->mWidth, mr->GetAsset()->pcScene->mTextures[iIndex]->mHeight,1,1); //BYTE* dst=img.getPixels(); // now copy the data to it ... (assume non pow2 to be supported) //D3DLOCKED_RECT sLock; // sLock.pBits=IRenderer::GetRendererInstance()->LockTexture(*p_ppiOut, 0, sLock.Pitch); const aiTexel* pcData = mr->GetAsset()->pcScene->mTextures[iIndex]->pcData; for (unsigned int y = 0; y < mr->GetAsset()->pcScene->mTextures[iIndex]->mHeight;++y) { stx_memcpy(dst,pcData,mr->GetAsset()->pcScene->mTextures[iIndex]-> mWidth *sizeof(aiTexel)); dst = (BYTE *)dst + 4*mr->GetAsset()->pcScene->mTextures[iIndex]->mWidth; pcData += mr->GetAsset()->pcScene->mTextures[iIndex]->mWidth; } // IRenderer::GetRendererInstance()->UnlockTexture(*p_ppiOut, 0); // (*p_ppiOut)->GenerateMipSubLevels(); *p_ppiOut=IRenderer::GetRendererInstance()->addTexture( &img, false, IRenderer::GetRendererInstance()->Getlinear() ,STATIC); } return 1; } else { std::string sz = "[ERROR] Invalid index for embedded texture: "; sz.append(szPath->data); //CLogDisplay::Instance().AddEntry(sz,D3DCOLOR_ARGB(0xFF,0xFF,0x0,0x0)); SetDefaultTexture(p_ppiOut); return 1; } } ////LOG_PRINT("mr->m_piDevice=%x\n", mr->m_piDevice); //DBG_HALT; // then call D3DXFROMWINE to load the texture //D3DFMT_A8R8G8B8, #endif std::string f1=szPath->data; LOG_FNLN; LOG_PRINT("Assimp Mesh Texture:%s\n", f1.c_str()); #if 1 *p_ppiOut=//IRenderer::GetRendererInstance()-> IRenderer::GetRendererInstance()->addImageLibTexture( f1.c_str(), false, IRenderer::GetRendererInstance()->Getlinear() ,STATIC ); #else Image3 img; if (img.loadImageLibImage(szPath->data, false)) { img.createMipMaps(); *p_ppiOut=IRenderer::GetRendererInstance()->addTexture(&img,false, IRenderer::GetRendererInstance()->Getlinear(),STATIC,0.0f,false); } #endif return 1; }