Без отображения, я использую GL_LINEAR
для фильтрации как мин, так и фильтров.
Когда масштаб увеличивается, соседние пиксели в вашем фрагментном шейдере соответствуют текселям в вашей текстуре, которые находятся далеко друг от друга. С GL_LINEAR это означает, что тексели не только далеки друг от друга по текстуре, но и далеки друг от друга в памяти.
При масштабе ближе к 1: 1 соседние пиксели в фрагментном шейдере будут взяты из текселей, которые также расположены близко друг к другу. Это означает, что они будут близко друг к другу в памяти, что означает лучшую локальность памяти. Это требует меньше выборок из памяти.
Текстуры с MipMap не имеют этой проблемы, и они часто выглядят также лучше, потому что у них нет проблем с псевдонимами, которые вы видите при минимизации GL_LINEAR.
Имитация его на процессоре
У CPU такая же проблема с извлечением памяти.
float sum(float *arr, int size, int stride, int count) {
int pos = 0;
float sum = 0.0f;
for (int i = 0; i < count; i++) {
pos = (pos + stride) % size;
sum += arr[pos];
}
return sum;
}
По мере увеличения stride
производительность ухудшается. Это происходит по той же причине, по которой производительность вашего фрагментного шейдера ухудшается, даже если это происходит на процессоре.