Cogs.Core
CopyResourceTask.cpp
1#include "CopyResourceTask.h"
2
3#include "Rendering/IGraphicsDevice.h"
4#include "Rendering/IContext.h"
5#include "Rendering/ITextures.h"
6
7#include "Foundation/Logging/Logger.h"
8
9#include "Context.h"
10#include "Platform/Instrumentation.h"
11#include "Renderer/RenderTexture.h"
12#include "Renderer/RenderBuffer.h"
13#include "Services/Time.h"
14
15namespace
16{
17 Cogs::Logging::Log logger = Cogs::Logging::getLogger("CopyResourceTask");
18}
19
20void Cogs::Core::CopyResourceTask::apply(RenderTaskContext * renderContext)
21{
22 RenderInstrumentationScope(renderContext->device->getImmediateContext(), SCOPE_RENDERING, "CopyResourceTask::apply");
23
24 auto device = renderContext->device;
25 auto deviceContext = device->getImmediateContext();
26
27 for (auto & r : input.resources) {
28 if (r.type == RenderResourceType::RenderTexture) {
29 auto inputTexture = r.renderTexure;
30 auto outputTexture = output.get(RenderResourceType::RenderTexture)->renderTexure;
31
32 if (inputTexture && outputTexture) {
33 deviceContext->copyResource(outputTexture->textureHandle, inputTexture->textureHandle);
34 } else {
35 LOG_ERROR(logger, "Input/output textures not valid.");
36 }
37 } else if (r.type == RenderResourceType::RenderBuffer) {
38 auto inputBuffer = r.renderBuffer;
39 auto outputBuffer = output.get(RenderResourceType::RenderBuffer)->renderBuffer;
40
41 if (inputBuffer && outputBuffer) {
42 deviceContext->copyResource(outputBuffer->getHandle(destinationIndex), inputBuffer->getHandle(sourceIndex));
43 outputBuffer->setFrame(destinationIndex, renderContext->context->time->getFrame());
44 } else {
45 LOG_ERROR(logger, "Input/output buffers not valid.");
46 }
47 }
48 }
49}
Log implementation class.
Definition: LogManager.h:139
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Definition: LogManager.h:180