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;
}
draw->AddCircleImageFilled(avatar_from_steam, pos + ImVec2(450, 15), 23.f, ImColor(255, 255, 255), 360);
SteamFriends->GetPersonaName();
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);
}
}
А куда этот copyconvert вставлять?Стим сдк подключай и используй его
Как подключишь стим сдк делаешь в инициализации 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);
UPD: сорян для steam_image забыл тебе дать copy_convertC++:SteamFriends->GetPersonaName();
В меню выглядит так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
Рядом сo steam_imageА куда этот copyconvert вставлять?
Дай свой дс или тг, мне немного твоя помощь нужнаРядом сo steam_image
К сожалению они не валидные. Забываю поменять
Можешь написать мне, как буду дома отвечу.Дай свой дс или тг, мне немного твоя помощь нужна
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz