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

Dark_Knight

Me, me and me.
Друг
4,082
2,105
ну а ты что думал. Ты же рисуешь каждую линию отдельно и в ней ещё обчисления делаешь
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,654
2,535
в отдельном потоке отрисовывай всё в какую-то текстуру, а потом рендерь текстуру
 
  • Влюблен
Реакции: oukibt

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,810
в отдельном потоке отрисовывай всё в какую-то текстуру, а потом рендерь текстуру
А еще потрахайся с синхронизацией потоков, хороший совет.
Тут нужно рендер оптимизировать, а не на потоке рендерить. Тем более он скорее всего сделает CPU-Side рендер, что ему не особо то и поможет. Тут нужно рендер оптимизировать. Я бы попробовал имгуи рендер заюзать
 
  • Нравится
Реакции: oukibt

SR_team

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

loganhackerdff

Известный
868
519
матрицы похерил. Если не хочешь менять место хука, то сохраняй их, но это ударит по 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 · kin4@naebalovo.team
Всефорумный модератор
2,744
4,810
Парни, почему когда я рисую текстуру на экране у меня ники людей улетают в лево вверх?
 

loganhackerdff

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

Dark_Knight

Me, me and me.
Друг
4,082
2,105
Я, конечно, ни на что не намекаю, но..
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);
        }
Ничем мне это не помогло. Мне интереснее, как создавать и формировать текстуру в другом потоке, а затем просто рендерить её