mirror of
https://github.com/love2d/love.git
synced 2026-08-12 08:30:56 +02:00
Fixed love.graphics.clear(colortable) causing crashes in GLES 2.0 when a Canvas is active (resolves issue #1127).
This commit is contained in:
@@ -20,6 +20,7 @@ Released: N/A
|
|||||||
* Fixed RandomGenerator:random crashing if a nil 'self' is used.
|
* Fixed RandomGenerator:random crashing if a nil 'self' is used.
|
||||||
* Fixed loading BMFont files which have characters with 0 width or height (a space character, for example).
|
* Fixed loading BMFont files which have characters with 0 width or height (a space character, for example).
|
||||||
* Fixed love.graphics.newFont causing crashes if FileData is passed in.
|
* Fixed love.graphics.newFont causing crashes if FileData is passed in.
|
||||||
|
* Fixed love.graphics.clear(colortable) causing crashes on OpenGL ES 2 systems when a Canvas is active.
|
||||||
* Fixed a driver bug on some Android devices which caused all objects to show up as black.
|
* Fixed a driver bug on some Android devices which caused all objects to show up as black.
|
||||||
* Fixed a driver bug on Windows with AMD graphics cards where love.graphics.clear would not always work.
|
* Fixed a driver bug on Windows with AMD graphics cards where love.graphics.clear would not always work.
|
||||||
* Fixed Shader:sendColor incorrectly converting alpha values from sRGB to linear RGB when gamma-correct rendering is enabled.
|
* Fixed Shader:sendColor incorrectly converting alpha values from sRGB to linear RGB when gamma-correct rendering is enabled.
|
||||||
|
|||||||
@@ -461,17 +461,23 @@ void Graphics::clear(const std::vector<OptionalColorf> &colors)
|
|||||||
if (colors.size() == 0)
|
if (colors.size() == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (states.back().canvases.size() == 0)
|
size_t numcanvases = states.back().canvases.size();
|
||||||
|
|
||||||
|
if (numcanvases > 0 && colors.size() != numcanvases)
|
||||||
|
throw love::Exception("Number of clear colors must match the number of active canvases (%ld)", states.back().canvases.size());
|
||||||
|
|
||||||
|
// We want to take the single-color codepath if there's no active Canvas, or
|
||||||
|
// if there's only one active Canvas. The multi-color codepath (in the loop
|
||||||
|
// below) assumes MRT functions are available, and also may call more
|
||||||
|
// expensive GL functions which are unnecessary if only one Canvas is active.
|
||||||
|
if (numcanvases <= 1)
|
||||||
{
|
{
|
||||||
if (colors[0].enabled)
|
if (colors[0].enabled)
|
||||||
clear({colors[0].r, colors[0].g, colors[0].b, colors[0].a});
|
clear(colors[0].toColor());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (colors.size() != states.back().canvases.size())
|
|
||||||
throw love::Exception("Number of clear colors must match the number of active canvases (%ld)", states.back().canvases.size());
|
|
||||||
|
|
||||||
bool drawbuffermodified = false;
|
bool drawbuffermodified = false;
|
||||||
|
|
||||||
for (int i = 0; i < (int) colors.size(); i++)
|
for (int i = 0; i < (int) colors.size(); i++)
|
||||||
|
|||||||
@@ -66,6 +66,8 @@ public:
|
|||||||
{
|
{
|
||||||
float r, g, b, a;
|
float r, g, b, a;
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
|
||||||
|
Colorf toColor() const { return Colorf(r, g, b, a); }
|
||||||
};
|
};
|
||||||
|
|
||||||
Graphics();
|
Graphics();
|
||||||
|
|||||||
Reference in New Issue
Block a user