mirror of
https://github.com/koreader/koreader.git
synced 2025-08-10 00:52:38 +00:00
add pitch argument to newBlitBufferNative
This commit is contained in:
12
blitbuffer.c
12
blitbuffer.c
@@ -44,13 +44,16 @@ inline int setPixel(BlitBuffer *bb, int x, int y, int c) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int newBlitBufferNative(lua_State *L, int w, int h, BlitBuffer **newBuffer) {
|
||||
/*
|
||||
* if ptich equals zero, we calculate it as (w + 1) / 2
|
||||
*/
|
||||
int newBlitBufferNative(lua_State *L, int w, int h, int pitch, BlitBuffer **newBuffer) {
|
||||
BlitBuffer *bb = (BlitBuffer*) lua_newuserdata(L, sizeof(BlitBuffer));
|
||||
luaL_getmetatable(L, "blitbuffer");
|
||||
lua_setmetatable(L, -2);
|
||||
|
||||
bb->w = w;
|
||||
bb->pitch = (w + 1) / 2;
|
||||
bb->pitch = ((pitch == 0) ? ((w + 1) / 2) : pitch);
|
||||
bb->h = h;
|
||||
bb->data = malloc(bb->pitch * h);
|
||||
if(bb->data == NULL) {
|
||||
@@ -67,7 +70,8 @@ int newBlitBufferNative(lua_State *L, int w, int h, BlitBuffer **newBuffer) {
|
||||
static int newBlitBuffer(lua_State *L) {
|
||||
int w = luaL_checkint(L, 1);
|
||||
int h = luaL_checkint(L, 2);
|
||||
return newBlitBufferNative(L, w, h, NULL);
|
||||
int pitch = luaL_optint(L, 3, 0);
|
||||
return newBlitBufferNative(L, w, h, pitch, NULL);
|
||||
}
|
||||
|
||||
static int getWidth(lua_State *L) {
|
||||
@@ -98,7 +102,7 @@ static int blitFullToBuffer(lua_State *L) {
|
||||
BlitBuffer *src = (BlitBuffer*) luaL_checkudata(L, 2, "blitbuffer");
|
||||
|
||||
if(src->w != dst->w || src->h != dst->h || src->pitch != dst->pitch) {
|
||||
return luaL_error(L, "blitbuffer size must be framebuffer size!");
|
||||
return luaL_error(L, "dst and src blitbuffer size not match!");
|
||||
}
|
||||
|
||||
memcpy(dst->data, src->data, src->pitch * src->h);
|
||||
|
||||
@@ -31,7 +31,7 @@ typedef struct BlitBuffer {
|
||||
uint8_t allocated;
|
||||
} BlitBuffer;
|
||||
|
||||
int newBlitBufferNative(lua_State *L, int w, int h, BlitBuffer **newBuffer);
|
||||
int newBlitBufferNative(lua_State *L, int w, int h, int pitch, BlitBuffer **newBuffer);
|
||||
int luaopen_blitbuffer(lua_State *L);
|
||||
|
||||
#endif
|
||||
|
||||
2
ft.c
2
ft.c
@@ -78,7 +78,7 @@ static int renderGlyph(lua_State *L) {
|
||||
lua_newtable(L);
|
||||
|
||||
BlitBuffer *bb;
|
||||
int result = newBlitBufferNative(L, w, h, &bb);
|
||||
int result = newBlitBufferNative(L, w, h, 0, &bb);
|
||||
if(result != 1) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ static int toBlitBuffer(lua_State *L) {
|
||||
}
|
||||
}
|
||||
|
||||
ret = newBlitBufferNative(L, img->pixmap->w, img->pixmap->h, &bb);
|
||||
ret = newBlitBufferNative(L, img->pixmap->w, img->pixmap->h, 0, &bb);
|
||||
if(ret != 1) {
|
||||
// TODO (?): fail more gracefully, clean up mem?
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user