ОписаниеРасширение позволяет использовать функцию
"scissor test": ограничивать область вывода.
Другими словами, за пределами указанного прямоугольника не будет выводиться ничего. Например, с помощью этой функции можно вывести текст в ограниченной области без использования поверхностей (surfaces). Так можно реализовать окно сообщения с плавной прокруткой текста. Кроме того, фрагменты (графика), которые не выводятся, практически не затрачивают ресурсов gpu (как и графика, рисуемая за пределами поверхности, например). В этом можно убедиться, если нарисовать что-то большое с scissor rectangle размером в 0,0.
Скачать.gmez расширение:
https://dl.dropboxusercontent.com/u/7808750/scissor.gmez.gmz пример:
https://dl.dropboxusercontent.com/u/7808750/scissor_test.gmzПлатформыWindows и
Ubuntu (Linux)
По необходимости могу добавить поддержку MacOS.
Функцииscissor_init();
— Следует вызвать один раз в начале игры. Увы, инициализация расширений и макросов вызывается до инициализации окна, а scissor_init на windows использует функцию window_device.
scissor_begin(x, y, width, height)
— Устанавливает позицию и размер ограничивающего прямоугольника (
в системе координат окна (поверхности).
scissor_end()
— Отключает использование ограничивающего прямоугольника.
Пример использованияscissor_begin(8, 8, 128, 128);
draw_clear(c_black);
scissor_end();
ЛицензияДелайте с этим что хотите: используйте, распространяйте, редактируйте, продавайте, выкладывайте от своего имени. Если это поможет вам или кому-то другому — я буду только рад.
Технические подробностиscissor_begin и scissor_end вызывают vertex_submit очень простого вершинного буфера, состоящего из одной вершины. На данный момент это самый простой и эффективный способ из известных мне заставить GMS отправить текущий буфер видеокарте. Если будут другие предложения (могут быть с кодом на directx / opengl) — буду рад услышать.