В WebGL Я пытаюсь отправить компонент текстуры с плавающей точкой 1 на GPU:Как отправить текстуру компонента float 1 на GPU?
var array = new Float32Array(4096*4096);
// ... read array from file
var float_texture_ext = gl.getExtension('OES_texture_float');
var texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texImage2D(gl.TEXTURE_2D, 0, 4096, 4096, 0, gl.ALPHA, gl.ALPHA, gl.FLOAT, array);
Но это не работает. В Chrome на моем компьютере, я получаю следующие предупреждения:
WebGL: INVALID_OPERATION: texImage2D: incompatible format and internalformat
[.WebGLRenderingContext-1A49BCD8]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering.
Я также попытался с gl.RGBA, gl.RGBA но получили тот же результат.
Как это сделать?
Благодарим вас за предложения gman. Однако я включаю расширения с плавающей запятой (см. 3-я строка). Я также проверил возвращаемое значение, и оно не равно нулю. Также у меня есть этот код для работы с линейной фильтрацией для gl.UNSIGNED_INT, но я попробую включить его в любом случае. – Andy
Извините, я не обращал внимания. Обновлен ответ – gman