(С++) как правильно применять градиентную кисть в цикле
А что в этом странного?
Ну можно вообще-то кэшировать.
Ну, все-таки кисть -- это GDI+ объект. Я правда не знаю что именно делает система при создании кисти, но мне кажется нерентабельным 10000 раз (это сетка 100х100) создавать и уничтожать объект с полной его инициализацией когда требуется только скорректировать несколько параметров. К тому же это все будет запускацца в цикле по времени...
Ну можно вообще-то кэшировать
Э-э-э-э-э... чуть поподробнее можно. Куда смотреть?
Ну просто не уничтожать объекты, сохранять их где-то...
ЗЫ. Сетка НЕ прямоугольная. Собственно это двумерное распределение некоторой величины в криволинейной системе координат. Сама сетка на данный момент меняцца будет редко, но в будущем это может изменицца, поэтому кэшировать кисти для каждой ячейки также представляется нерентабельным 

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

> Я правда не знаю что именно делает система при создании кисти, но мне кажется нерентабельным 10000 раз (это сетка 100х100) создавать и уничтожать объект с полной его инициализацией когда требуется только скорректировать несколько параметро
на основании каких данных ты решил, что создание кисти с нуля, сильно хуже, чем изменение основных параметров кисти, от которых полностью зависит внутреннее состояние кисти?
на основании каких данных ты решил, что создание кисти с нуля, сильно хуже, чем изменение основных параметров кисти, от которых полностью зависит внутреннее состояние кисти?
Если она создаёт какой-то графический ресурс - то вполне может быть очень невыгодно создавать каждый раз заново. А если это просто математический объект, типа rectangle, тогда вообще по барабану.
на основании каких данных ты решил, что создание кисти с нуля, сильно хуже, чем изменение основных параметров кисти, от которых полностью зависит внутреннее состояние кисти?
Это подсказывает мой прошлый опыт программирования (см также сообщение от ). Но поскольку GDI+ и .NET это для меня новая неосвоенная область -- я и хочу выяснить правильно ли это. В частности я выяснил, что вроде как в .NET выделение памяти реализовано намного более эффективо (так ли это? но вот про создание и использование системных объектов нашел только немного инфы.
use opengl
Оставить комментарий
4223080
Я чего-то непонимаю?PathGradientBrush создается на основании некоторого массива точек, но почему-то не содержит методов для его изменения. Т.е. получается, что если надо залить градиентами набор четырехугольников (например картинку то в цикле необходимо каждый раз создавать объект PathGradientBrush , отрисовывать его, а затем уничтожать?
На мой взгляд это довольно странно :/