diff --git a/graphics/nxbe/nxbe.h b/graphics/nxbe/nxbe.h index dc9de89a9dc..c3434d59f7a 100644 --- a/graphics/nxbe/nxbe.h +++ b/graphics/nxbe/nxbe.h @@ -1,7 +1,8 @@ /**************************************************************************** * graphics/nxbe/nxbe.h * - * Copyright (C) 2008-2011, 2013, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2011, 2013, 2016, 2019 Gregory Nutt. All rights + * reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -67,14 +68,12 @@ /* Rasterization ************************************************************/ -/* A tiny vtable of raster operation function pointers. The types of the +/* A vtable of raster operation function pointers. The types of the * function points must match the rasterizer types exported by nxglib */ -struct nxbe_plane_s +struct nxbe_vtable_s { - /* Raster operation callbacks for this bits-per-pixel value */ - CODE void (*setpixel)(FAR NX_PLANEINFOTYPE *pinfo, FAR const struct nxgl_point_s *pos, nxgl_mxpixel_t color); @@ -96,6 +95,21 @@ struct nxbe_plane_s FAR const void *src, FAR const struct nxgl_point_s *origin, unsigned int srcstride); +}; + +/* Encapsulates everything needed support window rasterization commands. */ + +struct nxbe_plane_s +{ + /* Raster device operation callbacks for this plane */ + + struct nxbe_vtable_s dev; + +#ifdef CONFIG_NX_RAMBACKED + /* Raster per-window framebuffer operation callbacks for this plane */ + + struct nxbe_vtable_s pwfb; +#endif /* Framebuffer plane info describing destination video plane */ diff --git a/graphics/nxbe/nxbe_bitmap.c b/graphics/nxbe/nxbe_bitmap.c index 772b08e46a0..a9db8fa049b 100644 --- a/graphics/nxbe/nxbe_bitmap.c +++ b/graphics/nxbe/nxbe_bitmap.c @@ -1,7 +1,8 @@ /**************************************************************************** * graphics/nxbe/nxbe_bitmap.c * - * Copyright (C) 2008-2009, 2012, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2009, 2012, 2016, 2019 Gregory Nutt. All rights + * reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -76,10 +77,10 @@ static void nxs_clipcopy(FAR struct nxbe_clipops_s *cops, { struct nx_bitmap_s *bminfo = (struct nx_bitmap_s *)cops; - /* Copy the rectangular region */ + /* Copy the rectangular region to the graphics device. */ - plane->copyrectangle(&plane->pinfo, rect, bminfo->src, - &bminfo->origin, bminfo->stride); + plane->dev.copyrectangle(&plane->pinfo, rect, bminfo->src, + &bminfo->origin, bminfo->stride); #ifdef CONFIG_NX_UPDATE /* Notify external logic that the display has been updated */ diff --git a/graphics/nxbe/nxbe_configure.c b/graphics/nxbe/nxbe_configure.c index 891d2e15c5c..3f1d62b2057 100644 --- a/graphics/nxbe/nxbe_configure.c +++ b/graphics/nxbe/nxbe_configure.c @@ -1,7 +1,7 @@ /**************************************************************************** * graphics/nxbe/nxbe_configure.c * - * Copyright (C) 2008-2010 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2010, 2019 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -134,89 +134,153 @@ int nxbe_configure(FAR NX_DRIVERTYPE *dev, FAR struct nxbe_state_s *be) #ifndef CONFIG_NX_DISABLE_1BPP if (be->plane[i].pinfo.bpp == 1) { - be->plane[i].setpixel = nxgl_setpixel_1bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_1bpp; - be->plane[i].getrectangle = nxgl_getrectangle_1bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_1bpp; - be->plane[i].moverectangle = nxgl_moverectangle_1bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_1bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_1bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_1bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_1bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_1bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_1bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_1bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_1bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_1bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_1bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_1bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_1bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_1bpp; +#endif } else #endif #ifndef CONFIG_NX_DISABLE_2BPP if (be->plane[i].pinfo.bpp == 2) { - be->plane[i].setpixel = nxgl_setpixel_2bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_2bpp; - be->plane[i].getrectangle = nxgl_getrectangle_2bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_2bpp; - be->plane[i].moverectangle = nxgl_moverectangle_2bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_2bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_2bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_2bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_2bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_2bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_2bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_2bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_2bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_2bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_2bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_2bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_2bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_2bpp; +#endif } else #endif #ifndef CONFIG_NX_DISABLE_4BPP if (be->plane[i].pinfo.bpp == 4) { - be->plane[i].setpixel = nxgl_setpixel_4bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_4bpp; - be->plane[i].getrectangle = nxgl_getrectangle_4bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_4bpp; - be->plane[i].moverectangle = nxgl_moverectangle_4bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_4bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_4bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_4bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_4bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_4bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_4bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_4bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_4bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_4bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_4bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_4bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_4bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_4bpp; +#endif } else #endif #ifndef CONFIG_NX_DISABLE_8BPP if (be->plane[i].pinfo.bpp == 8) { - be->plane[i].setpixel = nxgl_setpixel_8bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_8bpp; - be->plane[i].getrectangle = nxgl_getrectangle_8bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_8bpp; - be->plane[i].moverectangle = nxgl_moverectangle_8bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_8bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_8bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_8bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_8bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_8bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_8bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_8bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_8bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_8bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_8bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_8bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_8bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_8bpp; +#endif } else #endif #ifndef CONFIG_NX_DISABLE_16BPP if (be->plane[i].pinfo.bpp == 16) { - be->plane[i].setpixel = nxgl_setpixel_16bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_16bpp; - be->plane[i].getrectangle = nxgl_getrectangle_16bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_16bpp; - be->plane[i].moverectangle = nxgl_moverectangle_16bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_16bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_16bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_16bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_16bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_16bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_16bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_16bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_16bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_16bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_16bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_16bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_16bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_16bpp; +#endif } else #endif #ifndef CONFIG_NX_DISABLE_24BPP if (be->plane[i].pinfo.bpp == 24) { - be->plane[i].setpixel = nxgl_setpixel_24bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_24bpp; - be->plane[i].getrectangle = nxgl_getrectangle_24bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_24bpp; - be->plane[i].moverectangle = nxgl_moverectangle_24bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_24bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_24bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_24bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_24bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_24bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_24bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_24bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_24bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_24bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_24bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_24bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_24bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_24bpp; +#endif } else #endif #ifndef CONFIG_NX_DISABLE_32BPP if (be->plane[i].pinfo.bpp == 32) { - be->plane[i].setpixel = nxgl_setpixel_32bpp; - be->plane[i].fillrectangle = nxgl_fillrectangle_32bpp; - be->plane[i].getrectangle = nxgl_getrectangle_32bpp; - be->plane[i].filltrapezoid = nxgl_filltrapezoid_32bpp; - be->plane[i].moverectangle = nxgl_moverectangle_32bpp; - be->plane[i].copyrectangle = nxgl_copyrectangle_32bpp; + be->plane[i].dev.setpixel = nxgl_setpixel_32bpp; + be->plane[i].dev.fillrectangle = nxgl_fillrectangle_32bpp; + be->plane[i].dev.getrectangle = nxgl_getrectangle_32bpp; + be->plane[i].dev.filltrapezoid = nxgl_filltrapezoid_32bpp; + be->plane[i].dev.moverectangle = nxgl_moverectangle_32bpp; + be->plane[i].dev.copyrectangle = nxgl_copyrectangle_32bpp; + +#ifdef CONFIG_NX_RAMBACKED + be->plane[i].pwfb.setpixel = nxgl_setpixel_1bpp; + be->plane[i].pwfb.fillrectangle = nxgl_fillrectangle_32bpp; + be->plane[i].pwfb.getrectangle = nxgl_getrectangle_32bpp; + be->plane[i].pwfb.filltrapezoid = nxgl_filltrapezoid_32bpp; + be->plane[i].pwfb.moverectangle = nxgl_moverectangle_32bpp; + be->plane[i].pwfb.copyrectangle = nxgl_copyrectangle_32bpp; +#endif } else #endif { - gerr("ERROR: Unsupported pinfo[%d] BPP: %d\n", i, be->plane[i].pinfo.bpp); + gerr("ERROR: Unsupported pinfo[%d] BPP: %d\n", + i, be->plane[i].pinfo.bpp); return -ENOSYS; } } diff --git a/graphics/nxbe/nxbe_fill.c b/graphics/nxbe/nxbe_fill.c index 48567ccdcf2..ea44aea236d 100644 --- a/graphics/nxbe/nxbe_fill.c +++ b/graphics/nxbe/nxbe_fill.c @@ -1,7 +1,8 @@ /**************************************************************************** * graphics/nxbe/nxbe_fill.c * - * Copyright (C) 2008-2009, 2011, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2009, 2011, 2016, 2019 Gregory Nutt. All rights + * reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -73,9 +74,9 @@ static void nxbe_clipfill(FAR struct nxbe_clipops_s *cops, { struct nxbe_fill_s *fillinfo = (struct nxbe_fill_s *)cops; - /* Draw the rectangle */ + /* Draw the rectangle to the graphics device. */ - plane->fillrectangle(&plane->pinfo, rect, fillinfo->color); + plane->dev.fillrectangle(&plane->pinfo, rect, fillinfo->color); #ifdef CONFIG_NX_UPDATE /* Notify external logic that the display has been updated */ diff --git a/graphics/nxbe/nxbe_filltrapezoid.c b/graphics/nxbe/nxbe_filltrapezoid.c index 51fde5728b0..5305af6f219 100644 --- a/graphics/nxbe/nxbe_filltrapezoid.c +++ b/graphics/nxbe/nxbe_filltrapezoid.c @@ -1,7 +1,8 @@ /**************************************************************************** * graphics/nxbe/nxbe_filltrapezoid.c * - * Copyright (C) 2008-2009, 2012, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2009, 2012, 2016, 2019 Gregory Nutt. All rights + * reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -91,7 +92,8 @@ static void nxbe_clipfilltrapezoid(FAR struct nxbe_clipops_s *cops, /* Draw the trapezond */ - plane->filltrapezoid(&plane->pinfo, &fillinfo->trap, rect, fillinfo->color); + plane->dev.filltrapezoid(&plane->pinfo, &fillinfo->trap, rect, + fillinfo->color); #ifdef CONFIG_NX_UPDATE /* Notify external logic that the display has been updated */ diff --git a/graphics/nxbe/nxbe_getrectangle.c b/graphics/nxbe/nxbe_getrectangle.c index 72073537e66..cda32a33c8e 100644 --- a/graphics/nxbe/nxbe_getrectangle.c +++ b/graphics/nxbe/nxbe_getrectangle.c @@ -1,7 +1,7 @@ /**************************************************************************** - * graphics/nxbe/nxbe_fill.c + * graphics/nxbe/nxbe_getrectangle.c * - * Copyright (C) 2011 Gregory Nutt. All rights reserved. + * Copyright (C) 2011, 2019 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -117,6 +117,8 @@ void nxbe_getrectangle(FAR struct nxbe_window_s *wnd, if (!nxgl_nullrect(&remaining)) { FAR struct nxbe_plane_s *pplane = &wnd->be->plane[plane]; - pplane->getrectangle(&pplane->pinfo, &remaining, dest, deststride); + + pplane->dev.getrectangle(&pplane->pinfo, &remaining, dest, + deststride); } } diff --git a/graphics/nxbe/nxbe_move.c b/graphics/nxbe/nxbe_move.c index 913f89e45df..65b59f5860b 100644 --- a/graphics/nxbe/nxbe_move.c +++ b/graphics/nxbe/nxbe_move.c @@ -1,7 +1,8 @@ /**************************************************************************** * graphics/nxbe/nxbe_move.c * - * Copyright (C) 2008-2009, 2011-2012, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2009, 2011-2012, 2016, 2019 Gregory Nutt. All rights + * reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -89,9 +90,9 @@ static void nxbe_clipmovesrc(FAR struct nxbe_clipops_s *cops, offset.x = rect->pt1.x + info->offset.x; offset.y = rect->pt1.y + info->offset.y; - /* Move the source rectangle to the destination position */ + /* Move the source rectangle to the destination position in the device */ - plane->moverectangle(&plane->pinfo, rect, &offset); + plane->dev.moverectangle(&plane->pinfo, rect, &offset); #ifdef CONFIG_NX_UPDATE /* Notify external logic that the display has been updated */ diff --git a/graphics/nxbe/nxbe_setpixel.c b/graphics/nxbe/nxbe_setpixel.c index 409b11c4423..f610cd0c847 100644 --- a/graphics/nxbe/nxbe_setpixel.c +++ b/graphics/nxbe/nxbe_setpixel.c @@ -1,7 +1,7 @@ /**************************************************************************** * graphics/nxbe/nxbe_setpixel.c * - * Copyright (C) 2011, 2016 Gregory Nutt. All rights reserved. + * Copyright (C) 2011, 2016, 2019 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -73,9 +73,9 @@ static void nxbe_clipfill(FAR struct nxbe_clipops_s *cops, { struct nxbe_setpixel_s *fillinfo = (struct nxbe_setpixel_s *)cops; - /* Set the pixel */ + /* Set the pixel in the graphics device. */ - plane->setpixel(&plane->pinfo, &rect->pt1, fillinfo->color); + plane->dev.setpixel(&plane->pinfo, &rect->pt1, fillinfo->color); #ifdef CONFIG_NX_UPDATE /* Notify external logic that the display has been updated */ diff --git a/graphics/nxglib/nxglib_bitblit.h b/graphics/nxglib/nxglib_bitblit.h index 433a30e00ce..2277638f15e 100644 --- a/graphics/nxglib/nxglib_bitblit.h +++ b/graphics/nxglib/nxglib_bitblit.h @@ -1,7 +1,7 @@ /**************************************************************************** * graphics/nxglib/nxglib_bitblit.h * - * Copyright (C) 2008-2011 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2011, 2019 Gregory Nutt. All rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without