void STKMeshSceneNode::updateNoGL() { Box = Mesh->getBoundingBox(); if (!isMaterialInitialized) { irr::video::IVideoDriver* driver = irr_driver->getVideoDriver(); for (u32 i = 0; i < Mesh->getMeshBufferCount(); ++i) { scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i); if (!mb) continue; video::E_MATERIAL_TYPE type = mb->getMaterial().MaterialType; f32 MaterialTypeParam = mb->getMaterial().MaterialTypeParam; video::IMaterialRenderer* rnd = driver->getMaterialRenderer(type); if (!isObject(type)) { #ifdef DEBUG Log::warn("material", "Unhandled (static) material type : %d", type); #endif continue; } GLMesh &mesh = GLmeshes[i]; Material* material = material_manager->getMaterialFor(mb->getMaterial().getTexture(0), mb); if (rnd->isTransparent()) { TransparentMaterial TranspMat = MaterialTypeToTransparentMaterial(type, MaterialTypeParam, material); if (!immediate_draw) TransparentMesh[TranspMat].push_back(&mesh); } else { assert(!isDisplacement); Material* material2 = NULL; if (mb->getMaterial().getTexture(1) != NULL) material2 = material_manager->getMaterialFor(mb->getMaterial().getTexture(1), mb); Material::ShaderType MatType = MaterialTypeToMeshMaterial(type, mb->getVertexType(), material, material2); if (!immediate_draw) MeshSolidMaterial[MatType].push_back(&mesh); } } isMaterialInitialized = true; } for (u32 i = 0; i < Mesh->getMeshBufferCount(); ++i) { scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i); if (!mb) continue; GLmeshes[i].TextureMatrix = getMaterial(i).getTextureMatrix(0); } }
void STKMeshSceneNode::setFirstTimeMaterial() { if (isMaterialInitialized) return; irr::video::IVideoDriver* driver = irr_driver->getVideoDriver(); for (u32 i = 0; i<Mesh->getMeshBufferCount(); ++i) { scene::IMeshBuffer* mb = Mesh->getMeshBuffer(i); if (!mb) continue; video::E_MATERIAL_TYPE type = mb->getMaterial().MaterialType; video::IMaterialRenderer* rnd = driver->getMaterialRenderer(type); if (!isObject(type)) { #ifdef DEBUG Log::warn("material", "Unhandled (static) material type : %d", type); #endif continue; } GLMesh &mesh = GLmeshes[i]; if (rnd->isTransparent()) { TransparentMaterial TranspMat = MaterialTypeToTransparentMaterial(type); initvaostate(mesh, TranspMat); TransparentMesh[TranspMat].push_back(&mesh); } else { GeometricMaterial GeometricType = MaterialTypeToGeometricMaterial(type); ShadedMaterial ShadedType = MaterialTypeToShadedMaterial(type, mesh.textures); initvaostate(mesh, GeometricType, ShadedType); GeometricMesh[GeometricType].push_back(&mesh); ShadedMesh[ShadedType].push_back(&mesh); } } isMaterialInitialized = true; }