Thanks jj, I ended up using getValue on the JS side to get the data from the pointer I pass from C. Is there any performance concerns with this or should I use HEAP32 instead?
On Tuesday, September 20, 2016 at 12:33:01 PM UTC-4, jj wrote: > > The src/library_xxx.js files are generally good examples. > > Here's one snippet where C function passes a pointer to an integer array > and length of that array to JS side, and JS code reads through the array: > https://github.com/kripken/emscripten/blob/master/src/library_openal.js#L329. > If not using JS code that lives in js-libraries, the i32 {{{ makeGetValue > }}} can be replaced with a direct HEAP32[pointer >> 2]. > > Another example with filling a struct in JS side: > https://github.com/kripken/emscripten/blob/master/src/library_html5.js#L180 > > and reading the fields from a pointer to a struct: > https://github.com/kripken/emscripten/blob/master/src/library_html5.js#L1728 > > > > 2016-09-20 16:45 GMT+03:00 Robert Goulet <robert...@autodesk.com > <javascript:>>: > >> Do you have an example of sending pointer into EM_ASM and reading it >> directly from memory? >> >> In my case I am calling EM_ASM close to a thousand times to pass engine >> profiling data to javascript for drawing on the web page, so I am trying to >> avoid adding time to the profiling result. If EM_ASM does add overhead, >> then I hope to reduce it by calling it only once instead of a thousand >> times per frame. I profiled it to about ~2.5ms per frame to do these >> thousand calls to EM_ASM, which is a lot if you consider the actual frame >> time is <= 17ms. >> >> On Monday, September 19, 2016 at 5:45:21 PM UTC-4, Alon Zakai wrote: >>> >>> The most efficient way is to send the pointer into EM_ASM, then do reads >>> directly to memory using the right offsets, but that requires using >>> information about how the data is laid out in memory (on the plus side, the >>> alignment rules are the natural 32-bit ones, with fully aligned doubles). >>> >>> Otherwise multiple calls into EM_ASM adds overhead, but in many cases it >>> wouldn't be noticeable. >>> >>> On Mon, Sep 19, 2016 at 1:57 PM, Robert Goulet <robert...@autodesk.com> >>> wrote: >>> >>>> Hi, >>>> >>>> How do we pass an array of objects to Javascript function from C? >>>> >>>> Consider the following example: >>>> >>>> struct data { >>>> double a; >>>> int b; >>>> unsigned char c; >>>> }; >>>> >>>> std::vector<data> my_data; >>>> >>>> EM_ASM_ARGS({ >>>> var data_array = ??? >>>> process_data(data_array); >>>> }, my_data); >>>> >>>> Is this possible? I couldn't find any clear documentation about this >>>> topic. >>>> >>>> For the moment I've used the following workaround, but it doesn't look >>>> super efficient: >>>> >>>> for( auto const & i : my_data ) { >>>> EM_ASM_ARGS({ >>>> process_data($0, $1, $2); >>>> }, i.a, i.b, i.c); >>>> } >>>> >>>> Thanks! >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "emscripten-discuss" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to emscripten-discuss+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/d/optout. >>>> >>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "emscripten-discuss" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to emscripten-discuss+unsubscr...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- You received this message because you are subscribed to the Google Groups "emscripten-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to emscripten-discuss+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.