diff --git a/MobileGL/MG_Backend/DirectGLES/Managers.cpp b/MobileGL/MG_Backend/DirectGLES/Managers.cpp index 5eca0e85..9aea790e 100644 --- a/MobileGL/MG_Backend/DirectGLES/Managers.cpp +++ b/MobileGL/MG_Backend/DirectGLES/Managers.cpp @@ -111,7 +111,7 @@ namespace MobileGL::MG_Backend::DirectGLES { (invalidate ? GL_MAP_INVALIDATE_BUFFER_BIT : 0) | GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); const void* data = stateBufferObject->GetDataReadOnly()->data(); if (mappedData) { - Memcpy(reinterpret_cast(reinterpret_cast(data) + range.start), mappedData, + Memcpy(mappedData, ((const char*)(data) + range.start), range.end - range.start); MGLOG_D("Mapped buffer data successfully for object with ID: %u", m_backendBufferId); MG_External::GLES::glUnmapBuffer(TempBufferTarget); diff --git a/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp b/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp index f2adb57b..7082fd80 100644 --- a/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp +++ b/MobileGL/MG_Impl/GLImpl/Texture/GL_Texture.cpp @@ -80,7 +80,7 @@ namespace MobileGL { SizeT srcOffset = row * width * bytesPerPixel; if (dstOffset + width * bytesPerPixel < data.size()) { - Memcpy(srcData + srcOffset, data.data() + dstOffset, width * bytesPerPixel); + Memcpy(data.data() + dstOffset, srcData + srcOffset, width * bytesPerPixel); } else { MG_State::pGLContext->RecordError( ErrorCode::InvalidOperation, @@ -286,7 +286,8 @@ namespace MobileGL { // ======================= Processing ================================ SharedPtr textureObject = nullptr; - if (TextureImpl::IsProxyTextureTarget(textureUploadingTarget)) { + Bool isProxy = TextureImpl::IsProxyTextureTarget(textureUploadingTarget); + if (isProxy) { textureObject = TextureImpl::pProxyTextureManager->CreateOrReplaceProxyTextureObject(textureUploadingTarget); } else { @@ -300,14 +301,14 @@ namespace MobileGL { if (!TextureImpl::ValidateTextureObject(textureObject)) return; // ======================= Processing ================================ - SizeT imageSize = + SizeT imageSize = isProxy ? 0 : MG_Util::CalculateInputTextureImageSize(textureInternalFormat, texturePixelDataType, {width, height, 1}); textureObject->SetInternalFormat(textureInternalFormat); MG_State::GLState::MipmapLevelInput mipmap = MG_State::GLState::MipmapLevelInput( - {width, height, 1}, level, false, 0, {const_cast(pixels), imageSize}); + {width, height, 1}, level, false, 0, {const_cast(isProxy ? pixels : nullptr), imageSize}); textureObject->SetMipmapLevel(mipmap); } diff --git a/MobileGL/MG_State/GLState/TextureState/TextureObject.h b/MobileGL/MG_State/GLState/TextureState/TextureObject.h index 83c13bc2..b6a89f93 100644 --- a/MobileGL/MG_State/GLState/TextureState/TextureObject.h +++ b/MobileGL/MG_State/GLState/TextureState/TextureObject.h @@ -189,9 +189,10 @@ namespace MobileGL { Bool dirty = true; MipmapLevelInternal(const MipmapLevelInput& input) : MipmapLevelBase(input) { + data.resize(input.inputData.size); if (input.inputData.data && input.inputData.size > 0) { const Uint8* src = static_cast(input.inputData.data); - data.assign(src, src + input.inputData.size); + Memcpy(data.data(), src, input.inputData.size); } } }; diff --git a/MobileGL/MG_Util/Types.h b/MobileGL/MG_Util/Types.h index 4b520792..a1b73ab4 100644 --- a/MobileGL/MG_Util/Types.h +++ b/MobileGL/MG_Util/Types.h @@ -56,7 +56,7 @@ namespace MobileGL { inline constexpr void Copy(const T* src, T* dest, SizeT count) { std::copy(src, src + count, dest); } - inline constexpr void Memcpy(const void* src, void* dest, SizeT size) { + inline constexpr void Memcpy(void* dest, const void* src, SizeT size) { std::memcpy(dest, src, size); } template