]> source.dussan.org Git - tigervnc.git/commitdiff
Add convenience functions to ModifiablePixelBuffer
authorPierre Ossman <ossman@cendio.se>
Thu, 13 Feb 2014 09:38:48 +0000 (10:38 +0100)
committerPierre Ossman <ossman@cendio.se>
Wed, 9 Jul 2014 14:31:05 +0000 (16:31 +0200)
Allows you to modify the buffer with data in a
different pixel format.

common/rfb/PixelBuffer.cxx
common/rfb/PixelBuffer.h

index 187150d90537c4048b6a005ae40a56f6a40bdfc9..ed74a874da6c93edbc84df2a5a59426e19657a4c 100644 (file)
@@ -268,6 +268,28 @@ void ModifiablePixelBuffer::copyRect(const Rect &rect,
   commitBufferRW(drect);
 }
 
+void ModifiablePixelBuffer::fillRect(const PixelFormat& pf, const Rect &dest,
+                                     Pixel pix)
+{
+  fillRect(dest, format.pixelFromPixel(pf, pix));
+}
+
+void ModifiablePixelBuffer::imageRect(const PixelFormat& pf, const Rect &dest,
+                                      const void* pixels, int stride)
+{
+  rdr::U8* dstBuffer;
+  int dstStride;
+
+  if (stride == 0)
+    stride = dest.width();
+
+  dstBuffer = getBufferRW(dest, &dstStride);
+  format.bufferFromBuffer(dstBuffer, pf, (const rdr::U8*)pixels,
+                          dest.width(), dest.height(),
+                          dstStride, stride);
+  commitBufferRW(dest);
+}
+
 // -=- Simple pixel buffer with a continuous block of memory
 
 FullFramePixelBuffer::FullFramePixelBuffer(const PixelFormat& pf, int w, int h,
index e2cc3e929199a79d405a018e2e3dc191d911c887..7060a014cf677f7f5b243ecbe4a00425e337a400 100644 (file)
@@ -137,6 +137,13 @@ namespace rfb {
     //   pixel is the Pixel value to be used where mask_ is set
     void maskRect(const Rect& r, Pixel pixel, const void* mask_);
 
+    // Render in a specific format
+    //   Does the exact same thing as the above methods, but the given
+    //   pixel values are defined by the given PixelFormat.
+    void fillRect(const PixelFormat& pf, const Rect &dest, Pixel pix);
+    void imageRect(const PixelFormat& pf, const Rect &dest,
+                   const void* pixels, int stride=0);
+
   protected:
     ModifiablePixelBuffer();
   };