diff --git a/components/sdlutil/sdlcursormanager.cpp b/components/sdlutil/sdlcursormanager.cpp index 3ef635f4ca..dc8a6dbeda 100644 --- a/components/sdlutil/sdlcursormanager.cpp +++ b/components/sdlutil/sdlcursormanager.cpp @@ -26,12 +26,6 @@ USE_GRAPHICSWINDOW() namespace CursorDecompression { -#if defined(__APPLE__) // Workaround macOS not supporting hardware DXTC decompression - constexpr bool softwareDecompression = true; -#else - constexpr bool softwareDecompression = false; -#endif - class MyGraphicsContext { public: MyGraphicsContext(int w, int h) @@ -87,69 +81,6 @@ namespace CursorDecompression osg::ref_ptr _gc; }; - SDLUtil::SurfaceUniquePtr hardwareDecompress (osg::ref_ptr source, float rotDegrees) - { - int width = source->s(); - int height = source->t(); - - MyGraphicsContext context(width, height); - - osg::ref_ptr state = context.getContext()->getState(); - - osg::ref_ptr texture = new osg::Texture2D; - texture->setImage(source); - texture->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP_TO_BORDER); - texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_BORDER); - texture->setBorderColor(osg::Vec4f(0.f, 0.f, 0.f, 0.f)); - - osg::ref_ptr texmat = new osg::TexMat; - osg::Matrix texRot (osg::Matrix::identity()); - float theta ( osg::DegreesToRadians(-rotDegrees) ); - float cosTheta = std::cos(theta); - float sinTheta = std::sin(theta); - - texRot(0,0) = cosTheta; - texRot(1,0) = -sinTheta; - texRot(0,1) = sinTheta; - texRot(1,1) = cosTheta; - // Offset center of rotation to center of texture - texRot(3,0) = 0.5f + ( (-0.5f * cosTheta) - (-0.5f * sinTheta) ); - texRot(3,1) = 0.5f + ( (-0.5f * sinTheta) + (-0.5f * cosTheta) ); - - texmat->setMatrix(texRot); - - state->applyTextureAttribute(0, texmat); - - osg::ref_ptr identity (new osg::RefMatrix(osg::Matrix::identity())); - state->applyModelViewMatrix(identity); - state->applyProjectionMatrix(identity); - - state->applyMode(GL_TEXTURE_2D, true); - state->applyTextureAttribute(0, texture); - - osg::ref_ptr resultImage = new osg::Image; - resultImage->allocateImage(width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE); - - osg::RenderInfo renderInfo; - renderInfo.setState(state); - - glViewport(0, 0, width, height); - - osg::ref_ptr geom; - - geom = osg::createTexturedQuadGeometry(osg::Vec3(-1,-1,0), osg::Vec3(2,0,0), osg::Vec3(0,2,0)); - - geom->drawImplementation(renderInfo); - - glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, resultImage->data()); - - geom->releaseGLObjects(); - source->releaseGLObjects(); - texture->releaseGLObjects(); - - return SDLUtil::imageToSurface(resultImage, true); - } - SDLUtil::SurfaceUniquePtr softwareDecompress (osg::ref_ptr source, float rotDegrees) { int width = source->s(); @@ -264,17 +195,8 @@ namespace SDLUtil if (mCursorMap.find(name) != mCursorMap.end()) return; - static bool forceSoftwareDecompression = (getenv("OPENMW_DECOMPRESS_TEXTURES") != nullptr); - - SurfaceUniquePtr (*decompressionFunction)(osg::ref_ptr, float); - if (forceSoftwareDecompression || CursorDecompression::softwareDecompression) { - decompressionFunction = CursorDecompression::softwareDecompress; - } else { - decompressionFunction = CursorDecompression::hardwareDecompress; - } - try { - auto surface = decompressionFunction(image, static_cast(rotDegrees)); + auto surface = CursorDecompression::softwareDecompress(image, static_cast(rotDegrees)); //set the cursor and store it for later SDL_Cursor* curs = SDL_CreateColorCursor(surface.get(), hotspot_x, hotspot_y);