|
@@ -1133,6 +1133,14 @@ class GlDriver extends Driver {
|
|
gl.texImage2D(face, mipLevel, t.t.internalFmt, pixels.width, pixels.height, 0, getChannels(t.t), t.t.pixelFmt, stream);
|
|
gl.texImage2D(face, mipLevel, t.t.internalFmt, pixels.width, pixels.height, 0, getChannels(t.t), t.t.pixelFmt, stream);
|
|
#elseif js
|
|
#elseif js
|
|
var bufLen = pixels.stride * pixels.height;
|
|
var bufLen = pixels.stride * pixels.height;
|
|
|
|
+ #if hxnodejs
|
|
|
|
+ if( (pixels:Dynamic).bytes.b.hxBytes != null ) {
|
|
|
|
+ // if the pixels are a nodejs buffer, their might be GC'ed while upload !
|
|
|
|
+ // might be some problem with Node/WebGL relation
|
|
|
|
+ // let's clone the pixels in order to have a fresh JS bytes buffer
|
|
|
|
+ pixels = pixels.clone();
|
|
|
|
+ }
|
|
|
|
+ #end
|
|
var buffer : ArrayBufferView = switch( t.format ) {
|
|
var buffer : ArrayBufferView = switch( t.format ) {
|
|
case RGBA32F, R32F, RG32F, RGB32F: new Float32Array(@:privateAccess pixels.bytes.b.buffer, pixels.offset, bufLen>>2);
|
|
case RGBA32F, R32F, RG32F, RGB32F: new Float32Array(@:privateAccess pixels.bytes.b.buffer, pixels.offset, bufLen>>2);
|
|
case RGBA16F, R16F, RG16F, RGB16F: new Uint16Array(@:privateAccess pixels.bytes.b.buffer, pixels.offset, bufLen>>1);
|
|
case RGBA16F, R16F, RG16F, RGB16F: new Uint16Array(@:privateAccess pixels.bytes.b.buffer, pixels.offset, bufLen>>1);
|