/contrib/sdk/sources/newlib/libc/include/pixlib3.h |
---|
21,6 → 21,13 |
int pxDestroyBitmap(bitmap_t *bitmap); |
void *pxLockBitmap(bitmap_t *bitmap, uint32_t *pitch); |
int pxResizeBitmap(bitmap_t *bitmap, uint32_t width, uint32_t height); |
int pxBlitBitmap(bitmap_t *bitmap, int dst_x, int dst_y, |
uint32_t w, uint32_t h, int src_x, int src_y); |
planar_t* pxCreatePlanar(int name, int format, |
uint32_t width, uint32_t height, |
uint32_t offset0, uint32_t pitch0, |
27,13 → 34,8 |
uint32_t offset1, uint32_t pitch1, |
uint32_t offset2, uint32_t pitch2); |
void *pxLockBitmap(bitmap_t *bitmap, uint32_t *pitch); |
int pxDestroyPlanar(planar_t *planar); |
int pxResizeBitmap(bitmap_t *bitmap, uint32_t width, uint32_t height); |
int pxBlitBitmap(bitmap_t *bitmap, int dst_x, int dst_y, |
uint32_t w, uint32_t h, int src_x, int src_y); |
int pxBlitPlanar(planar_t *planar, int dst_x, int dst_y, |
uint32_t w, uint32_t h, int src_x, int src_y); |
/contrib/sdk/sources/pixlib-3/pixdriver.h |
---|
18,6 → 18,7 |
uint32_t offset0, uint32_t pitch0, |
uint32_t offset1, uint32_t pitch1, |
uint32_t offset2, uint32_t pitch2); |
int (*destroy_planar)(planar_t *planar); |
int (*blit_planar)(planar_t *planar, int dst_x, int dst_y, |
uint32_t w, uint32_t h, int src_x, int src_y); |
}; |
/contrib/sdk/sources/pixlib-3/pixlib3.c |
---|
156,6 → 156,35 |
w, h, src_x, src_y); |
}; |
planar_t* pxCreatePlanar(int name, int format, |
uint32_t width, uint32_t height, |
uint32_t offset0, uint32_t pitch0, |
uint32_t offset1, uint32_t pitch1, |
uint32_t offset2, uint32_t pitch2) |
{ |
if(driver->create_planar) |
return driver->create_planar(name, format, width, height, |
offset0, pitch0, offset1, pitch1, |
offset2, pitch2); |
else |
return NULL; |
}; |
int pxDestroyPlanar(planar_t *planar) |
{ |
return driver->destroy_planar(planar); |
}; |
int pxBlitPlanar(planar_t *planar, int dst_x, int dst_y, |
uint32_t w, uint32_t h, int src_x, int src_y) |
{ |
if(driver->blit_planar) |
return driver->blit_planar(planar, dst_x, dst_y, |
w, h, src_x, src_y); |
else |
return 0; |
}; |
int pxCreateClient(int x, int y, uint32_t width, uint32_t height) |
{ |
return driver->create_client(x, y, width, height); |
166,6 → 195,7 |
return driver->resize_client(x, y, width, height); |
} |
static struct pix_driver sw_driver = |
{ |
0, |
176,9 → 206,10 |
sw_blit, |
sw_create_client, |
sw_resize_client, |
NULL, |
NULL, |
NULL |
NULL, /* fini() */ |
NULL, /* create_planar() */ |
NULL, /* destroy_planar() */ |
NULL /* blit_planar() */ |
}; |
256,32 → 287,3 |
driver->fini(); |
}; |
planar_t* pxCreatePlanar(int name, int format, |
uint32_t width, uint32_t height, |
uint32_t offset0, uint32_t pitch0, |
uint32_t offset1, uint32_t pitch1, |
uint32_t offset2, uint32_t pitch2) |
{ |
if(driver->create_planar) |
return driver->create_planar(name, format, width, height, |
offset0, pitch0, offset1, pitch1, |
offset2, pitch2); |
else |
return NULL; |
} |
int pxBlitPlanar(planar_t *planar, int dst_x, int dst_y, |
uint32_t w, uint32_t h, int src_x, int src_y) |
{ |
if(driver->blit_planar) |
return driver->blit_planar(planar, dst_x, dst_y, |
w, h, src_x, src_y); |
else |
return 0; |
}; |
/contrib/sdk/sources/pixlib-3/pxgl.c |
---|
615,6 → 615,22 |
return NULL; |
}; |
static int hw_destroy_planar(planar_t *planar) |
{ |
glDeleteTextures(planar->num_planes, &planar->tex[0]); |
if(planar->image[2] != NULL) |
eglDestroyImageKHR(px->dpy, planar->image[2]); |
if(planar->image[1] != NULL) |
eglDestroyImageKHR(px->dpy, planar->image[1]); |
if(planar->image[0] != NULL) |
eglDestroyImageKHR(px->dpy, planar->image[0]); |
if(planar->planar_image != NULL) |
eglDestroyImageKHR(px->dpy, planar->planar_image); |
free(planar); |
return 0; |
}; |
static planar_t* hw_create_planar(EGLint name, EGLint format, uint32_t width, uint32_t height, |
uint32_t offset0, uint32_t pitch0, |
uint32_t offset1, uint32_t pitch1, |
670,6 → 686,7 |
planar->width = width; |
planar->height = height; |
planar->name = name; |
planar->num_planes = num_planes; |
planar->planar_image = img; |
planar->offset[0] = offset0; |
681,6 → 698,8 |
planar->pitch[2] = pitch2; |
glGenTextures(num_planes, &planar->tex[0]); |
if(glGetError() != GL_NO_ERROR) |
goto err_0; |
for(i = 0; i < num_planes; i++) |
{ |
692,19 → 711,20 |
image = eglCreateImageKHR(px->dpy, px->context, |
EGL_WAYLAND_BUFFER_WL,(EGLClientBuffer)img, attr); |
if(image == NULL) |
goto err_1; |
planar->image[i] = image; |
glBindTexture(GL_TEXTURE_2D, planar->tex[i]); |
if(glGetError() != GL_NO_ERROR) |
{ |
goto fail; |
goto err_1; |
}; |
glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image); |
if(glGetError() != GL_NO_ERROR) |
{ |
goto fail; |
goto err_1; |
} |
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); |
713,14 → 733,16 |
return planar; |
err_1: |
hw_destroy_planar(planar); |
return NULL; |
err_0: |
free(planar); |
fail: |
return NULL; |
} |
static int hw_destroy_bitmap(bitmap_t * bitmap) |
{ |
struct drm_gem_close close; |
731,6 → 753,7 |
close.handle = bitmap->handle; |
drm_ioctl(px->fd, DRM_IOCTL_GEM_CLOSE, &close); |
free(bitmap); |
return 0; |
}; |
static void *hw_lock_bitmap(bitmap_t *bitmap, uint32_t *pitch) |
1015,6 → 1038,7 |
hw_resize_client, |
hw_fini, |
hw_create_planar, |
hw_destroy_planar, |
hw_blit_planar |
}; |
/contrib/sdk/sources/pixlib-3/pxgl.h |
---|
87,6 → 87,7 |
uint32_t width; |
uint32_t height; |
GLuint name; |
int num_planes; |
EGLImageKHR planar_image; |
EGLImageKHR image[3]; |
GLuint offset[3]; |