Beatmup
swapper.cpp
Go to the documentation of this file.
1 /*
2  Beatmup image and signal processing library
3  Copyright (C) 2019, lnstadrum
4 
5  This program is free software: you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation, either version 3 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18 
19 #include "swapper.h"
20 #include "../context.h"
21 #include "../gpu/pipeline.h"
22 
23 using namespace Beatmup;
24 
26  BitmapContentLock lock;
29 
30  if (fromGpuToCpu)
31  gpu.pullPixels(*bitmap);
32  else
33  gpu.pushPixels(*bitmap);
34 
35  lock.unlockAll();
36  return true;
37 }
38 
39 Swapper::Swapper(bool fromGpuToCpu) : bitmap(nullptr), fromGpuToCpu(fromGpuToCpu)
40 {}
41 
42 
44  this->bitmap = &bitmap;
45 }
46 
47 
50  Swapper me(true);
51  me.setBitmap(bitmap);
53  }
54 }
55 
56 
59  Swapper me(false);
60  me.setBitmap(bitmap);
62  }
63 }
A very basic class for any image.
Context & getContext() const
bool isUpToDate(ProcessingTarget) const
Makes sure the bitmap content is accessible within an image processing task.
Definition: content_lock.h:34
void writeLock(GraphicPipeline *gpu, AbstractBitmap *bitmap, ProcessingTarget target)
Locks content of a bitmap for writing using a specific processing target device.
void unlockAll()
Unlocks all the locked bitmaps unconditionally.
float performTask(AbstractTask &task, const PoolIndex pool=DEFAULT_POOL)
Performs a given task.
Definition: context.cpp:240
Internal low-level GPU control API.
Definition: pipeline.h:33
void pullPixels(AbstractBitmap &bitmap)
Transfers bitmap pixels from GPU to CPU.
Definition: pipeline.cpp:921
void pushPixels(AbstractBitmap &bitmap)
Transfers bitmap pixels from CPU to GPU.
Definition: pipeline.cpp:926
bool processOnGPU(GraphicPipeline &gpu, TaskThread &)
Executes the task on GPU.
Definition: swapper.cpp:25
AbstractBitmap * bitmap
Definition: swapper.h:27
Swapper(bool fromGpuToCpu)
Definition: swapper.cpp:39
bool fromGpuToCpu
Definition: swapper.h:28
static void pushPixels(AbstractBitmap &bitmap)
Copies bitmap from RAM to GPU memory.
Definition: swapper.cpp:57
void setBitmap(AbstractBitmap &)
Definition: swapper.cpp:43
static void pullPixels(AbstractBitmap &bitmap)
Copies bitmap from GPU memory to RAM.
Definition: swapper.cpp:48
Thread executing tasks.
Definition: parallelism.h:154
Beatmup::InternalBitmap * bitmap