-
Автор темы
- #1
вопрос к знатокам : что не так и как фиксить?.
Пример(адекватного(fps < 100))
Баг(fps ~ > 100): проскакивают флики, боксы отрисовываются не там, где надо. К сожалению, скриншот сделать не удалось ( слишком быстро проходит, хоть и постоянно).
код рендера боксов:
Endscene:
визуалы:
Пример(адекватного(fps < 100))
Баг(fps ~ > 100): проскакивают флики, боксы отрисовываются не там, где надо. К сожалению, скриншот сделать не удалось ( слишком быстро проходит, хоть и постоянно).
код рендера боксов:
C++:
void c_render::rect(const Vector2D from, const Vector2D size, const D3DCOLOR color) const
{
const auto to = from + size;
const auto col = color;
vertex vert[5] =
{
{ from.x, from.y, 1.0f, 1.0f, col },
{ to.x, from.y, 1.0f, 1.0f, col },
{ to.x, to.y, 1.0f, 1.0f, col },
{ from.x, to.y, 1.0f, 1.0f, col },
{ from.x, from.y, 1.0f, 1.0f, col }
};
this->dev->SetTexture(0, nullptr);
this->dev->DrawPrimitiveUP(D3DPT_LINESTRIP, 4, &vert, sizeof(vertex));
}
C++:
fnEndScene oEndScene = g_3dhooks.get_original<fnEndScene>(42);
DWORD colorwrite, srgbwrite;
IDirect3DVertexDeclaration9* vert_dec = nullptr;
IDirect3DVertexShader9* vert_shader = nullptr;
DWORD dwOld_D3DRS_COLORWRITEENABLE = NULL;
DWORD oldFVF; pDevice->GetFVF(&oldFVF);
pDevice->GetRenderState(D3DRS_COLORWRITEENABLE, &colorwrite);
pDevice->GetRenderState(D3DRS_SRGBWRITEENABLE, &srgbwrite);
pDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 0xffffffff);
//removes the source engine color correction
pDevice->SetRenderState(D3DRS_SRGBWRITEENABLE, false);
pDevice->SetFVF(D3DFVF_XYZRHW | D3DFVF_DIFFUSE);
pDevice->GetRenderState(D3DRS_COLORWRITEENABLE, &dwOld_D3DRS_COLORWRITEENABLE);
pDevice->GetVertexDeclaration(&vert_dec);
pDevice->GetVertexShader(&vert_shader);
pDevice->SetRenderState(D3DRS_COLORWRITEENABLE, 0xffffffff);
pDevice->SetRenderState(D3DRS_SRGBWRITEENABLE, false);
pDevice->SetSamplerState(NULL, D3DSAMP_ADDRESSU, D3DTADDRESS_WRAP);
pDevice->SetSamplerState(NULL, D3DSAMP_ADDRESSV, D3DTADDRESS_WRAP);
pDevice->SetSamplerState(NULL, D3DSAMP_ADDRESSW, D3DTADDRESS_WRAP);
pDevice->SetSamplerState(NULL, D3DSAMP_SRGBTEXTURE, NULL);
[COLOR=rgb(209, 72, 65)]vs.getDrawList(pDevice);// - отвечает за есп[/COLOR]
menu.Init(pDevice);
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
////////////////////////
menu.Render();
///////////////////////
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
pDevice->SetFVF(oldFVF);
pDevice->SetRenderState(D3DRS_COLORWRITEENABLE, colorwrite);
pDevice->SetRenderState(D3DRS_SRGBWRITEENABLE, srgbwrite);
pDevice->SetRenderState(D3DRS_COLORWRITEENABLE, dwOld_D3DRS_COLORWRITEENABLE);
pDevice->SetRenderState(D3DRS_SRGBWRITEENABLE, true);
pDevice->SetVertexDeclaration(vert_dec);
pDevice->SetVertexShader(vert_shader);
//pDevice->SetFVF(oldFVF);
return oEndScene(pDevice);
Код:
void Visuals::getDrawList(IDirect3DDevice9* pDev)
{
render.getPDevice(pDev);
if (g_Engine->isInGameH())
{
if (ClientEntity && g_Engine->isConnectedH())
{
for (int i = 1; i < 64; i++)
{
auto pEntity = static_cast<Ent*>(ClientEntity->GetClientEntity(i));
if (!pEntity || (uintptr_t)pEntity == 0)
{
continue;//i++
}
if (!pEntity && i > 11)i = 63;
if (pEntity != g_LocalPlayer)
{
auto player = Player();
if (player.Begin(pEntity, i)) {
if (menu.boxEsp)player.RenderBox();
if (menu.nameEsp)player.RenderName();
}
}
}
}
}
}
bool Visuals::Player::Begin(Ent* pl, int i)
{
if (!pl->isAlive())
return false;
ctx.pl = pl;
g_Engine->GetPlayerInfo(i,&ctx.info);
ctx.name = ctx.info.szName;
ctx.is_enemy = g_LocalPlayer->iTeamNum() != pl->iTeamNum();
if (ctx.pl->isDormant())return false;//true = плохо . false = наше все
if (!ctx.is_enemy)return false;
//ctx.is_visible = g_LocalPlayer->CanSeePlayer(pl, HITBOX_CHEST);
auto head = pl->GetHitboxPos(HITBOX_HEAD);
head.z += 9;
auto origin = pl->vecOrigin();//x bottom, y bottom
Vector top;
Vector bottom;
if (!m1.WorldToScreen(head, top) ||
!m1.WorldToScreen(origin, bottom))
return false;
ctx.bbox.bottom = bottom.y;//bottom y
ctx.bbox.left = top.x ;//ceneter x
ctx.bbox.top = top.y ;//ceneter x
auto h = bottom.y - top.y;
ctx.h = h;
auto w = h / 1.7;
ctx.w = w;
return true;
}
void Visuals::Player::RenderBox()
{
render.rect(Vector2D(ctx.bbox.left - ctx.w / 2, ctx.bbox.bottom), Vector2D(ctx.w, -ctx.h), D3DCOLOR_XRGB(0, 255, 0));
// render.line(Vector2D(ctx.bbox.left - ctx.w / 2, ctx.bbox.bottom), Vector2D(ctx.w, -ctx.h), D3DCOLOR_XRGB(0, 255, 0));
}