Я использую 3D-текстуру и пытаюсь применить линейную интерполяцию, например, так:
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
Сбой с этой ошибкой:
ПРЕДУПРЕЖДЕНИЕ ОБ ОТКРЫТОК: текстура привязана к текстуреЕдиница 0 не подлежит передаче.Это может быть не степень 2 и несовместимая фильтрация текстур.
Тот же код работает, как и ожидалось, при использовании NEAREST (только без интерполяции).Я озадачен тем, что мне не хватает.Эта комбинация форматов не поддерживает LINEAR?Как я могу добавить линейную интерполяцию к этому?
фрагмент шейдера:
#version 300 es
precision highp float;
precision highp int;
precision highp isampler3D;
uniform isampler3D textureData;
in vec3 v_texcoord;
out vec4 color;
void main()
{
int raw = texture(textureData, v_texcoord).x;
if (raw > 0) {
color = vec4(1.0, 0.0, 0.0, 1.0);
} else {
color = vec4(0.0, 0.0, 0.0, 1.0);
}
}
использование текстуры:
const texture = gl.createTexture();
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_3D, texture);
// LINEAR fails
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
// NEAREST works
//gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
//gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
gl.clearColor(0.0, 0.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.texImage3D(gl.TEXTURE_3D, 0, gl.R16I, x, y, z, 0, gl.RED_INTEGER,
gl.SHORT, data);