int RenderTargetBinder::getPixels(lua_State *L) { Binder binder(L); GRenderTarget *renderTarget = static_cast<GRenderTarget*>(binder.getInstance("RenderTarget", 1)); int x = luaL_optinteger(L, 2, 0); int y = luaL_optinteger(L, 3, 0); unsigned int w = luaL_optinteger(L, 4, renderTarget->data->width); unsigned int h = luaL_optinteger(L, 5, renderTarget->data->height); size_t bsize=w*h*4; void *buffer=malloc(bsize); memset(buffer,0xFF,bsize); if (x<0) { w=w+x; x=0; } if (y<0) { h=h+y; y=0; } if ((w>0)&&(h>0)) renderTarget->getPixels(x,y,w,h,buffer); lua_pushlstring(L,(char *)buffer,bsize); free(buffer); return 1; }
int RenderTargetBinder::getPixel(lua_State *L) { Binder binder(L); GRenderTarget *renderTarget = static_cast<GRenderTarget*>(binder.getInstance("RenderTarget", 1)); int x = luaL_checkinteger(L, 2); int y = luaL_checkinteger(L, 3); unsigned char pixel[4]={0xFF,0xFF,0xFF,0xFF}; if ((x>=0)&&(y>=0)) renderTarget->getPixels(x,y,1,1,pixel); lua_pushnumber(L,(pixel[0]<<16)|(pixel[1]<<8)|(pixel[2]<<0)); lua_pushnumber(L,((float)pixel[3])/255.0); return 2; }