in webgl trying send float 1 component texture gpu:
var array = new float32array(4096*4096); // ... read array 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); but not working. in chrome on pc following warnings:
webgl: invalid_operation: teximage2d: incompatible format , internalformat [.webglrenderingcontext-1a49bcd8]render warning: texture bound texture unit 0 not renderable. maybe non-power-of-2 , have incompatible texture filtering. i tried gl.rgba, gl.rgba got same result.
how do this?
your arguments gl.teximage2d out of order. it's
gl.teximage2d(target, level, internalformat, width, height, border, format, type, data); also should check result of getting floating point extension because plenty of phones , tablets don't support them should @ least tell user it's not going work.
var ext = gl.getextension("oes_texture_float"); if (!ext) { alert("this device not support floating point textures"); } and, if want linear filtering floating point textures need enable too.
var ext = gl.getextension("oes_texture_float_linear"); if (!ext) { alert("this device can not filter floating point textures"); } note @ point in time (sept 2015) few popular phones support filtering on floating point textures.
Comments
Post a Comment