From 44380e75075e3f1a1abfa8db3a9e28dcae4d72d9 Mon Sep 17 00:00:00 2001 From: Chris Thrasher Date: Sun, 19 May 2024 15:31:52 -0600 Subject: [PATCH] Fix API changes in SFML 3 --- .github/workflows/ci.yml | 2 +- src/SFML/Audio/SoundBuffer.cpp | 48 ++++++---------- src/SFML/Audio/SoundBufferRecorder.cpp | 4 +- src/SFML/Audio/SoundBufferRecorderStruct.h | 8 ++- src/SFML/Graphics/Font.cpp | 35 +++++------- src/SFML/Graphics/FontStruct.h | 3 +- src/SFML/Graphics/Image.cpp | 51 +++++------------ src/SFML/Graphics/RenderTexture.cpp | 17 ++---- src/SFML/Graphics/Shader.cpp | 66 +++++++++------------- src/SFML/Graphics/Texture.cpp | 5 +- src/SFML/Window/Cursor.cpp | 24 +++----- 11 files changed, 97 insertions(+), 166 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40cde06..21aa71f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,7 @@ jobs: uses: actions/checkout@v4 with: repository: SFML/SFML - ref: c89c32d7baa15927a39a161a4ead867c11d5ea21 + ref: b583eaf1606e54e5f443b094b3b2a6e3af72a5a4 path: SFML - name: Configure SFML CMake diff --git a/src/SFML/Audio/SoundBuffer.cpp b/src/SFML/Audio/SoundBuffer.cpp index 8b8003f..17195c9 100644 --- a/src/SFML/Audio/SoundBuffer.cpp +++ b/src/SFML/Audio/SoundBuffer.cpp @@ -34,30 +34,22 @@ //////////////////////////////////////////////////////////// sfSoundBuffer* sfSoundBuffer_createFromFile(const char* filename) { - sfSoundBuffer* buffer = new sfSoundBuffer; + auto soundBuffer = sf::SoundBuffer::loadFromFile(filename); + if (!soundBuffer) + return nullptr; - if (!buffer->This.loadFromFile(filename)) - { - delete buffer; - buffer = nullptr; - } - - return buffer; + return new sfSoundBuffer{std::move(*soundBuffer)}; } //////////////////////////////////////////////////////////// sfSoundBuffer* sfSoundBuffer_createFromMemory(const void* data, size_t sizeInBytes) { - sfSoundBuffer* buffer = new sfSoundBuffer; + auto soundBuffer = sf::SoundBuffer::loadFromMemory(data, sizeInBytes); + if (!soundBuffer) + return nullptr; - if (!buffer->This.loadFromMemory(data, sizeInBytes)) - { - delete buffer; - buffer = nullptr; - } - - return buffer; + return new sfSoundBuffer{std::move(*soundBuffer)}; } @@ -67,15 +59,12 @@ sfSoundBuffer* sfSoundBuffer_createFromStream(sfInputStream* stream) { CSFML_CHECK_RETURN(stream, nullptr); - sfSoundBuffer* buffer = new sfSoundBuffer; CallbackStream sfmlStream(stream); - if (!buffer->This.loadFromStream(sfmlStream)) - { - delete buffer; - buffer = nullptr; - } + auto soundBuffer = sf::SoundBuffer::loadFromStream(sfmlStream); + if (!soundBuffer) + return nullptr; - return buffer; + return new sfSoundBuffer{std::move(*soundBuffer)}; } @@ -87,18 +76,15 @@ sfSoundBuffer* sfSoundBuffer_createFromSamples(const int16_t* samples, sfSoundChannel* channelMapData, size_t channelMapSize) { - sfSoundBuffer* buffer = new sfSoundBuffer; - std::vector channelMap(channelMapSize); for (std::size_t i = 0; i < channelMap.size(); ++i) channelMap[i] = static_cast(channelMapData[i]); - if (!buffer->This.loadFromSamples(samples, sampleCount, channelCount, sampleRate, channelMap)) - { - delete buffer; - buffer = nullptr; - } - return buffer; + auto soundBuffer = sf::SoundBuffer::loadFromSamples(samples, sampleCount, channelCount, sampleRate, channelMap); + if (!soundBuffer) + return nullptr; + + return new sfSoundBuffer{std::move(*soundBuffer)}; } diff --git a/src/SFML/Audio/SoundBufferRecorder.cpp b/src/SFML/Audio/SoundBufferRecorder.cpp index a5112a5..603b87c 100644 --- a/src/SFML/Audio/SoundBufferRecorder.cpp +++ b/src/SFML/Audio/SoundBufferRecorder.cpp @@ -70,9 +70,9 @@ const sfSoundBuffer* sfSoundBufferRecorder_getBuffer(const sfSoundBufferRecorder { CSFML_CHECK_RETURN(soundBufferRecorder, nullptr); - soundBufferRecorder->SoundBuffer.This = soundBufferRecorder->This.getBuffer(); + soundBufferRecorder->SoundBuffer = sfSoundBuffer{soundBufferRecorder->This.getBuffer()}; - return &soundBufferRecorder->SoundBuffer; + return &*soundBufferRecorder->SoundBuffer; } //////////////////////////////////////////////////////////// diff --git a/src/SFML/Audio/SoundBufferRecorderStruct.h b/src/SFML/Audio/SoundBufferRecorderStruct.h index a131325..e1b8127 100644 --- a/src/SFML/Audio/SoundBufferRecorderStruct.h +++ b/src/SFML/Audio/SoundBufferRecorderStruct.h @@ -31,15 +31,17 @@ #include #include +#include + //////////////////////////////////////////////////////////// // Internal structure of sfSoundBufferRecorder //////////////////////////////////////////////////////////// struct sfSoundBufferRecorder { - sf::SoundBufferRecorder This; - mutable sfSoundBuffer SoundBuffer; - std::string DeviceName; + sf::SoundBufferRecorder This; + mutable std::optional SoundBuffer; + std::string DeviceName; }; diff --git a/src/SFML/Graphics/Font.cpp b/src/SFML/Graphics/Font.cpp index c685283..337a4a1 100644 --- a/src/SFML/Graphics/Font.cpp +++ b/src/SFML/Graphics/Font.cpp @@ -34,28 +34,22 @@ //////////////////////////////////////////////////////////// sfFont* sfFont_createFromFile(const char* filename) { - sfFont* font = new sfFont; - if (!font->This.loadFromFile(filename)) - { - delete font; - font = nullptr; - } + auto font = sf::Font::loadFromFile(filename); + if (!font) + return nullptr; - return font; + return new sfFont{std::move(*font), {}, {}}; } //////////////////////////////////////////////////////////// sfFont* sfFont_createFromMemory(const void* data, size_t sizeInBytes) { - sfFont* font = new sfFont; - if (!font->This.loadFromMemory(data, sizeInBytes)) - { - delete font; - font = nullptr; - } + auto font = sf::Font::loadFromMemory(data, sizeInBytes); + if (!font) + return nullptr; - return font; + return new sfFont{std::move(*font), {}, {}}; } @@ -64,15 +58,12 @@ sfFont* sfFont_createFromStream(sfInputStream* stream) { CSFML_CHECK_RETURN(stream, nullptr); - sfFont* font = new sfFont; - font->Stream = CallbackStream(stream); - if (!font->This.loadFromStream(font->Stream)) - { - delete font; - font = nullptr; - } + auto sfmlStream = std::make_shared(stream); + auto font = sf::Font::loadFromStream(*sfmlStream); + if (!font) + return nullptr; - return font; + return new sfFont{std::move(*font), {}, std::move(sfmlStream)}; } diff --git a/src/SFML/Graphics/FontStruct.h b/src/SFML/Graphics/FontStruct.h index 1689756..95e93db 100644 --- a/src/SFML/Graphics/FontStruct.h +++ b/src/SFML/Graphics/FontStruct.h @@ -32,6 +32,7 @@ #include #include #include +#include //////////////////////////////////////////////////////////// @@ -41,7 +42,7 @@ struct sfFont { sf::Font This; std::map Textures; - CallbackStream Stream; + std::shared_ptr Stream; }; diff --git a/src/SFML/Graphics/Image.cpp b/src/SFML/Graphics/Image.cpp index bff6180..c87d829 100644 --- a/src/SFML/Graphics/Image.cpp +++ b/src/SFML/Graphics/Image.cpp @@ -35,60 +35,43 @@ //////////////////////////////////////////////////////////// sfImage* sfImage_create(unsigned int width, unsigned int height) { - sfImage* image = new sfImage; - image->This.create({ width, height }); - - return image; + return new sfImage{sf::Image({width, height})}; } //////////////////////////////////////////////////////////// sfImage* sfImage_createFromColor(unsigned int width, unsigned int height, sfColor color) { - sfImage* image = new sfImage; - image->This.create({ width, height }, sf::Color(color.r, color.g, color.b, color.a)); - - return image; + return new sfImage{sf::Image({ width, height }, sf::Color(color.r, color.g, color.b, color.a))}; } //////////////////////////////////////////////////////////// sfImage* sfImage_createFromPixels(unsigned int width, unsigned int height, const uint8_t* data) { - sfImage* image = new sfImage; - image->This.create({ width, height }, data); - - return image; + return new sfImage{sf::Image({ width, height }, data)}; } //////////////////////////////////////////////////////////// sfImage* sfImage_createFromFile(const char* filename) { - sfImage* image = new sfImage; + auto image = sf::Image::loadFromFile(filename); + if (!image) + return nullptr; - if (!image->This.loadFromFile(filename)) - { - delete image; - image = nullptr; - } - - return image; + return new sfImage{std::move(*image)}; } //////////////////////////////////////////////////////////// sfImage* sfImage_createFromMemory(const void* data, size_t sizeInBytes) { - sfImage* image = new sfImage; + auto image = sf::Image::loadFromMemory(data, sizeInBytes); + if (!image) + return nullptr; - if (!image->This.loadFromMemory(data, sizeInBytes)) - { - delete image; - image = nullptr; - } - - return image; + return new sfImage{std::move(*image)}; } @@ -97,16 +80,12 @@ sfImage* sfImage_createFromStream(sfInputStream* stream) { CSFML_CHECK_RETURN(stream, nullptr); - sfImage* image = new sfImage; - CallbackStream sfmlStream(stream); - if (!image->This.loadFromStream(sfmlStream)) - { - delete image; - image = nullptr; - } + auto image = sf::Image::loadFromStream(sfmlStream); + if (!image) + return nullptr; - return image; + return new sfImage{std::move(*image)}; } diff --git a/src/SFML/Graphics/RenderTexture.cpp b/src/SFML/Graphics/RenderTexture.cpp index f36f29c..7aced20 100644 --- a/src/SFML/Graphics/RenderTexture.cpp +++ b/src/SFML/Graphics/RenderTexture.cpp @@ -51,19 +51,14 @@ sfRenderTexture* sfRenderTexture_create(unsigned int width, unsigned int height, } // Create the render texture - sfRenderTexture* renderTexture = new sfRenderTexture; - - if (!renderTexture->This.create({ width, height }, params)) - { - delete renderTexture; + auto renderTexture = sf::RenderTexture::create({ width, height }, params); + if (!renderTexture) return nullptr; - } - renderTexture->Target = new sfTexture(const_cast(&renderTexture->This.getTexture())); - renderTexture->DefaultView.This = renderTexture->This.getDefaultView(); - renderTexture->CurrentView.This = renderTexture->This.getView(); - - return renderTexture; + return new sfRenderTexture{std::move(*renderTexture), + new sfTexture(const_cast(&renderTexture->getTexture())), + {renderTexture->getDefaultView()}, + {renderTexture->getView()}}; } diff --git a/src/SFML/Graphics/Shader.cpp b/src/SFML/Graphics/Shader.cpp index 01b85da..05ce966 100644 --- a/src/SFML/Graphics/Shader.cpp +++ b/src/SFML/Graphics/Shader.cpp @@ -36,8 +36,7 @@ //////////////////////////////////////////////////////////// sfShader* sfShader_createFromFile(const char* vertexShaderFilename, const char* geometryShaderFilename, const char* fragmentShaderFilename) { - bool success = false; - sfShader* shader = new sfShader; + std::optional shader; if (vertexShaderFilename || geometryShaderFilename || fragmentShaderFilename) { if (!geometryShaderFilename) @@ -45,17 +44,17 @@ sfShader* sfShader_createFromFile(const char* vertexShaderFilename, const char* if (!vertexShaderFilename) { // fragment shader only - success = shader->This.loadFromFile(fragmentShaderFilename, sf::Shader::Type::Fragment); + shader = sf::Shader::loadFromFile(fragmentShaderFilename, sf::Shader::Type::Fragment); } else if (!fragmentShaderFilename) { // vertex shader only - success = shader->This.loadFromFile(vertexShaderFilename, sf::Shader::Type::Vertex); + shader = sf::Shader::loadFromFile(vertexShaderFilename, sf::Shader::Type::Vertex); } else { // vertex + fragment shaders - success = shader->This.loadFromFile(vertexShaderFilename, fragmentShaderFilename); + shader = sf::Shader::loadFromFile(vertexShaderFilename, fragmentShaderFilename); } } else @@ -63,31 +62,27 @@ sfShader* sfShader_createFromFile(const char* vertexShaderFilename, const char* if (!vertexShaderFilename && !fragmentShaderFilename) { // geometry shader only - success = shader->This.loadFromFile(geometryShaderFilename, sf::Shader::Type::Geometry); + shader = sf::Shader::loadFromFile(geometryShaderFilename, sf::Shader::Type::Geometry); } else { // vertex + geometry + fragment shaders - success = shader->This.loadFromFile(vertexShaderFilename, geometryShaderFilename, fragmentShaderFilename); + shader = sf::Shader::loadFromFile(vertexShaderFilename, geometryShaderFilename, fragmentShaderFilename); } } } - if (!success) - { - delete shader; - shader = nullptr; - } + if (!shader) + return nullptr; - return shader; + return new sfShader{std::move(*shader)}; } //////////////////////////////////////////////////////////// sfShader* sfShader_createFromMemory(const char* vertexShader, const char* geometryShader, const char* fragmentShader) { - bool success = false; - sfShader* shader = new sfShader; + std::optional shader; if (vertexShader || geometryShader || fragmentShader) { if (!geometryShader) @@ -95,17 +90,17 @@ sfShader* sfShader_createFromMemory(const char* vertexShader, const char* geomet if (!vertexShader) { // fragment shader only - success = shader->This.loadFromMemory(fragmentShader, sf::Shader::Type::Fragment); + shader = sf::Shader::loadFromMemory(fragmentShader, sf::Shader::Type::Fragment); } else if (!fragmentShader) { // vertex shader only - success = shader->This.loadFromMemory(vertexShader, sf::Shader::Type::Vertex); + shader = sf::Shader::loadFromMemory(vertexShader, sf::Shader::Type::Vertex); } else { // vertex + fragment shaders - success = shader->This.loadFromMemory(vertexShader, fragmentShader); + shader = sf::Shader::loadFromMemory(vertexShader, fragmentShader); } } else @@ -113,31 +108,27 @@ sfShader* sfShader_createFromMemory(const char* vertexShader, const char* geomet if (!vertexShader && !fragmentShader) { // geometry shader only - success = shader->This.loadFromMemory(geometryShader, sf::Shader::Type::Geometry); + shader = sf::Shader::loadFromMemory(geometryShader, sf::Shader::Type::Geometry); } else { // vertex + geometry + fragment shaders - success = shader->This.loadFromMemory(vertexShader, geometryShader, fragmentShader); + shader = sf::Shader::loadFromMemory(vertexShader, geometryShader, fragmentShader); } } } - if (!success) - { - delete shader; - shader = nullptr; - } + if (!shader) + return nullptr; - return shader; + return new sfShader{std::move(*shader)}; } //////////////////////////////////////////////////////////// sfShader* sfShader_createFromStream(sfInputStream* vertexShaderStream, sfInputStream* geometryShaderStream, sfInputStream* fragmentShaderStream) { - bool success = false; - sfShader* shader = new sfShader; + std::optional shader; if (vertexShaderStream || geometryShaderStream || fragmentShaderStream) { if (!geometryShaderStream) @@ -146,20 +137,20 @@ sfShader* sfShader_createFromStream(sfInputStream* vertexShaderStream, sfInputSt { // fragment shader only CallbackStream stream(fragmentShaderStream); - success = shader->This.loadFromStream(stream, sf::Shader::Type::Fragment); + shader = sf::Shader::loadFromStream(stream, sf::Shader::Type::Fragment); } else if (!fragmentShaderStream) { // vertex shader only CallbackStream stream(vertexShaderStream); - success = shader->This.loadFromStream(stream, sf::Shader::Type::Vertex); + shader = sf::Shader::loadFromStream(stream, sf::Shader::Type::Vertex); } else { // vertex + fragment shaders CallbackStream vertexStream(vertexShaderStream); CallbackStream fragmentStream(fragmentShaderStream); - success = shader->This.loadFromStream(vertexStream, fragmentStream); + shader = sf::Shader::loadFromStream(vertexStream, fragmentStream); } } else @@ -168,25 +159,22 @@ sfShader* sfShader_createFromStream(sfInputStream* vertexShaderStream, sfInputSt if (!vertexShaderStream && !fragmentShaderStream) { // geometry shader only - success = shader->This.loadFromStream(geometryStream, sf::Shader::Type::Geometry); + shader = sf::Shader::loadFromStream(geometryStream, sf::Shader::Type::Geometry); } else { // vertex + geometry + fragment shaders CallbackStream vertexStream(vertexShaderStream); CallbackStream fragmentStream(fragmentShaderStream); - success = shader->This.loadFromStream(vertexStream, geometryStream, fragmentStream); + shader = sf::Shader::loadFromStream(vertexStream, geometryStream, fragmentStream); } } } - if (!success) - { - delete shader; - shader = nullptr; - } + if (!shader) + return nullptr; - return shader; + return new sfShader{std::move(*shader)}; } diff --git a/src/SFML/Graphics/Texture.cpp b/src/SFML/Graphics/Texture.cpp index 67aa608..44bb53e 100644 --- a/src/SFML/Graphics/Texture.cpp +++ b/src/SFML/Graphics/Texture.cpp @@ -250,10 +250,7 @@ sfImage* sfTexture_copyToImage(const sfTexture* texture) CSFML_CHECK_RETURN(texture, nullptr); CSFML_CHECK_RETURN(texture->This, nullptr); - sfImage* image = new sfImage; - image->This = texture->This->copyToImage(); - - return image; + return new sfImage{texture->This->copyToImage()}; } diff --git a/src/SFML/Window/Cursor.cpp b/src/SFML/Window/Cursor.cpp index 15ff872..edab9a3 100644 --- a/src/SFML/Window/Cursor.cpp +++ b/src/SFML/Window/Cursor.cpp @@ -33,30 +33,22 @@ //////////////////////////////////////////////////////////// sfCursor* sfCursor_createFromPixels(const uint8_t* pixels, sfVector2u size, sfVector2u hotspot) { - sfCursor* cursor = new sfCursor; + auto cursor = sf::Cursor::loadFromPixels(pixels, sf::Vector2u(size.x, size.y), sf::Vector2u(hotspot.x, hotspot.y)); + if (!cursor) + return nullptr; - if (!cursor->This.loadFromPixels(pixels, sf::Vector2u(size.x, size.y), sf::Vector2u(hotspot.x, hotspot.y))) - { - delete cursor; - cursor = nullptr; - } - - return cursor; + return new sfCursor{std::move(*cursor)}; } //////////////////////////////////////////////////////////// sfCursor* sfCursor_createFromSystem(sfCursorType type) { - sfCursor* cursor = new sfCursor; + auto cursor = sf::Cursor::loadFromSystem(static_cast(type)); + if (!cursor) + return nullptr; - if (!cursor->This.loadFromSystem(static_cast(type))) - { - delete cursor; - cursor = nullptr; - } - - return cursor; + return new sfCursor{std::move(*cursor)}; }