Вопрос Как сделать отображение ника в стим, imgui

Забаненный
Статус
Оффлайн
Регистрация
11 Июл 2022
Сообщения
2
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
И как еще аву из стима брать ?
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Янв 2019
Сообщения
838
Реакции[?]
298
Поинты[?]
17K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Стим сдк подключай и используй его
Как подключишь стим сдк делаешь в инициализации avatar_from_steam = steam_image(g_pd3dDevice);
menu.h:
LPDIRECT3DTEXTURE9 avatar_from_steam = nullptr;
LPDIRECT3DTEXTURE9 steam_image(IDirect3DDevice9* device);
Код:
LPDIRECT3DTEXTURE9 Menu::steam_image(IDirect3DDevice9* device)
{
    int iImage = SteamFriends->GetLargeFriendAvatar(SteamUser->GetSteamID());
    if (iImage == -1)
        return nullptr;
    uint32 uAvatarWidth, uAvatarHeight;
    if (!SteamUtils->GetImageSize(iImage, &uAvatarWidth, &uAvatarHeight))
        return nullptr;
    const int uImageSizeInBytes = uAvatarWidth * uAvatarHeight * 4;
    uint8* pAvatarRGBA = new uint8[uImageSizeInBytes];
    if (!SteamUtils->GetImageRGBA(iImage, pAvatarRGBA, uImageSizeInBytes))
    {
        delete[] pAvatarRGBA;
        return nullptr;
    }
    auto res = device->CreateTexture(uAvatarWidth,
        uAvatarHeight,
        1,
        D3DUSAGE_DYNAMIC,
        D3DFMT_A8R8G8B8,
        D3DPOOL_DEFAULT,
        &texture,
        nullptr);
    std::vector<uint8_t> texData;
    texData.resize(uAvatarWidth * uAvatarHeight * 4u);
    CopyConvert(pAvatarRGBA,
        texData.data(),
        uAvatarWidth * uAvatarHeight * 4u);
    D3DLOCKED_RECT rect;
    res = texture->LockRect(0, &rect, nullptr, D3DLOCK_DISCARD);
    auto src = texData.data();
    auto dst = reinterpret_cast<uint8_t*>(rect.pBits);
    for (auto y = 0u; y < uAvatarHeight; ++y)
    {
        std::copy(src, src + (uAvatarWidth * 4), dst);

        src += uAvatarWidth * 4;
        dst += rect.Pitch;
    }
    res = texture->UnlockRect(0);
    delete[] pAvatarRGBA;
    return texture;
}
Далее где будешь рисовать аватарку (в меню например)
C++:
draw->AddCircleImageFilled(avatar_from_steam, pos + ImVec2(450, 15), 23.f, ImColor(255, 255, 255), 360);
И если не изменяет память, то ник через
C++:
SteamFriends->GetPersonaName();
UPD: сорян для steam_image забыл тебе дать copy_convert
C++:
void CopyConvert(const uint8_t* rgba, uint8_t* out, const size_t size)
{
    auto in = reinterpret_cast<const uint32_t*>(rgba);
    auto buf = reinterpret_cast<uint32_t*>(out);
    for (auto i = 0u; i < (size / 4); ++i)
    {
        const auto pixel = *in++;
        *buf++ = (pixel & 0xFF00FF00) | ((pixel & 0xFF0000) >> 16) | ((pixel & 0xFF) << 16);
    }
}
В меню выглядит так
1659258192893.png
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
15 Янв 2022
Сообщения
17
Реакции[?]
0
Поинты[?]
0
Стим сдк подключай и используй его
Как подключишь стим сдк делаешь в инициализации avatar_from_steam = steam_image(g_pd3dDevice);
menu.h:
LPDIRECT3DTEXTURE9 avatar_from_steam = nullptr;
LPDIRECT3DTEXTURE9 steam_image(IDirect3DDevice9* device);
Код:
LPDIRECT3DTEXTURE9 Menu::steam_image(IDirect3DDevice9* device)
{
    int iImage = SteamFriends->GetLargeFriendAvatar(SteamUser->GetSteamID());
    if (iImage == -1)
        return nullptr;
    uint32 uAvatarWidth, uAvatarHeight;
    if (!SteamUtils->GetImageSize(iImage, &uAvatarWidth, &uAvatarHeight))
        return nullptr;
    const int uImageSizeInBytes = uAvatarWidth * uAvatarHeight * 4;
    uint8* pAvatarRGBA = new uint8[uImageSizeInBytes];
    if (!SteamUtils->GetImageRGBA(iImage, pAvatarRGBA, uImageSizeInBytes))
    {
        delete[] pAvatarRGBA;
        return nullptr;
    }
    auto res = device->CreateTexture(uAvatarWidth,
        uAvatarHeight,
        1,
        D3DUSAGE_DYNAMIC,
        D3DFMT_A8R8G8B8,
        D3DPOOL_DEFAULT,
        &texture,
        nullptr);
    std::vector<uint8_t> texData;
    texData.resize(uAvatarWidth * uAvatarHeight * 4u);
    CopyConvert(pAvatarRGBA,
        texData.data(),
        uAvatarWidth * uAvatarHeight * 4u);
    D3DLOCKED_RECT rect;
    res = texture->LockRect(0, &rect, nullptr, D3DLOCK_DISCARD);
    auto src = texData.data();
    auto dst = reinterpret_cast<uint8_t*>(rect.pBits);
    for (auto y = 0u; y < uAvatarHeight; ++y)
    {
        std::copy(src, src + (uAvatarWidth * 4), dst);

        src += uAvatarWidth * 4;
        dst += rect.Pitch;
    }
    res = texture->UnlockRect(0);
    delete[] pAvatarRGBA;
    return texture;
}
Далее где будешь рисовать аватарку (в меню например)
C++:
draw->AddCircleImageFilled(avatar_from_steam, pos + ImVec2(450, 15), 23.f, ImColor(255, 255, 255), 360);
И если не изменяет память, то ник через
C++:
SteamFriends->GetPersonaName();
UPD: сорян для steam_image забыл тебе дать copy_convert
C++:
void CopyConvert(const uint8_t* rgba, uint8_t* out, const size_t size)
{
    auto in = reinterpret_cast<const uint32_t*>(rgba);
    auto buf = reinterpret_cast<uint32_t*>(out);
    for (auto i = 0u; i < (size / 4); ++i)
    {
        const auto pixel = *in++;
        *buf++ = (pixel & 0xFF00FF00) | ((pixel & 0xFF0000) >> 16) | ((pixel & 0xFF) << 16);
    }
}
В меню выглядит так
Посмотреть вложение 214751
А куда этот copyconvert вставлять?
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Янв 2019
Сообщения
838
Реакции[?]
298
Поинты[?]
17K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Забаненный
Статус
Оффлайн
Регистрация
11 Июл 2022
Сообщения
2
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Кхм,странно а разве не надо image переводить в байты и подключать его через include ?
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Янв 2019
Сообщения
838
Реакции[?]
298
Поинты[?]
17K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Сверху Снизу