Skip to content
This repository has been archived by the owner on Jan 25, 2023. It is now read-only.

Toolset Visual Studio 2022 (v143) поломан #3147

Open
1vanK opened this issue Nov 29, 2022 · 12 comments
Open

Toolset Visual Studio 2022 (v143) поломан #3147

1vanK opened this issue Nov 29, 2022 · 12 comments

Comments

@1vanK
Copy link
Contributor

1vanK commented Nov 29, 2022

Если скомпилировать движок с тулсетом Visual Studio 2022 (v143) в релизной версии пушка из примера https://github.com/urho3d-learn/editor при анимации сжимается в блин. В отладочной версии, а также с тулсетом Visual Studio 2019 (v142) анимация у пушки нормальная

@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

void AnimationState::ApplyTrack(AnimationStateTrack& stateTrack, float weight, bool silent)
{
    Vector3 newPosition;
    Quaternion newRotation;
    Vector3 newScale;

    if (interpolate)
    {
        ...
    }
    else
    {
        if (!!(channelMask & AnimationChannels::Position))
            newPosition = keyFrame->position_;
        if (!!(channelMask & AnimationChannels::Rotation))
            newRotation = keyFrame->rotation_;
        if (!!(channelMask & AnimationChannels::Scale))
        {
            newScale = keyFrame->scale_;
            //URHO3D_LOGINFO("!!!!! newScale " + String(newScale.x_) + " "
            //    + String(newScale.y_) + " " + String(newScale.z_));
        }
    }
}

Если раскомментировать вывод в лог, то всё работает. Без вывода в лог оптимизатор хавает переменную newScale и игра багует.
Можно вручную установить newScale = Vector3::ONE; вместо newScale = keyFrame->scale_; и тогда тоже работает.

@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

Эта ошибка есть даже в версии 1.8.0: https://github.com/urho3d/Urho3D/releases/tag/1.8

@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

Возможно всплыли последствия нарушения strict alias rules, которые в Урхо нарушаются повсеместно

@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

Проблема воспроизводится в версии https://github.com/urho3d/Urho3D/releases/tag/1.8-ALPHA

@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

Ошибка есть в 64-битной версии -G "Visual Studio 17 2022" -A x64, но нет в 32-битной -G "Visual Studio 17 2022" -A Win32

@1vanK 1vanK added the backlog label Nov 29, 2022
@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

Такая же проблема в 18-м примере (и в нативной и в AS версии)

изображение

@1vanK
Copy link
Contributor Author

1vanK commented Nov 29, 2022

Такой способ позволяет обойти проблему, но это тупо

        if (!!(channelMask & AnimationChannels::Position))
            newPosition = keyFrame->position_;
        if (!!(channelMask & AnimationChannels::Rotation))
            newRotation = keyFrame->rotation_;
        if (!!(channelMask & AnimationChannels::Scale))
        {
            newScale = keyFrame->scale_;
            
            newScale *= 2.f;
            newScale *= 0.5f;
        }

@1vanK
Copy link
Contributor Author

1vanK commented Nov 30, 2022

Еще помогает замена конструктора копирования у Vector3:

    /// Assign from another vector.
    //Vector3& operator =(const Vector3& rhs) noexcept = default;

    Vector3& operator =(const Vector3& rhs) noexcept
    {
        x_ = rhs.x_;
        y_ = rhs.y_;
        z_ = rhs.z_;

        return *this;
    }

Но легче просто подождать исправления бага в компиляторе

@1vanK
Copy link
Contributor Author

1vanK commented Dec 21, 2022

VS 17.5.0 Preview 1.0 обновилась до VS 17.5.0 Preview 2.0, проблема осталась

@1vanK
Copy link
Contributor Author

1vanK commented Dec 22, 2022

Временный фикс добавил, но очевидно, что другие баги могут вылезать вообще в рандомных местах

@1vanK
Copy link
Contributor Author

1vanK commented Dec 22, 2022

Опции CMake для вопроизведения в будущем

cmake.exe repo -B build_vs -G "Visual Studio 17" -A x64^
 -D URHO3D_OPENGL=1 -D URHO3D_D3D9=1 -D URHO3D_D3D11=1^
 -D URHO3D_LIB_TYPE=STATIC -D URHO3D_STATIC_RUNTIME=0 -D URHO3D_HASH_DEBUG=0 -D URHO3D_MINIDUMPS=0 -D URHO3D_TESTING=1^
 -D URHO3D_ANGELSCRIPT=1 -D URHO3D_FORCE_AS_MAX_PORTABILITY=0 -D URHO3D_LUA=1 -D URHO3D_LUAJIT=0 -D URHO3D_GENERATEBINDINGS=1^
 -D URHO3D_SAMPLES=1 -D URHO3D_TOOLS=1 -D URHO3D_DOCS=0^
 -D URHO3D_NETWORK=1 -D URHO3D_DATABASE_SQLITE=1 -D URHO3D_TRACY_PROFILING=0 -D URHO3D_PHYSICS2D=1 -D URHO3D_URHO2D=1

@1vanK
Copy link
Contributor Author

1vanK commented Jan 20, 2023

Обновилось до Version 17.5.0 Preview 3.0, проблема осталась

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant