Как в sfml можно немного изменить следующий кадр, взяв за основу предыдущий? Например, на первом кадре я рисую 5 прямоугольник не накладывающихся друг на друга с помощью window.draw(rect), затем после этого я вывожу на экран эти прямоугольники window.display(), тут заканчивается первый кадр. На втором кадре мне нужно стереть первый прямоугольник и оставить остальные. Для этого я меняю цвет прямоугольника на цвет фона, применяю window.draw(rect) только 1 раз (потому что я меняю только 1 объект), после вывожу на экран изменения window.display(). И получается, что очищается все окно, т.е. если бы я первому прямоугольнику задал бы не черный, а какой-нибудь красный, то у меня бы отрисовался только этот первый прямоугольник с красным цветом. Предыдущий кадр словно просто удаляется. Соответственно для каждого кадра нужно заново все отрисовывать, что довольно трудоемко. п.с. Пишу игру жизнь (клеточный автомат) и на поле с 250х250 клетками жуткие тормоза из-за этой полной перерисовки кадра. п.с.(2) До этого писал на чистом си с древней библиотекой graphics.h, там я мог отрисовать только изменившие свое состояния клетки, а не все поле заново, что позволяло ускорить производительность в раз 10 по сравнению с работой в sfml на c++.
>>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();
>>1027586 Обрабатывай данные отдельно, рендери отдельно. Заведи отдельный тред для модификации данных, отрабатывающий раз в секунду. А основной тред пусть просто их рисует.
>>1027648 Типа параллельно обрабатывать и рисовать? Многопоточность? Думаю дело не в этом, слишком простая задача для того, чтобы мудрить потоки. Если смотреть время отработки функции paint() в отладчике visual studio, то это около 100мс... Многовато, а ведь это по сути только рисование. Проверка каждого элемента массива field на true/false на самом деле занимает не более 5мс точно, так что поток тут роли не сыграет ощутимой. Надо что-то другое делать...
>>1026498 (OP) Блджад, во всех руководствах ко всем графическим библиотекам чёрным по белому написано: не ебитесь с пикселями, оптимизаторы хуевы, не пытайтесь закрашивать и стирать, а перерисовывайте весь кадр целиком.
>>1027683 Епта, анон как в воду глядел хыыыыы махафака. И вправду надо было в релиз перейти, какого хуя? Почему релизная сборка влияет так на производительность?? Сейчас у меня 60+фпс, как у уважающего себя пекаря.
>>1027811 Да понял я это, прочитал уже сам... Это моя первая по сути графическая библиотека после борландовской графики bgi (там для повышения производительности нужно было сохранять как можно больше пикселей, которые на следующем кадре не менялись).
>>1027778 Кстати, тут тоже на этот счет сомневался, но решил попробовать после твоего совета. Итог: с конструкторами работает в 2 раза быстрее (по замеркам времени в дебаге), чем с обращением на прямую position.x = ... positition.y = ... Но на практике разница всего около 5 кадров.
п.с. Пишу игру жизнь (клеточный автомат) и на поле с 250х250 клетками жуткие тормоза из-за этой полной перерисовки кадра.
п.с.(2) До этого писал на чистом си с древней библиотекой graphics.h, там я мог отрисовать только изменившие свое состояния клетки, а не все поле заново, что позволяло ускорить производительность в раз 10 по сравнению с работой в sfml на c++.