Сохранен 30
https://2ch.hk/pr/res/1026498.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Как в sfml можно немного изменить следующий кадр,

 Аноним 17/07/17 Пнд 15:20:32 #1 №1026498 
7fmAKGRG.png
WithPostprocess.141111.png
conway.png
TuringMachineinGolly.png
Как в sfml можно немного изменить следующий кадр, взяв за основу предыдущий? Например, на первом кадре я рисую 5 прямоугольник не накладывающихся друг на друга с помощью window.draw(rect), затем после этого я вывожу на экран эти прямоугольники window.display(), тут заканчивается первый кадр. На втором кадре мне нужно стереть первый прямоугольник и оставить остальные. Для этого я меняю цвет прямоугольника на цвет фона, применяю window.draw(rect) только 1 раз (потому что я меняю только 1 объект), после вывожу на экран изменения window.display(). И получается, что очищается все окно, т.е. если бы я первому прямоугольнику задал бы не черный, а какой-нибудь красный, то у меня бы отрисовался только этот первый прямоугольник с красным цветом. Предыдущий кадр словно просто удаляется. Соответственно для каждого кадра нужно заново все отрисовывать, что довольно трудоемко.
п.с. Пишу игру жизнь (клеточный автомат) и на поле с 250х250 клетками жуткие тормоза из-за этой полной перерисовки кадра.
п.с.(2) До этого писал на чистом си с древней библиотекой graphics.h, там я мог отрисовать только изменившие свое состояния клетки, а не все поле заново, что позволяло ускорить производительность в раз 10 по сравнению с работой в sfml на c++.
Аноним 17/07/17 Пнд 15:23:57 #2 №1026499 
Conwaysgameoflifebreederanimation.gif

Аноним 17/07/17 Пнд 15:25:42 #3 №1026501 
Trefoilknotconwaysgameoflife.gif
Аноним 17/07/17 Пнд 15:28:50 #4 №1026504 
rvYK59U.gif
Аноним 17/07/17 Пнд 16:16:47 #5 №1026524 
Видеокарта занимается этим за тебя, перерисовывай всё заново каждый кадр. В документации SFML так и советуют делать.
Тормоза из-за алгоритма видимо.
Аноним 17/07/17 Пнд 16:32:03 #6 №1026529 
>>1026524
Даже не знаю что может быть не так в алгоритме...
for (y = 0; y < height; y++)
{
for (x = 0; x < width; x++)
{
if (field[y][x] == true)
rect.setFillColor(C_CELL);
else
rect.setFillColor(C_BACKGROUND);
rect.setPosition(x size_cell, y size_cell);
window.draw(rect);
}
}
window.display();
Аноним 17/07/17 Пнд 16:33:13 #7 №1026531 
1.png
>>1026529
Аноним 17/07/17 Пнд 16:49:27 #8 №1026534 
>>1026531
>window.draw(rect);
Нахуя ты это в цикле-то вызываешь, еблан? Не знает он, блять. Глаза бы разул сначала и подумал хоть 5 минут.
Аноним 17/07/17 Пнд 16:56:31 #9 №1026537 
>>1026534
А где вызывать? У меня rect это один объект, который каждый раз меняет свое положение во время отрисовки кадра.
Аноним 17/07/17 Пнд 17:10:11 #10 №1026543 
>>1026531
У меня подозрение, что у тебя rect - на самом деле никакой не rect, а битмап, и ты их хуячишь сотнями штук. От этого и тормозит.
Аноним 17/07/17 Пнд 17:17:17 #11 №1026549 
2.png
>>1026543
3 фпса
Аноним 17/07/17 Пнд 17:18:38 #12 №1026551 
>>1026543
Что значи не объект? sf::RectangleShape rect(sf::Vectror2f(size_cell, size_cell)); его объявление (инициализация).
Аноним 17/07/17 Пнд 17:30:47 #13 №1026555 
>>1026549
Отрисовывай array пикселей через VetexArray, а не каждый по отдельности

ебанутый спамлист
Аноним 17/07/17 Пнд 17:30:47 #14 №1026556 
>>1026551
>debug

