On Thu, Feb 20, 2014 at 7:38 AM, Mark Hahn <[email protected]> wrote:

> Ah, that explains a lot.  I'm happy to see that it is so easy to use from
> C.  With Alon's help I was able to make libraries work and they are easy to
> use.
>

Great!


> > And implement _FillRect in your JavaScript.
>
> Yes, I'm planning on coding a sizable part of the GDI API in JS.  My
> co-workers aren't sure my head is screwed on straight.  I wore google out
> trying to find an existing solution to interface C/C++ GDI calls to canvas
> in the browser.  If anyone knows any existing solution I missed I would be
> eternally grateful.
>

For what it's worth, my coworkers also thought I was insane.  But after
some work and a lot of help from Alon, they are thrilled that Emscripten
has worked out so smoothly.

>
> > // In a C++ module <...snip...> val canvas = getCanvasFromDC(hDC);
>
> I want to verify that you also mean I would implement the C++ call 
> getCanvasFromDC
> in Javascript.  You aren't referring to an existing implementation, are you?
>

Correct, I should have clarified.  That function is either implemented in
JavaScript, or you could implement it in embind, with something like this:

val getCanvasFromDC(HDC dc) {
    return ((DCImplementation*)dc)->context;
}

And the code where you create a canvas would look something like this:

struct DCImplementation {
    val canvas;
    val context;
};

HDC createCanvas() {
    // corresponds to
    // var canvas = document.createElement("canvas");
    // var context = canvas.getContext("2d");

    HDC dc = new DCImplementation;
    dc->canvas = val::global("document").call<val>("createElement",
"canvas");
    dc->context = dc->canvas.call<val>("getContext", "2d");
    return dc;
}

Anything* you can write in JavaScript can be expressed in embind.  Note, I
didn't compile any of the above, but that's the idea.

* Well, I'm sure there are some limitations, but anything I've wanted to do
can be written.  :)


>
> Thanks for the info.  It helps a lot.
>
>
>
> On Thu, Feb 20, 2014 at 12:28 AM, Chad Austin <[email protected]> wrote:
>
>> Hi Mark,
>>
>> embind is a C++11 API.  It cannot be used from C, though you could write
>> a program that is written in C and links with a C++ module that talks to
>> JavaScript as C.
>>
>> However, if you're just talking to JavaScript through C, embind wouldn't
>> get you much.  It would be easier in your C to simply write:
>>
>> extern int FillRect(HDC hDC, CONST RECT* lprc, HBRUSH hbr);
>>
>> And implement _FillRect in your JavaScript.
>>
>> The embind alternative would work too.  For your edification, here is how
>> it might look:
>>
>> // In your C
>> extern int FillRect(HDC hDC, CONST RECT* lprc, HBRUSH hbr);
>>
>> // In a C++ module
>> using namespace emscripten;
>> int FillRect(HDC hDC, CONST RECT* lprc, HBRUSH hbr) {
>>     val canvas = getCanvasFromDC(hDC);
>>     setCanvasFillStyle(canvas, hbr);
>>     canvas.call<void>("fillRect", lprc->left, lprc->top, lprc->right -
>> lprc->left, lprc->bottom - lprc->top);
>> }
>>
>> embind is plenty fast for real-time chatter between JavaScript and C: we
>> go through embind for every OpenGL call in our codebase.  :)
>>
>>
>>
>>
>>  On Mon, Feb 17, 2014 at 2:25 PM, Mark Hahn <[email protected]> wrote:
>>
>>> I'm a newbie planning on implementing a subset of GDI in javascript that
>>> is called from emscripten-converted C (not C++) to draw text on a canvas.
>>> I'm looking into using embind because I don't think I can avoid
>>> double-quotes in my javascript (I always code in coffeescript).
>>>
>>> Some embind questions ...
>>>
>>> 1) Will I have trouble interfacing with embind from C? I see most of the
>>> embind docs in the wiki relate to C++ classes.
>>>
>>> 2) The wiki page mentions that embind is "not as lightweight as JS
>>> libraries". How large is embind (bytes added to page load)?
>>>
>>> 3) I'm going to be calling several javascript functions from C for every
>>> keystroke in an editor. There can't be more than 50 ms or so delay in the
>>> browser including the canvas drawing time. Is embind to slow for this?
>>> Anyone have an idea what the call overhead is in milliseconds?
>>>
>>> Can anyone suggest a better way to have C calls draw on a canvas than
>>> coding the calls myself in javascript? I've looked at SDL and OpenGL and
>>> both seem like overkill. I was disappointed to find there wasn't already a
>>> GDI emulation in emscripten.
>>>
>>>  --
>>> 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 [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>
>>
>> --
>> Chad Austin
>> Technical Director, IMVU
>> http://engineering.imvu.com <http://www.imvu.com/members/Chad/>
>> http://chadaustin.me
>>
>>
>>  --
>> 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 [email protected].
>> For more options, visit https://groups.google.com/groups/opt_out.
>>
>
>  --
> 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 [email protected].
> For more options, visit https://groups.google.com/groups/opt_out.
>



-- 
Chad Austin
Technical Director, IMVU
http://engineering.imvu.com <http://www.imvu.com/members/Chad/>
http://chadaustin.me

-- 
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to