Привет, это мой первый раз, когда я задаю вопрос здесь, так что простите меня, если я что-то напутал> ~ <</p>
Я работаю над программой, похожей на openCanvas, более ранние, которые позволяли нескольким людямрисовать на одном полотне в реальном времени через интернет.OC действительно глючит и имеет много ограничений, поэтому я и хотел написать это.
Я настроил его так, чтобы холст "бесконечно" расширялся во всех направлениях и состоял из 512x512 блоков пикселей, которыене становитесь активными, пока они не нарисованы, что должно быть действительно легко сделать, и я думал об использовании Direct3D для аппаратного ускорения, таким образом, 512 квадратных блоков.
Моя проблема возникает, когда яЕсли вы хотите использовать слои, я не совсем уверен, как я могу составлять слои быстро и без использования тонны памяти, поскольку моя цель - совместимые с DirectX9 видеокарты с 128 м памяти и системой с процессором мощностью около 3,2 ГГц и между2 и 8 концертов оперативной памяти.У меня было несколько разных подходов, которые я собирался использовать, и мне было интересно, какой из них, вероятно, будет лучшим, и если есть что-то, что я мог бы изучить, чтобы заставить его работать лучше.
Моя первая идея состояла в том, чтобы сделать gfxаппаратные средства выполняют как можно больше работы, поскольку все слои на всех блоках служат текстурами, и они будут обновляться путем блокировки измененной области, обновления их в процессоре и разблокировки их.Блоки, которые в настоящее время не изменяются, сведены в одну текстуру, а отдельные слои хранятся в системной памяти, что уменьшит объем используемой памяти gfx, но может значительно увеличить использование полосы пропускания между системной и памятью gfx.Я вижу, что постоянная блокировка и разблокировка также могут сильно замедлять работу системы.Другая возможная проблема заключается в том, что я слышал, как некоторые люди используют до 200 слоев, и я не могу придумать каких-либо хороших способов оптимизации, учитывая вышесказанное.
Моя другая идея состояла в том, чтобы составить текстуры полностью- в системной памяти запишите их в текстуру и скопируйте эту текстуру в память gfx для визуализации в каждом блоке.Похоже, это устраняет многие проблемы с другим методом, но в то же время я перенесу всю работу в ЦП, а не балансирую его.Это не имеет большого значения, пока он все еще работает быстро, хотя.Опять же, однако, есть проблема наличия нескольких сотен слоев.В этом случае, однако, я мог бы, вероятно, обновить только последние пиксели, которые на самом деле меняются, что, как я думаю, делают крупные именные программы, такие как Sai и Photoshop.
Я в основном ищу рекомендации, предложения, которые могли быулучшить вышеупомянутые, лучшие методы или ссылки на статьи, которые могут быть связаны с таким проектом.Пока я пишу это на C ++, у меня нет проблем с переводом с других языков.Спасибо за ваше время ~