Макака, почисти ебучий спам-лист.
Аноним 17/07/17 Пнд 17:31:36 #15 №1026559 
>>1026556
Короче, с другими настройками собирай.
Аноним 17/07/17 Пнд 18:41:26 #16 №1026596 
>>1026566
>создать VertexArray на 1 лям вершин?
Можно, но лучше засунь свое говно в текстуру и рисуй один квад с ней.
Аноним 17/07/17 Пнд 20:23:16 #17 №1027489 
3.png
>>1026596
Решил я пока по своему сделать, выделить память 250к объектам класса VertexArray. Но не получается обратится к position. Что делаю не так?
Аноним 17/07/17 Пнд 23:41:02 #18 №1027586 
4.png
5.png
Короче, сделал через текстуру и вершины, но один хуй лагает.
Аноним 18/07/17 Втр 01:41:11 #19 №1027638 
>>1027586
Сделал через мильон вершин с одним вызовом draw(), стало 10 фпс. Но все равно мало... Анон, выручай(((999(((99(((
Аноним 18/07/17 Втр 03:43:38 #20 №1027648 
>>1027586
Обрабатывай данные отдельно, рендери отдельно. Заведи отдельный тред для модификации данных, отрабатывающий раз в секунду. А основной тред пусть просто их рисует.
Аноним 18/07/17 Втр 04:37:13 #21 №1027649 
>>1027648
Типа параллельно обрабатывать и рисовать? Многопоточность? Думаю дело не в этом, слишком простая задача для того, чтобы мудрить потоки. Если смотреть время отработки функции paint() в отладчике visual studio, то это около 100мс... Многовато, а ведь это по сути только рисование. Проверка каждого элемента массива field на true/false на самом деле занимает не более 5мс точно, так что поток тут роли не сыграет ощутимой. Надо что-то другое делать...
sageАноним 18/07/17 Втр 09:18:46 #22 №1027683 
>>1027649
скомпилируй не с дебуг-настройками, епта
Аноним 18/07/17 Втр 13:01:06 #23 №1027778 
>>1027649
Я думаю охуевшее количество конструкторов Vector2f играет роль.
sageАноним 18/07/17 Втр 13:41:48 #24 №1027811 
>>1026498 (OP)
Блджад, во всех руководствах ко всем графическим библиотекам чёрным по белому написано: не ебитесь с пикселями, оптимизаторы хуевы, не пытайтесь закрашивать и стирать, а перерисовывайте весь кадр целиком.
Аноним 18/07/17 Втр 15:11:41 #25 №1027857 
>>1027683
Епта, анон как в воду глядел хыыыыы махафака. И вправду надо было в релиз перейти, какого хуя? Почему релизная сборка влияет так на производительность?? Сейчас у меня 60+фпс, как у уважающего себя пекаря.
Аноним 18/07/17 Втр 15:15:13 #26 №1027860 
>>1027811
Да понял я это, прочитал уже сам... Это моя первая по сути графическая библиотека после борландовской графики bgi (там для повышения производительности нужно было сохранять как можно больше пикселей, которые на следующем кадре не менялись).
Аноним 18/07/17 Втр 15:26:28 #27 №1027865 
>>1027778
Кстати, тут тоже на этот счет сомневался, но решил попробовать после твоего совета. Итог: с конструкторами работает в 2 раза быстрее (по замеркам времени в дебаге), чем с обращением на прямую position.x = ... positition.y = ... Но на практике разница всего около 5 кадров.
Аноним 18/07/17 Втр 19:17:45 #28 №1027962 
>>1027857
Может потому что в дебажной конфигурации выключены оптимизации, и в реализации стандартной библиотеки еще куча отладочных действий делается?
Аноним 18/07/17 Втр 21:14:34 #29 №1028015 
>>1027865
Если тебе скорость нужна, можно прямо в шейдере все считать:
https://www.shadertoy.com/view/4s3GDf
Аноним 18/07/17 Втр 21:50:22 #30 №1028037 
>>1027962
Ты так думаешь? Хммм...
comments powered by Disqus