![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Надо ли???
drake © (2002-12-22 23:58:00)Решил написать Life-подобную прогу, использовал поначалу канвас,
но по мере увеличения количества клеток столкнулся с приличными тормозами графики, есть маза поменять приоритет программы на более высокй, но это черевато неприятными последствиями и глюками винды, а можно и переписать вывод графики под Opengl, так вот вопрос: что лучше сделать???
dRake (2002-12-26 23:10:00) [1]лана пусть живёт прога как есть, а я лучше щас фрактальчиками займусь :)
AlexT1000 (2002-12-26 12:10:00) [2]да . на канвас формы наиболее быстро. и помогает та штука,
которую я тебе написал
dRake (2002-12-24 23:04:00) [3]2 AlexT1000
Кстати играет какую нибудь роль то, что я вывожу не на канву формы,а на канвас paintbox"а??
AlexT1000 (2002-12-24 18:17:00) [4]> dRake
насколько я помню эта процедура как следует из ее имени отрабатыет очистку бэкграунда формы . если возвращать 1 то ты типа сам отвечаешь за очистку этой формы. иначе винды.
что то в этом роде.
вообщем несколько устраняет блыманье
sniknik (2002-12-24 17:09:00) [5]dRake © (24.12.02 14:28)
>а вот графа реально просаживает машину
а если сделать многопоточным? реальный способ разгрузить процесс.
dRake (2002-12-24 14:45:00) [6]Ещё просьба, если кто-то писал похожую игру: киньте пожалуйста исходники мне на мыло, буду очень признателен :)
dRake (2002-12-24 14:31:00) [7]>procedure WMErase(var msg:TMessage); message WM_ERASEBKGND;
>procedure TFormImage.WMErase(var msg: TMessage);
>begin
> msg.Result := 1;
>end;
2 AlexT1000 : А ты не прокоментируешь, что делают эти процедуры??
dRake (2002-12-24 14:28:00) [8]Вот вывод на битмап в память с последующим выводом на канвас
мне реально помог,исчезло моргание, я посмотрел - математика
реально почти не влияет - что миллион на миллион, что 100Х100
разницы почти нет(если графику отключить), а вот графа реально просаживает машину, попробую попросить другана через GL вывод графики делать... Кстати никто не подскажет, можно ли как-нибудь
быстрее выводить графику, не использую методы канваса, используя например winAPI или что-нибудь подобное??
Snap (2002-12-24 11:35:00) [9]А не прдкинете примерчик работы с DIB?
AlexT1000 (2002-12-24 11:30:00) [10]ты однозначно что то неправильно делаешь.
пересчитывать вообще нужно только, те которые будут в данный момент видны на экране.
и соответсвенно рисовать только их .
во вторых есть пару трюков которые ускоряют вывод на канву формы и убирают мерцание
procedure WMErase(var msg:TMessage); message WM_ERASEBKGND;
procedure TFormImage.WMErase(var msg: TMessage);
begin
msg.Result := 1;
end;
это раз. во вторых как говорил MBO рисовать все на битмап в памяти а потом гнать на форму.
ну и естественно заготовить текстуры квадратиков заранее и просто делть bitblt их на битмап.
вот такт то.
jfo (2002-12-24 09:45:00) [11]Хм года 2 назад писал подобную прогу... скорость достаточно высокая... правда и поле не сильно большое... если бы была возможность выложить в кладовку (не выкладывается) выложил бы :-)
sniknik (2002-12-24 08:34:00) [12]Danlicha © (23.12.02 22:58)
Про пикселя никто не говорил, с чего ты взял? Есть такое понятие, область просмотра, и размер клеток каой хочется такой и ставится. Ты ветку вообще читал, что обсуждается?
Danlicha (2002-12-23 22:58:00) [13]Да что вы ерундой занимаетесь, пардон. Во-первых, лайф красивее, когда она не по пикселям, а по довольно большим квадратикам. Их ещё можно разными цветами разукрашивать - ворзаст. А если уж припёрло по пикселям - не нужно никакого DirectDraw - берёте битмап, делаете его DIB, получаете адрес его в памяти и рисуете туда. И не надо никакого асемблера!
down (2002-12-23 22:54:00) [14]Нужно хранить не массив клеток в миллион на миллион, а список координат "живых" клеток, тогда и памяти меньше уйдет, и обработка будет быстрее.
sniknik (2002-12-23 22:31:00) [15]Еще в а голову пришло, элементарно конечно а вдруг у тебя не так.
Смысл. Рисовать не все подряд, а только если в клетке произошли изменения.
и насчет математики, как думаеш сколько занимает общет "миллион на миллион"? поставь у себя такой масив (если получится) и отключи вывод нахрен. (посмотреть на чистое время расчета)
drake (2002-12-23 22:00:00) [16]хз у меня тоже примерно одинаковые скорости что с галкой, что без неё, но как шустро она пашет-то ;) мне бы исходнички её =)
тем более что писана она на дельфах 3
sniknik (2002-12-23 20:23:00) [17]Посмотрел,
там в опциях есть галочка Enable DirectX, так вот при обоих положениях этой галочки скорость отрисовки (у меня) одинакова.
скачивал
Life32 v2.15
с http://life32.lifepatterns.net
чегото мне кажется что единственное оправдание этой галочки ссылка внизу "скачать DirectX" (на правах рекламы).
но это конечно мое личное мнение.
drake (2002-12-23 19:46:00) [18]ну почему не для??? посмотри прогу Life32 там массив клеток миллион на миллион и работает очень быстро и прога эта юзает для
вывода графики directX вот так.
sniknik (2002-12-23 19:19:00) [19]еще совет если позволите, отрисовку самих клеток тоже делай через Canvas.Draw(x, y, BitMask), естественно сначала нарисуй шаблоны. И над математикой подумай (не верю что она у тебя идеальна) может на asm расчеты делать?.
а directX вряд ли поможет, ну не для этого он, по моему.
drake (2002-12-23 19:02:00) [20]Попробовал оба способа....
Результат : при выводе на виртуальный имаг с последуюшим
переносом на канвас результата никакого 12-13fps как и было
2) Попробовал создать разные кисти заранее - fps просел до 8 :(
Пока что самый быстрый вариант у меня с самого начала был ,
похоже придётся сесть разучивать directX :)