CTexture2DSharedPtr LoadFromDisk(const path &path)const { SDLSurfacePtr pSurface = LoadFileImage(path); const bool hasAlpha = SDL_ISPIXELFORMAT_ALPHA(pSurface->format->format); // Все изображения будем конвертировать в RGB или RGBA, // в зависимости от наличия альфа-канала в исходном изображении. const uint32_t requiredFormat = hasAlpha ? SDL_PIXELFORMAT_ABGR8888 : SDL_PIXELFORMAT_RGB24; if (pSurface->format->format != requiredFormat) { pSurface.reset(SDL_ConvertSurfaceFormat(pSurface.get(), requiredFormat, 0)); } // В системе координат OpenGL отсчёт идёт с нижней левой точки, // а не с верхней левой, поэтому переворачиваем изображение. CUtils::FlipSurfaceVertically(*pSurface); auto pTexture = std::make_shared<CTexture2D>(); pTexture->Bind(); pTexture->ApplyImageData(*pSurface); pTexture->ApplyTrilinearFilter(); pTexture->ApplyMaxAnisotropy(); pTexture->ApplyWrapMode(m_wrapS, m_wrapT); pTexture->GenerateMipmaps(); pTexture->Unbind(); return pTexture; }