private void Lock(Action <BufferObject, uint> action) { unsafe { var lastBo = this.boHandle; this.boHandle = gbm_surface_lock_front_buffer(this.surfaceHandle); if (this.boHandle == null) { throw new Exception("[GBM]: Failed to lock front buffer."); } var bo = new BufferObject(this.boHandle); action?.Invoke(bo, bo.GetFb(this.Device)); if (lastBo is not null) { this.Release(lastBo); } } }
public void SetUserData(nint data, DestroyUserDataCallback destroyFB) => BufferObject.gbm_bo_set_user_data(this.handle, data, destroyFB);
public uint PanelStride(int panel) => BufferObject.gbm_bo_get_stride_for_plane(this.handle, panel);
public uint PanelOffset(int panel) => BufferObject.gbm_bo_get_offset(this.handle, panel);
public uint PanelHandle(int panel) => BufferObject.gbm_bo_get_handle_for_plane(this.handle, panel).u32;