overte-HifiExperiments/libraries/gpu/src/gpu/Frame.cpp
2016-08-12 22:18:36 -07:00

53 lines
1.4 KiB
C++

//
// Created by Bradley Austin Davis on 2016/07/26
// Copyright 2013-2016 High Fidelity, Inc.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//
#include "Frame.h"
#include <unordered_set>
using namespace gpu;
Frame::~Frame() {
if (framebuffer && framebufferRecycler) {
framebufferRecycler(framebuffer);
framebuffer.reset();
}
if (overlay && overlayRecycler) {
overlayRecycler(overlay);
overlay.reset();
}
}
void Frame::finish() {
std::unordered_set<Buffer*> seenBuffers;
for (Batch& batch : batches) {
for (auto& bufferCacheItem : batch._buffers._items) {
const BufferPointer& buffer = bufferCacheItem._data;
if (!buffer) {
continue;
}
if (!buffer->isDirty()) {
continue;
}
if (seenBuffers.count(buffer.get())) {
continue;
}
seenBuffers.insert(buffer.get());
bufferUpdates.push_back({ buffer, buffer->getUpdate() });
}
}
}
void Frame::preRender() {
for (auto& bufferUpdate : bufferUpdates) {
const BufferPointer& buffer = bufferUpdate.first;
const Buffer::Update& update = bufferUpdate.second;
buffer->applyUpdate(update);
}
bufferUpdates.clear();
}