Вы можете включить проверку дальности в свой шейдер. Установка Параметр Clamp_to_edge влияет на то, какие пиксели вы получаете только после выборки, поэтому координаты текстуры, поступающие в ваш шейдер, будут по-прежнему выходить за пределы диапазона от нуля до единицы, когда вы находитесь в области, где вы не хотите выводить какие-либо пиксели. На оборудовании, обычно используемом сегодня для GL ES, быстрее передать цвет с альфа-значением 0, чем отбрасывать, так что делайте это, если ваш режим смешивания позволяет это.
например. Предположим, у вас есть только самый простой текстурный фрагментный шейдер:
void main()
{
gl_FragColor = texture2D(tex2D, texCoordVarying);
}
Вместо этого вы можете использовать:
void main()
{
if(clamp(texCoordVarying, vec2(0.0, 0.0), vec2(1.0, 1.0)) == texCoordVarying)
gl_FragColor = texture2D(tex2D, texCoordVarying);
else
gl_FragColor = vec4(0.0); // or discard, if you need to
}
Однако явная проверка диапазона добавит стоимость обработки. Очевидно, беспокоиться об этом, только если это становится проблемой, но решение в этом случае просто добавить границу внутри вашей текстуры. Поэтому, если ваша текстура имеет размер 256x256, вы бы использовали центральные 254x254 пикселя и поместили бы полностью прозрачную рамку вокруг внешней стороны.
РЕДАКТИРОВАТЬ: более четко мыслить, если приемлема альфа-версия, а не отбрасывание, тогда можно использовать функцию шага для устранения условного выражения. Сделайте это четыре раза - один раз для каждого предела на каждой оси, инвертируйте результаты там, где вы хотите больше, чем тест, а не меньше, затем умножьте выходной альфа на все четыре результата. Если любой из них равен нулю, выходной альфа будет равен нулю.