mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 22:28:37 +02:00
Better buffer updating
This commit is contained in:
parent
274321de8a
commit
a0cc6f8817
2 changed files with 3 additions and 5 deletions
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue