Я преобразовал свой личный каркас OGLES 2.0, чтобы воспользоваться преимуществами функциональности, добавленной новым каркасом iOS 5 GLKit
.
После приятных результатов, я хочу реализовать механизм выбора цвета, описанный здесь . Для этого вы должны получить доступ к заднему буферу, чтобы получить значение RGBA пикселя, которого коснулись, которое затем используется в качестве уникального идентификатора для объекта вершины / примитива / дисплея. Конечно, для этого требуется временная уникальная окраска всех вершин / примитивов / экранных объектов.
У меня есть два вопроса, и я был бы очень благодарен за помощь в любом из них:
У меня есть доступ к
GLKViewController
,GLKView
,CAEAGLLayer
] (изGLKView
) иEAGLContext
. У меня также есть доступ ко всем командам, связанным с буфером OGLES 2.0 .Как мне объединить их, чтобы определить цвет пикселя в EAGLContext, который я нажимаю на экране?Учитывая, что я использую объекты буфера вершин для рендеринга, есть ли удобный способ чтобы переопределить цвет, предоставленный моему вершинному шейдеру , который, во-первых, не требует изменения атрибутов буферизованной вершины (цвета) , а во-вторых, не требует добавления оператора IF в вершинный шейдер?
Я предполагаю, что ответ на (2) - «нет», но из соображений производительности и несложного обновления кода я подумал, что разумно проконсультироваться с кем-нибудь более опытным.
Любые предложения будут с благодарностью приняты. Спасибо за ваше время.
ОБНОВЛЕНИЕ
Теперь я знаю, как читать пиксельные данные из активного фрейм-буфера с помощью glReadPixels . Так что я думаю, мне просто нужно выполнить рендеринг специальных «уникальных цветов» в задний буфер, ненадолго переключиться на него и прочитать пиксели, а затем переключиться обратно. Это неизбежно создаст визуальное мерцание, но я думаю, что это самый простой способ; безусловно, быстрее (и разумнее), чем создание CGImageContextRef
из снимка экрана и его анализ.
Тем не менее, мы будем очень благодарны за любые советы относительно заднего буфера.