Как получить ссылку на объявленную переменную алхимии asm во флэш-память? - PullRequest
1 голос
/ 28 марта 2011

у меня есть переменная, объявленная в алхимии asm:

asm("var buffer:Vector.<Number> = new Vector.<Number>(100, true);");

я могу заполнить его данными так:

asm("buffer[%0] = %1;" : : "r"(index) : "r"(value));

Что я не могу понять, так это как получить ссылку на эту «буферную» переменную asm в actionscript.

(я подумал об одном способе ... то, что я сделал, это выбросил «буфер» из алхимического асма, а затем перехватил его в ActionScript, но, к сожалению, похоже, что он теряет много памяти).

есть ли лучшая альтернатива этому?

обратите внимание, что производительность критична, а использование алхимического маршалинга по умолчанию слишком медленное.

1 Ответ

2 голосов
/ 31 марта 2011

asm только для передачи чисел вперед и назад, что означает, что нам придется использовать внутренние сопоставления между объектами в Alchemy.Перебирая промежуточный код AS3 (чтобы увидеть его, установите переменную окружения ACHACKS_TMPS в '1'), кажется, что CTypemap.AS3ValType выполняет сопоставление.Таким образом, вы можете вернуть созданный asm-объект следующим образом:

static AS3_Val alc_return_obj(void *self, AS3_Val args) {

    int len= 100;

    // create custom data in AS3
    asm("var as3Buffer:Vector.<Number> = new Vector.<Number>(%0, true);" : : "r"(len));

    // populate the vector with multiples of pi (just for fun)
    for (int idx= 0; idx < len; idx++) {
        double value= 3.14159265 * idx;
        asm("as3Buffer[%0] = %1;" : : "r"(idx) , "r"(value));
    }

    // get a C reference to the AS3 object
    AS3_Val alcBuffer;
    asm("%0 CTypemap.AS3ValType.createC(as3Buffer)[0];" : "=r"(alcBuffer));

    return alcBuffer;    
}

Примечание. Хотя это забавная хакерская программа, возможно, это не лучший способ решить эту проблему.Вероятно, это не самый быстрый способ вывести данные из Алхимии во Flash.Для этого я предлагаю использовать ByteArray для копирования данных в оперативную память Алхимии и из нее.См. ТАК вопрос о некоторых методах в этой области.

...