diff --git a/binding.gyp b/binding.gyp index 777032c0b..77838ead0 100644 --- a/binding.gyp +++ b/binding.gyp @@ -62,6 +62,7 @@ 'src/backend/Backend.cc', 'src/backend/ImageBackend.cc', 'src/backend/PdfBackend.cc', + 'src/backend/ScreenBackend.cc', 'src/backend/SvgBackend.cc', 'src/bmp/BMPParser.cc', 'src/Backends.cc', diff --git a/package.json b/package.json index 1c21c402f..45fc8fa31 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "simple-get": "^3.0.3" }, "devDependencies": { - "@types/node": "^10.12.18", + "@types/node": "^14.11.10", "assert-rejects": "^1.0.0", "dtslint": "^4.0.7", "express": "^4.16.3", diff --git a/src/backend/Backend.cc b/src/backend/Backend.cc index 528f61a08..19bcc60ff 100644 --- a/src/backend/Backend.cc +++ b/src/backend/Backend.cc @@ -1,6 +1,7 @@ #include "Backend.h" #include + Backend::Backend(std::string name, int width, int height) : name(name) , width(width) diff --git a/src/backend/ScreenBackend.cc b/src/backend/ScreenBackend.cc new file mode 100644 index 000000000..b1b70f089 --- /dev/null +++ b/src/backend/ScreenBackend.cc @@ -0,0 +1,48 @@ +#include "ScreenBackend.h" + + +using Nan::AsyncQueueWorker; +using Nan::AsyncWorker; +using Nan::Callback; + + +class WaitVSync: public AsyncWorker +{ + public: + WaitVSync(Callback* callback, ScreenBackend* backend) + : AsyncWorker(callback, "ScreenBackend:WaitVSync") + , backend(backend) + {} + + void Execute() + { + backend->waitVSync(); + } + + private: + ScreenBackend* backend; +}; + + +NAN_METHOD(ScreenBackend::swapBuffers) +{ + ScreenBackend* backend = Nan::ObjectWrap::Unwrap(info.This()); + + backend->swapBuffers(); +} + +NAN_METHOD(ScreenBackend::waitVSync) +{ + ScreenBackend* backend = Nan::ObjectWrap::Unwrap(info.This()); + + Callback* callback = new Callback(info[0].As()); + + AsyncQueueWorker(new WaitVSync(callback, backend)); +} + + +void ScreenBackend::Initialize(Local ctor) +{ + Nan::SetPrototypeMethod(ctor, "swapBuffers", swapBuffers); + Nan::SetPrototypeMethod(ctor, "waitVSync", waitVSync); +} diff --git a/src/backend/ScreenBackend.h b/src/backend/ScreenBackend.h new file mode 100644 index 000000000..ec37c041a --- /dev/null +++ b/src/backend/ScreenBackend.h @@ -0,0 +1,22 @@ +#pragma once + +#include "Backend.h" + + +using namespace v8; + + +class ScreenBackend : public Backend +{ + friend class WaitVSync; + + private: + virtual void swapBuffers(){}; + virtual void waitVSync(){}; + + static NAN_METHOD(swapBuffers); + static NAN_METHOD(waitVSync); + + protected: + static void Initialize(Local ctor); +};