Better buffer updating

This commit is contained in:
Bradley Austin Davis 2016-07-29 14:29:41 -07:00 committed by Brad Davis
parent 274321de8a
commit a0cc6f8817
2 changed files with 3 additions and 5 deletions

View file

@ -283,7 +283,6 @@ void Buffer::markDirty(Size offset, Size bytes) {
} }
void Buffer::applyUpdate(const Update& update) { void Buffer::applyUpdate(const Update& update) {
_renderSysmem.resize(update.size);
_renderPages = update.pages; _renderPages = update.pages;
update.updateOperator(_renderSysmem); update.updateOperator(_renderSysmem);
} }
@ -296,7 +295,7 @@ Buffer::Update Buffer::getUpdate() const {
Update result; Update result;
result.pages = _pages; result.pages = _pages;
result.size = _sysmem.getSize(); Size bufferSize = _sysmem.getSize();
Size pageSize = _pages._pageSize; Size pageSize = _pages._pageSize;
PageManager::Pages dirtyPages = _pages.getMarkedPages(); PageManager::Pages dirtyPages = _pages.getMarkedPages();
std::vector<uint8> dirtyPageData; std::vector<uint8> dirtyPageData;
@ -308,7 +307,8 @@ Buffer::Update Buffer::getUpdate() const {
memcpy(dirtyPageData.data() + destOffset, _sysmem.readData() + sourceOffset, pageSize); memcpy(dirtyPageData.data() + destOffset, _sysmem.readData() + sourceOffset, pageSize);
} }
result.updateOperator = [pageSize, dirtyPages, dirtyPageData](Sysmem& dest){ result.updateOperator = [bufferSize, pageSize, dirtyPages, dirtyPageData](Sysmem& dest){
dest.resize(bufferSize);
for (Size i = 0; i < dirtyPages.size(); ++i) { for (Size i = 0; i < dirtyPages.size(); ++i) {
Size page = dirtyPages[i]; Size page = dirtyPages[i];
Size sourceOffset = i * pageSize; Size sourceOffset = i * pageSize;
@ -319,7 +319,6 @@ Buffer::Update Buffer::getUpdate() const {
return result; return result;
} }
Buffer::Size Buffer::setData(Size size, const Byte* data) { Buffer::Size Buffer::setData(Size size, const Byte* data) {
resize(size); resize(size);
setSubData(0, size, data); setSubData(0, size, data);

View file

@ -264,7 +264,6 @@ class Buffer : public Resource {
public: public:
using Flag = PageManager::Flag; using Flag = PageManager::Flag;
struct Update { struct Update {
Size size;
PageManager pages; PageManager pages;
Sysmem::Operator updateOperator; Sysmem::Operator updateOperator;
}; };