title: Clear a CVPixelBufferRef using the GPU
body: <p>I am writing some video processing code using <code>AVComposition</code>. Giving only the necessary background details, I receive a <code>CVPixelBuffer</code> from an apple API that I do not control. This CVPixel buffer, contains a previously rendered video frame, as they are apparently recycled by this Apple API I do not control. So my goal, is to set all the pixels in the CVPixelBufferRef to [0, 0, 0, 0] (in RGBA color space). I can do this on the CPU via this function:</p>
  
  <pre><code>- (void)processPixelBuffer: (CVImageBufferRef)pixelBuffer
  {
      CVPixelBufferLockBaseAddress( pixelBuffer, 0 );
  
      int bufferWidth = CVPixelBufferGetWidth(pixelBuffer);
      int bufferHeight = CVPixelBufferGetHeight(pixelBuffer);
      unsigned char *pixel = (unsigned char *)CVPixelBufferGetBaseAddress(pixelBuffer);
  
      for( int row = 0; row &lt; bufferHeight; row++ ) {
          for( int column = 0; column &lt; bufferWidth; column++ ) {
              pixel[0] = 0;
              pixel[1] = 0;
              pixel[2] = 0;
              pixel[3] = 0;
              pixel += 4;
          }
      }
      CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );
  }
  </code></pre>
  
  <p>Is there some way I can accomplish the same thing using the GPU? Additionally, is it possible to do this via CoreImage? as I don't know openGL and it appears quite complicated to set up.</p>