mirror of
https://github.com/love2d/love.git
synced 2026-08-19 04:06:17 +02:00
Fix Mesh/Buffer:flush uploading more data than it needs to, sometimes.
This commit is contained in:
@@ -112,6 +112,7 @@ void *Buffer::map()
|
|||||||
|
|
||||||
modifiedOffset = 0;
|
modifiedOffset = 0;
|
||||||
modifiedSize = 0;
|
modifiedSize = 0;
|
||||||
|
isMappedDataModified = false;
|
||||||
|
|
||||||
return memoryMap;
|
return memoryMap;
|
||||||
}
|
}
|
||||||
@@ -149,8 +150,13 @@ void Buffer::unmap()
|
|||||||
if (!mapped)
|
if (!mapped)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
mapped = false;
|
||||||
|
|
||||||
if ((mapFlags & MAP_EXPLICIT_RANGE_MODIFY) != 0)
|
if ((mapFlags & MAP_EXPLICIT_RANGE_MODIFY) != 0)
|
||||||
{
|
{
|
||||||
|
if (!isMappedDataModified)
|
||||||
|
return;
|
||||||
|
|
||||||
modifiedOffset = std::min(modifiedOffset, getSize() - 1);
|
modifiedOffset = std::min(modifiedOffset, getSize() - 1);
|
||||||
modifiedSize = std::min(modifiedSize, getSize() - modifiedOffset);
|
modifiedSize = std::min(modifiedSize, getSize() - modifiedOffset);
|
||||||
}
|
}
|
||||||
@@ -184,8 +190,6 @@ void Buffer::unmap()
|
|||||||
|
|
||||||
modifiedOffset = 0;
|
modifiedOffset = 0;
|
||||||
modifiedSize = 0;
|
modifiedSize = 0;
|
||||||
|
|
||||||
mapped = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buffer::setMappedRangeModified(size_t offset, size_t modifiedsize)
|
void Buffer::setMappedRangeModified(size_t offset, size_t modifiedsize)
|
||||||
@@ -193,6 +197,14 @@ void Buffer::setMappedRangeModified(size_t offset, size_t modifiedsize)
|
|||||||
if (!mapped || !(mapFlags & MAP_EXPLICIT_RANGE_MODIFY))
|
if (!mapped || !(mapFlags & MAP_EXPLICIT_RANGE_MODIFY))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (!isMappedDataModified)
|
||||||
|
{
|
||||||
|
modifiedOffset = offset;
|
||||||
|
modifiedSize = size;
|
||||||
|
isMappedDataModified = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// We're being conservative right now by internally marking the whole range
|
// We're being conservative right now by internally marking the whole range
|
||||||
// from the start of section a to the end of section b as modified if both
|
// from the start of section a to the end of section b as modified if both
|
||||||
// a and b are marked as modified.
|
// a and b are marked as modified.
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ private:
|
|||||||
|
|
||||||
size_t modifiedOffset = 0;
|
size_t modifiedOffset = 0;
|
||||||
size_t modifiedSize = 0;
|
size_t modifiedSize = 0;
|
||||||
|
bool isMappedDataModified = false;
|
||||||
|
|
||||||
}; // Buffer
|
}; // Buffer
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user