DukTape Показать JavaScript Canvas в окне GLUT

Мне удалось заставить DukTape работать в моем проекте GLUT (он может запускать встроенный JavaScript с duk_eval_string();). Можно ли отобразить статический HTML-холст с графикой JavaScript в окне GLUT C++ с помощью DukTape?

1 ответ

Решение

Использование методов рисования на холсте HTML5 невозможно в Duktape. Duktape - это движок Javascript, что означает, что он позволяет вам выполнять код, совместимый с ES5/5.1. Отображение холста HTML - это задача, которую Дуктейп не может выполнить.

Если вы в конечном итоге хотите достичь этого, попробуйте поискать библиотеку для решения такой задачи, возможно, посмотрите на исходный код Firefox. Если вы хотите сделать это полностью с нуля, вам нужно будет добавить привязки функций C (пример на duktape.org/) для каждого метода рисования, который вы хотите. Пример будет выглядеть так:

// C/C++ code:
// C function to be used in the Javascript engine 
int js_draw_rect(duk_context *ctx) {
    // get parameters from javascript function call
    int pos_x = duk_get_number(ctx, -4);
    int pos_y = duk_get_number(ctx, -3);
    ...

    // C/C++ code to draw the rectangle (in your case probably GLUT)
    draw_rectangle(pos_x, pos_y, ...);
    return 0;
}

int main(void) {
    duk_context *ctx;
    ...

    // this snippet adds a binding for the function 'js_draw_rect' so it can be called from Javascript code
    duk_push_global_object(ctx);
    duk_push_c_function(ctx, js_draw_rect, 4/*number of args the JS function has*/);
    duk_put_prop_string(ctx, -2 /*idx:global*/, "drawRect"/*name of function in JS environment*/);
    duk_pop(ctx);
}

// Javascript code:
drawRect(50, 50, 100, 200);
...

Этот метод позволяет вам создавать функции C/C++, которые обрабатывают все рисование, а затем связывают их все с движком Javascript, чтобы их можно было вызывать в JS.

Другие вопросы по тегам