Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

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

  • Автор темы Автор темы Kuiresu
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
23 Мар 2021
Сообщения
29
Реакции
1
Отрисовываю в hkEndScene DrawLine с помощью D3D, чем больше отрисовываю линий, тем больше лагов. Линий всего 20-30 штук допустим, но фпса становится неиграбельно мало. Какие есть более эффективные варианта отрисовки, или что я делаю не так, что настолько сильно лагает?
C++:
Expand Collapse Copy
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)); 
    }
 
Ты создаешь объект линии каждый раз когда ее отрисовываешь, это очень медленно, создавай однажды при инициализации, используй много раз до ресета.
Стандартные классы DirectX вообще не блещут скоростью, медленные линии, медленные шрифты.
Поэтому гораздо выгоднее самому отрисовывать геометрию в полигоны (треугольники), это позволяет сделать кучу оптимизаций и тут ты не привязан к DirectX конкретно и легко портировать на другие бэкэнды.
 
Назад
Сверху Снизу