(я делаю это в Apple, Metal, но я думаю, что вопрос относится к OpenGL и DirectX тоже. Примеры кода из металла или OpenGL очень приветствуется.)Как декодирует текстуру
У меня есть одна текстуры smallTex
размер которого кратен размеру другой текстуры bigTex
.
Например, smallTex
имеет размеры 32x32
и bigTex
имеет 128x128
.
мне нужно декодируют содержимое bigTex
в smallTex
так, что каждый пиксель в smallTex
содержит средние значения соответствующих пикселей в bigTex
.
Сначала я подумал, что смогу создать фрагментарный шейдер, образцы которого от bigTex
и отображает до smallTex
. Однако таким образом я бы потерял много информации, так как выборка читается не более четырех пикселей и интерполирует между ними.
Мне нужна реальная понижающая дискретизация, где каждый пиксель в источнике оказывает такое же влияние на результат.
Я читал, что это можно сделать, используя мипмапы (которые по существу представляют собой уменьшенные копии исходной текстуры). Но тогда мне пришлось бы включить mipmapping на bigTex
, что окажет отрицательное влияние на производительность, так как я делаю много шагов рендеринга (вычислений) на bigTex
, что приведет к большой работе для GPU для обновления mipmaps.
Что мне нужно - это прямая команда графического процессора для уменьшения размера текстуры.
Возможно ли это? Любые намеки?