Почему функция setOutlineThickness() замедляет работу программы?

#c #sfml

#c #sfml

Вопрос:

У меня есть сетка, в которой я использую один объект sf: RectangleShape, и, изменяя его параметры внутри цикла, я могу заполнить ими большую область. Теперь я хочу сделать сетку видимой, чтобы помочь с размещением прямоугольников.

Но здесь возникает проблема.

Если я буду использовать rectPtr->getRect()->setOutlineThickness(-0.5f); Примечание: его указатель создан из пользовательского класса. По неизвестным причинам конечная программа становится действительно медленной и нестабильной. С ней все в порядке setOutlineThickness(0.f); . Я использую отрицательное значение из-за этой сетки, но проблем нет. он делает то же самое с положительными значениями.

Есть ли какой-нибудь способ использовать setOutlineThickness(); функцию, не замедляя работу программы?

Может быть, это какая-то ошибка?

Я использую sf::Transform матрицу 3×3 at window.draw() , может быть какое-то нарушение?

средний FPS с setOutlineThickness(-1.f) = 16.fps

средний FPS с setOutlineThickness(0.f) = 60.fps

большое спасибо

Комментарии:

1. Попробуйте использовать целочисленное значение (1.f вместо 0.5f). Я предполагаю, что использование такого маленького значения приводит к дополнительным вычислениям (вы не можете нарисовать половину пикселя, поэтому ваша видеокарта должна найти способ его визуализации).

2. Я попробовал. У него нет проблем с 0.5f. Не имеет значения, что находится внутри. 1, 1.f,.1.f ,0.5f . Если есть что-то отличное от 0, это каким-то образом замедляет работу конечного приложения.

3. Ну, тот факт, что это замедляет работу приложения, неизбежен. Я не знаю точно, как контуры работают с SFML, но я предполагаю, что для этого требуется отрисовка 4 дополнительных прямоугольников (16 вершин).

4. Если вам нужна сетка, возможно, лучшим вариантом будет рисовать только линии с использованием вершин

5. Я думаю, это будет лучший вариант. Вы правильно поняли, что она может создать 4 дополнительных прямоугольника. Но это устарело. Этот объект с контурами — это всего лишь одна прямоугольная фигура в куче, которая рисуется несколько раз с разными позициями. 4000 раз нарисован один объект. Итак, по базовой логике,. всего должно быть только 4 прямоугольных формы, заданных контуром.