2013-08-12 4 views
2

Я использую emscripten для генерации некоторого Javascript, и я пытался выяснить, как получить функцию, которая вернула типизированный массив. Массив, который я пытаюсь вернуть, имеет статическую длину, но я немного смущен тем, как тип возвращаемого указателем будет обрабатываться на земле JS.Попытка получить asm.js для возврата типизированного массива

Является ли такого рода обертку способ сделать вещи: How do I access the Emscripten typed array from javascript?

Большое спасибо.

ответ

5

emscripten работает с помощью одного большого массива ArrayBuffer для кучи (при условии, что типизированные массивы включены, что они по умолчанию).

Компиляция модулей emscripten содержит свойства как для этого одиночного массива ArrayBuffer (Module.HEAP), так и для многих типизированных массивов ArrayBufferViews (Module.HEAPU8, Module.HEAPU32 и т. Д.).

Если вы получили указатель на начало прилегающего массива, вы можете получить новый вид данных, которые она представляет, делая (обратите внимание, я использую HEAP8 предполагая, что это, возможно, массив символов):

Также стоит отметить, что каждый типизированный вид принимает аргументы на основе элементов, а указатели emscripten возвращают представление байта в кучу. Таким же примером может служить массив из 13 целых чисел:

var array = Module.HEAP32.subarray((ptr>>2), (ptr>>2)+13); 
+0

Ahhhh! Большое спасибо. Его трудно получить представление о внутренней работе этого зверя, глядя на выход. Знаете ли вы о каких-либо хороших учебниках, или я могу написать, когда узнаю? – meawoppl

+1

Я мало знаю о способах обучения, но подписка на список рассылки - это хороший способ удержать ваше ухо от проекта https://groups.google.com/forum/#!forum/emscripten-discuss – inolen