Другое С/С++ Вопрос - Ответ

SR_team

like pancake
BH Team
4,719
6,362
  • Нравится
Реакции: loganhackerdff

loganhackerdff

Известный
868
517
матрицы похерил. Если не хочешь менять место хука, то сохраняй их, но это ударит по fps
менять место хука это как?
матрицы похерил. Если не хочешь менять место хука, то сохраняй их, но это ударит по fps
пасибо
хукнул через это: починильось
C++:
DWORD FindDevice(DWORD dwLen)
{
    DWORD dwObjBase = (DWORD)LoadLibraryA("d3d9.dll");

    if (dwObjBase == 0x0)
        return 0x0;

    while (dwObjBase++ < dwObjBase + dwLen)
    {
        if ((*(WORD*)(dwObjBase + 0x00)) == 0x06C7 && (*(WORD*)(dwObjBase + 0x06)) == 0x8689 && (*(WORD*)(dwObjBase + 0x0C)) == 0x8689)
        {
            dwObjBase += 2;
            break;
        }
    }

    return dwObjBase;
};

bool initD3DRes()
{
    DWORD* VTable;
    *(DWORD*)&VTable = *(DWORD *)FindDevice(0x128000);

    DWORD VP16, VP17;

    VirtualProtect((LPVOID)&VTable[16], 4, PAGE_READWRITE, &VP16);
    VirtualProtect((LPVOID)&VTable[17], 4, PAGE_READWRITE, &VP17);

    vars::oReset = (tReset)VTable[16];
    vars::oPresent = (tPresent)VTable[17];

    VTable[16] = (DWORD)hkReset;
    VTable[17] = (DWORD)hkPresent;

    VirtualProtect((LPVOID)&VTable[16], 4, VP16, &VP16);
    VirtualProtect((LPVOID)&VTable[17], 4, VP17, &VP17);

    return true;
}

void destD3DRes()
{
    DWORD* VTable;
    *(DWORD*)&VTable = *(DWORD*)FindDevice(0x128000);

    DWORD VP16, VP17;

    VirtualProtect((LPVOID)&VTable[16], 4, PAGE_READWRITE, &VP16);
    VirtualProtect((LPVOID)&VTable[17], 4, PAGE_READWRITE, &VP17);

    VTable[16] = (DWORD)vars::oReset;
    VTable[17] = (DWORD)vars::oPresent;

    VirtualProtect((LPVOID)&VTable[16], 4, VP16, &VP16);
    VirtualProtect((LPVOID)&VTable[17], 4, VP17, &VP17);
}
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,709
Парни, почему когда я рисую текстуру на экране у меня ники людей улетают в лево вверх?
 

loganhackerdff

Известный
868
517
А почему тот хук который я скинул (он не мой) не вызывает такой эффект?
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Я, конечно, ни на что не намекаю, но..
C++:
float FXT[2048];
        int _lines = 25;
        BASS_ChannelGetData(curTrack, FXT, BASS_DATA_FFT1024);
        int _x1, _y1;
        int b0 = 0;
        for (_x1 = 0; _x1 < _lines; _x1++)
        {
            float peak = 0;
            int b1 = (int)pow(2, _x1 * 10.0 / (_lines - 1));
            if (b1 > 511) b1 = 511;
            if (b1 <= b0) b1 = b0 + 1;
            for (; b0 < b1; b0++) {
                if (peak < FXT[1 + b0])
                    peak = FXT[1 + b0];
            }
            _y1 = (int)(sqrt(peak) * 3 * 65 - 4);
            if (_y1 > 70)
                _y1 = 70;
            if (_y1 < 0)
                _y1 = 0;
            int _x2 = (int)setting.Pos.fX + 150 + (5 * _x1 + 2 * _x1) - 13 * 2 - 40;
            int _y2 = (int)setting.Pos.fY + (int)setting.fTime->DrawHeight() + (int)setting.fSong->DrawHeight() + hHeader + 100 - 19;
            render->DrawBox(_x2, _y2 - _y1, 5, _y1, setting.mColor);
        }
 

oukibt

Участник
29
31
C++:
float FXT[2048];
        int _lines = 25;
        BASS_ChannelGetData(curTrack, FXT, BASS_DATA_FFT1024);
        int _x1, _y1;
        int b0 = 0;
        for (_x1 = 0; _x1 < _lines; _x1++)
        {
            float peak = 0;
            int b1 = (int)pow(2, _x1 * 10.0 / (_lines - 1));
            if (b1 > 511) b1 = 511;
            if (b1 <= b0) b1 = b0 + 1;
            for (; b0 < b1; b0++) {
                if (peak < FXT[1 + b0])
                    peak = FXT[1 + b0];
            }
            _y1 = (int)(sqrt(peak) * 3 * 65 - 4);
            if (_y1 > 70)
                _y1 = 70;
            if (_y1 < 0)
                _y1 = 0;
            int _x2 = (int)setting.Pos.fX + 150 + (5 * _x1 + 2 * _x1) - 13 * 2 - 40;
            int _y2 = (int)setting.Pos.fY + (int)setting.fTime->DrawHeight() + (int)setting.fSong->DrawHeight() + hHeader + 100 - 19;
            render->DrawBox(_x2, _y2 - _y1, 5, _y1, setting.mColor);
        }
Ничем мне это не помогло. Мне интереснее, как создавать и формировать текстуру в другом потоке, а затем просто рендерить её
 

oukibt

Участник
29
31
Жаль. На моём старом компе это не вызывало никаких дропов
Не знаю, я компилировал с флагом -O2, и некоторый код вообще было не узнать после дизассемблирования, он очень сильно преображался. Может это потому, что у тебя 30 линий, а у меня 90?
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Вполне может быть. Просто сильно много линий прям не надо рисовать. Имхо
 

kin4stat

mq-team
Всефорумный модератор
2,730
4,709
Но в этом, вроде, и есть идея эквалайзера
Не знаю почему у вас проседает фпс от 90 линий, в эквалайзере по ссылке ниже 8к линий спокойно рендерится лол
 
Последнее редактирование: