Вариант с put-pixel / set-pixel довольно прожорлив для реалтайма, да ещё и для мобилок.
На OpenGL есть такая замечательная фишка, как Stencil buffer. Но я ею совсем не владею.
Подскажите, как за счёт данного буфера скопировать (не вырезать) часть фона по заданным координатам X Y в виде маски-окружности, и наложить на этот же фон но с некоторым оффсетом.
alkolove1, круто, FBO у тебя, значит, уже есть. Значит еще можно сделать.
Ну а теперь поинтереснее вопрос. Что же ты конкретно хочешь сделать?
Дело в том, что трафарет не всегда нужен и не всегда уместен. И не всегда его так просто использовать для решения задачи.
Вдруг тебе и не трафарет вовсе нужен, а просто оффскрин квад в мультитекстурироавнием? В общем, разобраться в вопросе надо.
Евгений Шатунов, реализовать можно хоть через манипуляции с режимами альфа-блендинга, имхо. Вот только как?
Что конкретно нужно, я уже описал выше - есть фон, рендерящийся в FBO.
По заданным XY копируется окружность радиусом 24 пикселя, например. Затем скопированное выплёскивается с некоторым смещением.
Тем самым я хочу имитировать преломление света невидимого шарика.
Конечно вариант с радиальным искажением линзы смотрелся бы эффектнее (как в демосценах ретро-компов). Но тут уже нужно шейдера использовать, а в них я ещё больший нуб.
alkolove1, у тебя постановка вопроса не информативна.
По заданным XY копируется окружность радиусом 24 пикселя, например.
В каких координатах эти XY: в экранных нетрансформированных, в линейном пространстве, в мировых координатах, в координатах вьюпорта, в координатах линейного пространства FBO? 24 пикселя, снова, в каком пространстве?
Я просто так вопросы не задаю.
реализовать можно хоть через манипуляции с режимами альфа-блендинга
Ты как буферы собрался копировать через блендинг-то? Погоди писать странное, пока еще не время. :)
В целом, если я правильно догадался, то твоя задача должна выглядеть так.
У тебя есть 2D сцена, на ней есть объект с формой окружности. После рендеринга всей сцены в FBO тебе хочется взять участок готового FBO точно под обозначенным округлым объектом и повторить его на все тот же FBO в режиме смешивания и с желаемым смещением.
Это можно сделать без трафарета, с мутьтитекстурированием и шейдингом. Выводишь FBO в оффскрин, а следом готовишь квад с двумя наборами текстурных координат. Первый набор - это позиция в линейном пространстве текстуры твоего первого FBO. Это - позиция нужного тебе объекта, отображенная в линейном пространстве текстуры FBO.
Второй набор - это координаты в линейном пространстве координат текстуры маски. Маска может иметь любую форму в таком случае, не только окружность. Маску можешь сделать монохромной градиентной, а в шейдере через нее задавать альфу для цвета из FBO. Второй квад выводишь где тебе хочется поверх уже выведенного в оффскрин FBO и с желаемым смешиванием.
Если ты все сделаешь правильно, то оба квада (оффскрин с FBO и повтор участка FBO) ты будешь выводить за один DIP. Т.е. эффективно.
А шейдеры тебе изучать нужно вчера. Сегодня уже поздно, сегодня ты уже что-то рисовать пытаешься.
Евгений Шатунов, у меня вся сцена рендерится в FBO, а тот в свою очередь растягивается по экрану. Так что меряем координаты в пределах линейного пространства фбо.
А на счёт блендинга. Ну... Была такая идея создать ещё один фбо, на него с оффсетом повторно рендерить фон, затем XOR-ом, или ещё каким методом смешивания обрезать по маске, и полученный fbo наложить поверх уже существующего. Ну, это всё теории...