lrGLTextureCubemapView lrGLResourceLoader::GetCubemap(const std::string &resource_id) { auto I = Cubemaps.find(resource_id); if(I == Cubemaps.end()) { liCubemap *LoadedCubemap = LoadCubemap(resource_id); lrGLTextureResource *TextureResource = &Cubemaps[resource_id]; lrGLTextureCubemapView CubemapView(TextureResource); if(LoadedCubemap != nullptr) { const void *CubemapData[6] = {nullptr,nullptr,nullptr,nullptr,nullptr,nullptr}; CubemapData[GL_TEXTURE_CUBE_MAP_POSITIVE_Y - GL_TEXTURE_CUBE_MAP_POSITIVE_X] = (void *)LoadedCubemap->GetSide(liCubemap::LI_CUBEMAP_UP).GetPixelArray(); CubemapData[GL_TEXTURE_CUBE_MAP_NEGATIVE_Y - GL_TEXTURE_CUBE_MAP_POSITIVE_X] = (void *)LoadedCubemap->GetSide(liCubemap::LI_CUBEMAP_DOWN).GetPixelArray(); CubemapData[GL_TEXTURE_CUBE_MAP_NEGATIVE_X - GL_TEXTURE_CUBE_MAP_POSITIVE_X] = (void *)LoadedCubemap->GetSide(liCubemap::LI_CUBEMAP_LEFT).GetPixelArray(); CubemapData[GL_TEXTURE_CUBE_MAP_POSITIVE_X - GL_TEXTURE_CUBE_MAP_POSITIVE_X] = (void *)LoadedCubemap->GetSide(liCubemap::LI_CUBEMAP_RIGHT).GetPixelArray(); CubemapData[GL_TEXTURE_CUBE_MAP_NEGATIVE_Z - GL_TEXTURE_CUBE_MAP_POSITIVE_X] = (void *)LoadedCubemap->GetSide(liCubemap::LI_CUBEMAP_FRONT).GetPixelArray(); CubemapData[GL_TEXTURE_CUBE_MAP_POSITIVE_Z - GL_TEXTURE_CUBE_MAP_POSITIVE_X] = (void *)LoadedCubemap->GetSide(liCubemap::LI_CUBEMAP_BACK).GetPixelArray(); TextureResource->Initialize(); CubemapView.Fill(LoadedCubemap->GetSize(),CubemapData); } return CubemapView; } return lrGLTextureCubemapView(&I->second); }
//---------------------------------------------------------------------------- //---------------------------------------------------------------------------- void CubemapProvider::CreateResourceFromFile(Core::StorageLocation in_location, const std::string& in_filePath, const Core::IResourceOptionsBaseCSPtr& in_options, const Core::ResourceSPtr& out_resource) { LoadCubemap(in_location, in_filePath, in_options, nullptr, out_resource); }