|
@@ -160,14 +160,8 @@ void Graphics::restoreStateChecked(const DisplayState &s)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- for (int i = 0; i < 4; i++)
|
|
|
- {
|
|
|
- if (s.colorMask[i] != cur.colorMask[i])
|
|
|
- {
|
|
|
- setColorMask(s.colorMask);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
+ if (s.colorMask != cur.colorMask)
|
|
|
+ setColorMask(s.colorMask);
|
|
|
|
|
|
if (s.wireframe != cur.wireframe)
|
|
|
setWireframe(s.wireframe);
|
|
@@ -186,7 +180,7 @@ void Graphics::setViewportSize(int width, int height)
|
|
|
|
|
|
// We want to affect the main screen, not any Canvas that's currently active
|
|
|
// (not that any *should* be active when this is called.)
|
|
|
- std::vector<Object::StrongRef<Canvas>> canvases = states.back().canvases;
|
|
|
+ std::vector<StrongRef<Canvas>> canvases = states.back().canvases;
|
|
|
setCanvas();
|
|
|
|
|
|
// Set the viewport to top-left corner.
|
|
@@ -391,7 +385,7 @@ void Graphics::clear(ClearType type)
|
|
|
void Graphics::present()
|
|
|
{
|
|
|
// Make sure we don't have a canvas active.
|
|
|
- std::vector<Object::StrongRef<Canvas>> canvases = states.back().canvases;
|
|
|
+ std::vector<StrongRef<Canvas>> canvases = states.back().canvases;
|
|
|
setCanvas();
|
|
|
|
|
|
if (GLAD_ES_VERSION_3_0 || GLAD_EXT_discard_framebuffer)
|
|
@@ -761,7 +755,7 @@ void Graphics::setCanvas(Canvas *canvas)
|
|
|
|
|
|
canvas->startGrab();
|
|
|
|
|
|
- std::vector<Object::StrongRef<Canvas>> canvasref;
|
|
|
+ std::vector<StrongRef<Canvas>> canvasref;
|
|
|
canvasref.push_back(canvas);
|
|
|
|
|
|
std::swap(state.canvases, canvasref);
|
|
@@ -779,7 +773,7 @@ void Graphics::setCanvas(const std::vector<Canvas *> &canvases)
|
|
|
auto attachments = std::vector<Canvas *>(canvases.begin() + 1, canvases.end());
|
|
|
canvases[0]->startGrab(attachments);
|
|
|
|
|
|
- std::vector<Object::StrongRef<Canvas>> canvasrefs;
|
|
|
+ std::vector<StrongRef<Canvas>> canvasrefs;
|
|
|
canvasrefs.reserve(canvases.size());
|
|
|
|
|
|
for (Canvas *c : canvases)
|
|
@@ -788,12 +782,12 @@ void Graphics::setCanvas(const std::vector<Canvas *> &canvases)
|
|
|
std::swap(state.canvases, canvasrefs);
|
|
|
}
|
|
|
|
|
|
-void Graphics::setCanvas(const std::vector<Object::StrongRef<Canvas>> &canvases)
|
|
|
+void Graphics::setCanvas(const std::vector<StrongRef<Canvas>> &canvases)
|
|
|
{
|
|
|
std::vector<Canvas *> canvaslist;
|
|
|
canvaslist.reserve(canvases.size());
|
|
|
|
|
|
- for (const Object::StrongRef<Canvas> &c : canvases)
|
|
|
+ for (const StrongRef<Canvas> &c : canvases)
|
|
|
canvaslist.push_back(c.get());
|
|
|
|
|
|
return setCanvas(canvaslist);
|
|
@@ -814,21 +808,18 @@ std::vector<Canvas *> Graphics::getCanvas() const
|
|
|
std::vector<Canvas *> canvases;
|
|
|
canvases.reserve(states.back().canvases.size());
|
|
|
|
|
|
- for (const Object::StrongRef<Canvas> &c : states.back().canvases)
|
|
|
+ for (const StrongRef<Canvas> &c : states.back().canvases)
|
|
|
canvases.push_back(c.get());
|
|
|
|
|
|
return canvases;
|
|
|
}
|
|
|
|
|
|
-void Graphics::setColorMask(const bool mask[4])
|
|
|
+void Graphics::setColorMask(ColorMask mask)
|
|
|
{
|
|
|
- for (int i = 0; i < 4; i++)
|
|
|
- states.back().colorMask[i] = mask[i];
|
|
|
-
|
|
|
- glColorMask(mask[0], mask[1], mask[2], mask[3]);
|
|
|
+ glColorMask(mask.r, mask.g, mask.b, mask.a);
|
|
|
}
|
|
|
|
|
|
-const bool *Graphics::getColorMask() const
|
|
|
+Graphics::ColorMask Graphics::getColorMask() const
|
|
|
{
|
|
|
return states.back().colorMask;
|
|
|
}
|
|
@@ -1118,7 +1109,7 @@ love::image::ImageData *Graphics::newScreenshot(love::image::Image *image, bool
|
|
|
{
|
|
|
// Temporarily unbind the currently active canvas (glReadPixels reads the
|
|
|
// active framebuffer, not the main one.)
|
|
|
- std::vector<Object::StrongRef<Canvas>> canvases = states.back().canvases;
|
|
|
+ std::vector<StrongRef<Canvas>> canvases = states.back().canvases;
|
|
|
setCanvas();
|
|
|
|
|
|
int w = getWidth();
|
|
@@ -1352,14 +1343,12 @@ Graphics::DisplayState::DisplayState()
|
|
|
, stencilInvert(false)
|
|
|
, font(nullptr)
|
|
|
, shader(nullptr)
|
|
|
+ , colorMask({true, true, true, true})
|
|
|
, wireframe(false)
|
|
|
, defaultFilter()
|
|
|
, defaultMipmapFilter(Texture::FILTER_NEAREST)
|
|
|
, defaultMipmapSharpness(0.0f)
|
|
|
{
|
|
|
- // We should just directly initialize the array in the initializer list, but
|
|
|
- // that feature of C++11 is broken in Visual Studio 2013...
|
|
|
- colorMask[0] = colorMask[1] = colorMask[2] = colorMask[3] = true;
|
|
|
}
|
|
|
|
|
|
Graphics::DisplayState::DisplayState(const DisplayState &other)
|
|
@@ -1377,13 +1366,12 @@ Graphics::DisplayState::DisplayState(const DisplayState &other)
|
|
|
, font(other.font)
|
|
|
, shader(other.shader)
|
|
|
, canvases(other.canvases)
|
|
|
+ , colorMask(other.colorMask)
|
|
|
, wireframe(other.wireframe)
|
|
|
, defaultFilter(other.defaultFilter)
|
|
|
, defaultMipmapFilter(other.defaultMipmapFilter)
|
|
|
, defaultMipmapSharpness(other.defaultMipmapSharpness)
|
|
|
{
|
|
|
- for (int i = 0; i < 4; i++)
|
|
|
- colorMask[i] = other.colorMask[i];
|
|
|
}
|
|
|
|
|
|
Graphics::DisplayState::~DisplayState()
|
|
@@ -1408,8 +1396,7 @@ Graphics::DisplayState &Graphics::DisplayState::operator = (const DisplayState &
|
|
|
shader = other.shader;
|
|
|
canvases = other.canvases;
|
|
|
|
|
|
- for (int i = 0; i < 4; i++)
|
|
|
- colorMask[i] = other.colorMask[i];
|
|
|
+ colorMask = other.colorMask;
|
|
|
|
|
|
wireframe = other.wireframe;
|
|
|
|