Monday, September 6, 2010

Асинхронно выводить на экран?

Или маленькая мысль о том:
так ли X-протокол безнадежно устарел.

А зачем нужно не дожидаться завершения операции? Это хорошо когда нужно следить за большим количеством редко случающихся событий (делаем только по событию), но не очень хорошо при прорисовке, я думаю лучше все же иметь возможность отменить посылки до того как они полностью отосланы.

В общем идея такая: в отдельном потоке держать обработку списка задач которые синхронно отсылаются на сервер (возможно похоже на случай с Beos, где в app-server запущен еще один дополнительный поток на каждое окно, если верить некоторым публикациям), если потребность в них отпала - пользователь или кто то еще изменил существенно прорисовку зачем продолжать? Так мы можем определить, что за секунду мы прорисовываем 1000 примитивов и постепенно прорисовывать их пока не закончиться временной лимит, или кто-то не отменит прорисовку. В результате того как сейчас работает X протокол мы можем, если пользователь был не очень активен последнее время - с устройств ввода не было событий мы можем спокойно поставить проверку на ввод после n-го элемента(или по времени смотря что раньше произойдет), что выведет проверку на состояние каждые 1 секунду, и когда появляется активность ставить проверку на десятые доли секунды. Думаю это существенно снизит нагрузку на процессор.

Для OpenGL- есть примерно подобная идея - создавать буфер для списка отображаемых объектов (буфер глубины), но не для конечных точек, а для больших объектов. И отбрасывать сразу целыми объектами, и если мы не попадаем в какой-то лимит отображения за время, например кадров секунду, отбрасывать все мелкие объекты(или те которые большие, но далеко) и следующий кадр рисовать уже без них, так как в основном все кадры подобны это должно дать несколько дерганое время прорисовки кадров, которое стремится оптимизироваться под соотношение размер элемента/время кадра. Правда я не уверен, есть ли сейчас отбрасывание объектов сразу при начале заполнения очереди, но отбрасывания по размерам объектов (не примитивов) я не слышал, и в классическом рисунке графического конвейера его не видно.

No comments: