Вопрос Почему D3D так лагает? Хелп плз.

Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции[?]
1
Поинты[?]
0
Отрисовываю в hkEndScene DrawLine с помощью D3D, чем больше отрисовываю линий, тем больше лагов. Линий всего 20-30 штук допустим, но фпса становится неиграбельно мало. Какие есть более эффективные варианта отрисовки, или что я делаю не так, что настолько сильно лагает?
C++:
void DrawLine(int x1, int y1, int x2, int y2, int thickness, D3DCOLOR col) {
    ID3DXLine* lineL;
    D3DXCreateLine(ExternalDevice, &lineL);
    D3DXVECTOR2 Line[2];
    Line[0] = D3DXVECTOR2(x1, y1);
    Line[1] = D3DXVECTOR2(x2, y2);

    lineL->SetWidth(thickness);
    lineL->Draw(Line, 2, col);
    lineL->Release();
}
//далее уже в hkEndScene
if (checkBox_smth) {
        //Допустим вызываю DrawLine
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220));
        DrawLine(100, 200, 1000, 700, 1, D3DCOLOR_ARGB(255, 255, 255, 220)); 
    }
 
Keine panik!
Эксперт
Статус
Оффлайн
Регистрация
29 Апр 2020
Сообщения
812
Реакции[?]
417
Поинты[?]
49K
Ты создаешь объект линии каждый раз когда ее отрисовываешь, это очень медленно, создавай однажды при инициализации, используй много раз до ресета.
Стандартные классы DirectX вообще не блещут скоростью, медленные линии, медленные шрифты.
Поэтому гораздо выгоднее самому отрисовывать геометрию в полигоны (треугольники), это позволяет сделать кучу оптимизаций и тут ты не привязан к DirectX конкретно и легко портировать на другие бэкэнды.
 
Сверху Снизу