EJ_BIND_FUNCTION(EJBindingCanvas,createImageData, ctx, argc, argv) { if( argc < 2 ) { return NULL; } float sw = JSValueToNumberFast(ctx, argv[0]), sh = JSValueToNumberFast(ctx, argv[1]); GLubyte * pixels = (GLubyte *)calloc( sw * sh * 4, sizeof(GLubyte) ); EJImageData * imageData = new EJImageData(sw ,sh ,pixels); imageData->autorelease(); // Create the JS object EJBindingImageData* tempData = new EJBindingImageData(); JSClassRef imageDataClass = EJApp::instance()->getJSClassForClass((EJBindingBase*)tempData); delete tempData; JSObjectRef obj = JSObjectMake( ctx, imageDataClass, NULL ); JSValueProtect(ctx, obj); // Create the native instance EJBindingImageData * jsImageData =new EJBindingImageData(ctx,obj,imageData); // Attach the native instance to the js object JSObjectSetPrivate( obj, (void *)jsImageData ); JSValueUnprotect(ctx, obj); return obj; }
EJImageData* EJCanvasContext::getImageData(float sx, float sy, float sw, float sh) { flushBuffers(); GLubyte * pixels = (GLubyte*)malloc( (size_t)sw * (size_t)sh * 4 * sizeof(GLubyte)); glReadPixels((GLint)sx, (GLint)sy, (GLsizei)sw, (GLsizei)sh, GL_RGBA, GL_UNSIGNED_BYTE, pixels); EJImageData* imageData = new EJImageData((int)sw, (int)sh, pixels); imageData->autorelease(); return imageData; }