-
Sapersky а если рисовать через Direct2D быстрее будет?
-
Думаю, не будет. Я сравнивал вывод картинки из системной памяти на экран через GDI/DX7/DX9 - получилось более-менее одинаково, причём GDI показал самые стабильные результаты на разном железе. До D2D (фактически D3D11) ещё не добрался, но вряд ли там что-то принципиально изменилось. К тому же расчёт тормозит гораздо больше, чем рисование. В идеале надо переводить на шейдеры или OpenCL, примерно так: http://www.patriciogonzalezvivo.com/blog/?p=657Проблема с рисованием при этом отпадает сама собой - картинка уже в видеопамяти.
-
Sapersky У Вас есть возможность перевести? Был бы очень благодарен! Мне пока знаний не хватает :( Кстати симуляция воды на виде по ссылке не такая красивая как у Вас. Напоминает тот пример, что я раньше находил исходник я удалил за ненадобностью, но вот скрин нашёл http://www.decoding.dax.ru/download/units/graph/WaterEffect.png
-
Вряд ли это единственная статья во всей сети, ищи на русском по запросу "шейдер вода 2D" или как-то в этом духе. Что касается красоты - сишная демка, на основе которой я писал свою, тоже выдавала не слишком красивую картинку. Но я перешёл с 8-битных буферов на 16/32-битные и добавил освещение. С 3D-графикой такое тоже можно сделать.
-
Sapersky > ищи на русском по запросу "шейдер вода 2D" или как-то в > этом духе.
искал, и на английском тоже - ничего интересного > В идеале надо переводить на шейдеры или OpenCL
немного прочитал про OpenCL - очень интересно. Скорость и платформонезависимость большой плюс. Вот только что ты имеешь виду? передавать вычисление алгоритма воды библиотеке или создавать потоки с её помощью? Судя по http://lab4.fme.vutbr.cz/heatlab/OpenCLforDelphi.html#Where_to_get_OpenCL_drivers_for_youбенчмарку при переводе на OpenCL может отпасть необходимость в многопоточности?
-
Да, переносить вычисления. OpenCL'ное ядро (kernel) пишется так, чтобы обрабатывать один элемент данных, пиксель в данном случае. А OpenCL его вызывает для всех элементов/пикселей, автоматически распараллеливая по ядрам процессора или видеокарты. С шейдерами тот же самый принцип. И кстати, если захочется сделать эффективный вывод картинки на экран (не гонять её в системную память, потом обратно в видео через GDI), то всё равно придётся использовать OGL/DX, передавая им OpenCL'ные данные.
|