如何从Native客户端和javascript中发送数组缓冲区

时间:2015-07-01 14:01:24

标签: javascript arrays google-chrome-app google-nativeclient chrome-native-messaging

我想从Javascript向Native Client模块发送一个数组缓冲区,然后我想将数组缓冲区转换为整数指针。我在nacl-sdk目录中看到了地球示例。他们正在传递图像数据并将其转换为:

    //javascript

    var imageData = context.getImageData(0, 0, img.width, img.height);
// Send NaCl module the raw image data obtained from canvas.
common.naclModule.postMessage({'message' : 'texture',
                               'name' : name,
                               'width' : img.width,
                               'height' : img.height,
                               'data' : imageData.data.buffer});

    //nativeclient
    std::string name = dictionary.Get("name").AsString();
    int width = dictionary.Get("width").AsInt();
    int height = dictionary.Get("height").AsInt();
    pp::VarArrayBuffer array_buffer(dictionary.Get("data"));
    if (!name.empty() && !array_buffer.is_null()) {
      if (width > 0 && height > 0) {
        uint32_t* pixels = static_cast<uint32_t*>(array_buffer.Map());
        SetTexture(name, width, height, pixels);
        array_buffer.Unmap();

我正在使用eclipse调试,我不知道如何检查是否正确接收了数组缓冲区以及是否可以将像素作为参数传递给某个函数,或者我必须在传递之前使用pixels = new uint32_t[size]创建它们。 更重要的是,我需要知道如何将uint32_t*像素转换为VarArrayBuffer并使用字典将其发送到Javascript并发布消息以及如何在Javascript中接收该消息并将消息处理为{{1价值。

1 个答案:

答案 0 :(得分:2)

最简单的例子是SDK中的ArrayBuffer示例(examples / api / var_array_buffer)。

ArrayBuffer的内存由pp :: VarArrayBuffer拥有,所以只要你有一个参考(你没有被称为pp::VarArrayBuffer::Unmap),你就不必制作一份记忆副本。

pp :: Var变量会自动引用计数,因此您无需明确调用AddRef