(С++) как правильно применять градиентную кисть в цикле
А что в этом странного?
Ну можно вообще-то кэшировать.
Ну, все-таки кисть -- это GDI+ объект. Я правда не знаю что именно делает система при создании кисти, но мне кажется нерентабельным 10000 раз (это сетка 100х100) создавать и уничтожать объект с полной его инициализацией когда требуется только скорректировать несколько параметров. К тому же это все будет запускацца в цикле по времени...
Ну можно вообще-то кэшировать
Э-э-э-э-э... чуть поподробнее можно. Куда смотреть?
Ну просто не уничтожать объекты, сохранять их где-то...
ЗЫ. Сетка НЕ прямоугольная. Собственно это двумерное распределение некоторой величины в криволинейной системе координат. Сама сетка на данный момент меняцца будет редко, но в будущем это может изменицца, поэтому кэшировать кисти для каждой ячейки также представляется нерентабельным
Зачем для каждой ячейки? Кэшируй одинаковые.
Тогда и кэшировать нет никакого смысла
Ну значит придумывай, как делать эффективно...
Насколько я понмю гди+, там на всё всегда действуют матрицы трансформации, поэтому никаких "абсолютных координат" в общем скорее всего быть не должно. Пробовал их менять?
Неужели нет способа как-нить подкорректировать координаты у уже сконструированного объекта? Может кто-нить знает как устроены объекты этого класса? В хедере нет ни одного членоданного, вся инициализация идет через функции из пространства имен (видимо) DllExports. И еще, у GdiplusPath.h нет ни одного заголовочного файла. Откуда компилятор узнает сигнатуры для этих функций. Как все это работает
ЗЫ. студия -- MS VS 2005Nov
Из гака подгружаются намеспейсы прям на ходу.
Как все это работает
C++ тоже генерит .NET код? Т.е. любая прога скомпиленная в 2005-й студии превращается в .NET?
или только в том случае, если встречается вызов соответствующих функций?
C++ тоже генерит .NET код?Только в случае подключения Managed-кода.
Из гака подгружаются намеспейсы прям на ходу.
Подгружаются сборки, а не namespace-ы. В одной сборке может быть несколько namespace-ов, один и тот же namespace может быть раскидан хоть по 1000 сборок и .net об этом знать не будет. Namespace вообще не несет никакой смысловой нагрузки, кроме роли префикса в имени пути, чтобы группировать классы с похожей функциональностью в одном namespace-е.
Спасибо, что поправил
на основании каких данных ты решил, что создание кисти с нуля, сильно хуже, чем изменение основных параметров кисти, от которых полностью зависит внутреннее состояние кисти?
Если она создаёт какой-то графический ресурс - то вполне может быть очень невыгодно создавать каждый раз заново. А если это просто математический объект, типа rectangle, тогда вообще по барабану.
на основании каких данных ты решил, что создание кисти с нуля, сильно хуже, чем изменение основных параметров кисти, от которых полностью зависит внутреннее состояние кисти?
Это подсказывает мой прошлый опыт программирования (см также сообщение от ). Но поскольку GDI+ и .NET это для меня новая неосвоенная область -- я и хочу выяснить правильно ли это. В частности я выяснил, что вроде как в .NET выделение памяти реализовано намного более эффективо (так ли это? но вот про создание и использование системных объектов нашел только немного инфы.
use opengl
Оставить комментарий
4223080
Я чего-то непонимаю?PathGradientBrush создается на основании некоторого массива точек, но почему-то не содержит методов для его изменения. Т.е. получается, что если надо залить градиентами набор четырехугольников (например картинку то в цикле необходимо каждый раз создавать объект PathGradientBrush , отрисовывать его, а затем уничтожать?
На мой взгляд это довольно странно :/