Одна из вещей, которые мне нужно сделать, — это как можно быстрее нарисовать на холсте. Я нашел много вопросов, задающих именно эту тему, но им всем уже несколько лет, и WASM сильно изменился за это время, поэтому я думаю, что многие ответы устарели.
Этот ответ особенно многообещающий, поскольку он подразумевает, что возможно какое-то разделение памяти, чтобы избежать копирования, но по сути он просто указывает на этот проект. Проект очень актуален, поскольку это игровой движок на WASM, но, к сожалению, он построен на Blazor, поэтому, похоже, есть некоторые различия, которые мешают ему работать у меня.
В частности, код для рисования из IntPtr на холст:
Код: Выделить всё
window.PaintCanvas = function PaintCanvas(dataPtr) {
imageData.data.set(Uint8ClampedArray.from(Module.HEAPU8.subarray(dataPtr, dataPtr + imageData.data.length)));
context.putImageData(imageData, 0, 0);
context.drawImage(canvas, 0, 0, canvas.width, canvas.height);
return true;
}
Поэтому мои вопросы:
- Как лучше всего рисовать на холсте как можно быстрее?
- Если он использует Module.HEAPU8, тогда как мне получить к нему доступ?
ОК, я думаю, что решил проблему Module.HEAPU8 — шаблонный main.js разлагает объект, возвращаемый dotnet.create, но если вы этого не сделаете, вы получите объект с функцией localHeapViewU8
, которая, я думаю, такая же как Module.HEAPU8.
Поэтому я больше не получаю ошибку JS, но она все равно не работает. IntPtr, который я отправляю из C# в JS, поступает как неопределенный, поэтому я думаю, что это проблема, но согласно крайне минимальной документации вы должны иметь возможность отправлять IntPtr.
Я пытался изменить его, чтобы отправлять фрагмент массива вместо закрепленного указателя на массив, но он говорит: «Тип «Slice» не поддерживается взаимодействием JavaScript, сгенерированным исходным кодом. Сгенерированный источник не будет обрабатывать маршалинг параметра 'dataPtr'." и это указывает мне на документацию, в которой говорится, что вы должны иметь возможность отправлять фрагмент...
Подробнее здесь: https://stackoverflow.com/questions/784 ... -from-wasm
Мобильная версия