#c #node.js #electron
#c #node.js #electron
Вопрос:
Я создаю переменную Uint8Array в собственном аддоне C .
Собственный аддон C создается node-gyp и napi.
Однако процесс рендеринга electron завершается сбоем, когда я использую переменную в качестве текстуры в WebGL.
Почему это так? Это ошибка в WebGL Electron?
Исходный код в собственном аддоне C .
#include <napi.h>
int width=800;
int height=600;
uint8_t* foo;
Napi::TypedArrayOf<uint8_t> get(const Napi::CallbackInfoamp; info )
{
buf = Napi::ArrayBuffer::New(info.Env(),foo,4*width*height);
ret = Napi::TypedArrayOf<uint8_t>::New(info.Env(),
4*width*height,
buf,
0);
return ret;
}
Napi::Object init( Napi::Env env, Napi::Object exports )
{
foo=new uint8_t[4*width*height];
exports.Set( Napi::String::New( env, "get" ), Napi::Function::New( env, get ) );
return exports;
}
NODE_API_MODULE( addon, init )
Части исходного кода на JavaScript
function draw() {
var texWidth=800;
var texHeight=600;
gl.clearColor(0.0, 0.0, 0.0, 1.0);
//get variable of Uint8Array from C Native Addon
pixels = myaddon.get();
texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
//Crash here
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, texWidth, texHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE,pixels);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.bindTexture(gl.TEXTURE_2D, null);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.useProgram(program);
gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.uniform1i(uniforms['u_texture'], 0);
gl.drawArrays(gl.TRIANGLES, 0, 6);
}
Ответ №1:
Сбой происходит, когда код C обнаруживает необработанное исключение.
Где вы объявили buf и ret?
Также попробуйте выделить место для foo перед его использованием.
uint8_t* foo = new uint8_t[4*width*height];