mirror of
https://github.com/love2d/love.git
synced 2026-08-16 08:11:02 +02:00
Add sync and async texture and buffer readback APIs.
- Add imagedata = love.graphics.readbackTexture(texture, [slice, mipmap, x, y, w, h, [dest, destx, desty]]). - Add readback = love.graphics.readbackTextureAsync(texture, [slice, mipmap, x, y, w, h, [dest, destx, desty]]). - Add bytedata = love.graphics.readbackBuffer(buffer, [offset, size, [dest, destoffset]]). - Add readback = ove.graphics.readbackBufferAsync(buffer, [offset, size, [dest, destoffset]]). - Deprecate Texture:newImageData. The async variants return a new GraphicsReadback object. It has the following methods: - isComplete() - hasError() - wait() - getBufferData() - getImageData() - update() (called automatically every frame by love, not normally needed). Support notes: - readbackBuffer and readbackBufferAsync require buffer copying support. - readbackTexture with a render target (canvas) is always supported. readbackTexture with a non-render-target requires copy-texture-to-buffer support. - readbackTextureAsync with a render target requires copy-render-target-to-buffer support. readbackTextureAsync with a non-render-target requires copy-texture-to-buffer support.
This commit is contained in:
@@ -45,6 +45,22 @@ bool FenceSync::fence()
|
||||
return !wasActive;
|
||||
}
|
||||
|
||||
bool FenceSync::isComplete() const
|
||||
{
|
||||
if (sync == 0)
|
||||
return true;
|
||||
|
||||
GLenum status = glClientWaitSync(sync, 0, 0);
|
||||
|
||||
if (status == GL_ALREADY_SIGNALED || status == GL_CONDITION_SATISFIED)
|
||||
return true;
|
||||
|
||||
if (status == GL_WAIT_FAILED)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool FenceSync::cpuWait()
|
||||
{
|
||||
if (sync == 0)
|
||||
|
||||
Reference in New Issue
Block a user