char* GraphicsSurface::platformLock(const IntRect& rect, int* outputStride, LockOptions lockOptions) { m_lockOptions = lockOptions; IOReturn status = IOSurfaceLock(m_platformSurface, ioSurfaceLockOptions(m_lockOptions), 0); if (status == kIOReturnCannotLock) { m_lockOptions |= RetainPixels; IOSurfaceLock(m_platformSurface, ioSurfaceLockOptions(m_lockOptions), 0); } int stride = IOSurfaceGetBytesPerRow(m_platformSurface); if (outputStride) *outputStride = stride; char* base = static_cast<char*>(IOSurfaceGetBaseAddress(m_platformSurface)); return base + stride * rect.y() + rect.x() * 4; }
char* GraphicsSurface::platformLock(const IntRect& rect, int* outputStride, LockOptions lockOptions) { // Locking is only necessary for single buffered use. // In this case we only have a front buffer, so we only lock this one. m_lockOptions = lockOptions; IOReturn status = IOSurfaceLock(m_private->frontBuffer(), ioSurfaceLockOptions(m_lockOptions), 0); if (status == kIOReturnCannotLock) { m_lockOptions |= RetainPixels; IOSurfaceLock(m_private->frontBuffer(), ioSurfaceLockOptions(m_lockOptions), 0); } int stride = IOSurfaceGetBytesPerRow(m_private->frontBuffer()); if (outputStride) *outputStride = stride; char* base = static_cast<char*>(IOSurfaceGetBaseAddress(m_private->frontBuffer())); return base + stride * rect.y() + rect.x() * 4; }
void GraphicsSurface::platformUnlock() { IOSurfaceUnlock(m_private->frontBuffer(), ioSurfaceLockOptions(m_lockOptions), 0); }
void GraphicsSurface::platformUnlock() { IOSurfaceUnlock(m_platformSurface, ioSurfaceLockOptions(m_lockOptions), 0); }