mirror of
https://github.com/love2d/love-android.git
synced 2026-08-19 12:14:49 +02:00
updated from latest love-android (228a26ab99bb)
This commit is contained in:
@@ -185,6 +185,7 @@ struct FramebufferStrategyCore : public FramebufferStrategy
|
||||
virtual void bindFBO(GLuint framebuffer)
|
||||
{
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
|
||||
++Canvas::switchCount;
|
||||
}
|
||||
|
||||
virtual void setAttachments()
|
||||
@@ -338,6 +339,7 @@ struct FramebufferStrategyPackedEXT : public FramebufferStrategy
|
||||
virtual void bindFBO(GLuint framebuffer)
|
||||
{
|
||||
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, framebuffer);
|
||||
++Canvas::switchCount;
|
||||
}
|
||||
|
||||
virtual void setAttachments()
|
||||
@@ -433,6 +435,8 @@ FramebufferStrategyEXT strategyEXT;
|
||||
Canvas *Canvas::current = nullptr;
|
||||
OpenGL::Viewport Canvas::systemViewport = OpenGL::Viewport();
|
||||
bool Canvas::screenHasSRGB = false;
|
||||
int Canvas::switchCount = 0;
|
||||
int Canvas::canvasCount = 0;
|
||||
|
||||
static void getStrategy()
|
||||
{
|
||||
@@ -460,6 +464,7 @@ Canvas::Canvas(int width, int height, Format format, int msaa)
|
||||
, format(format)
|
||||
, msaa_samples(msaa)
|
||||
, msaa_dirty(false)
|
||||
, texture_memory(0)
|
||||
{
|
||||
this->width = width;
|
||||
this->height = height;
|
||||
@@ -490,10 +495,14 @@ Canvas::Canvas(int width, int height, Format format, int msaa)
|
||||
getStrategy();
|
||||
|
||||
loadVolatile();
|
||||
|
||||
++canvasCount;
|
||||
}
|
||||
|
||||
Canvas::~Canvas()
|
||||
{
|
||||
--canvasCount;
|
||||
|
||||
// reset framebuffer if still using this one
|
||||
if (current == this)
|
||||
stopGrab();
|
||||
@@ -616,6 +625,14 @@ bool Canvas::loadVolatile()
|
||||
|
||||
msaa_dirty = (msaa_buffer != 0);
|
||||
|
||||
size_t prevmemsize = texture_memory;
|
||||
|
||||
texture_memory = (getFormatBitsPerPixel(format) * width * height) / 8;
|
||||
if (msaa_buffer != 0)
|
||||
texture_memory += (texture_memory * msaa_samples);
|
||||
|
||||
gl.updateTextureMemorySize(prevmemsize, texture_memory);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -630,6 +647,9 @@ void Canvas::unloadVolatile()
|
||||
resolve_fbo = msaa_buffer = 0;
|
||||
|
||||
attachedCanvases.clear();
|
||||
|
||||
gl.updateTextureMemorySize(texture_memory, 0);
|
||||
texture_memory = 0;
|
||||
}
|
||||
|
||||
void Canvas::drawv(const Matrix &t, const Vertex *v)
|
||||
@@ -647,7 +667,7 @@ void Canvas::drawv(const Matrix &t, const Vertex *v)
|
||||
gl.setVertexAttribArray(OpenGL::ATTRIB_POS, 2, GL_FLOAT, sizeof(Vertex), (GLvoid *) &v[0].x);
|
||||
gl.setVertexAttribArray(OpenGL::ATTRIB_TEXCOORD, 2, GL_FLOAT, sizeof(Vertex), (GLvoid *) &v[0].s);
|
||||
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
gl.drawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
|
||||
gl.disableVertexAttribArray(OpenGL::ATTRIB_POS);
|
||||
gl.disableVertexAttribArray(OpenGL::ATTRIB_TEXCOORD);
|
||||
@@ -1088,6 +1108,27 @@ void Canvas::convertFormat(Canvas::Format format, GLenum &internalformat, GLenum
|
||||
}
|
||||
}
|
||||
|
||||
size_t Canvas::getFormatBitsPerPixel(Format format)
|
||||
{
|
||||
switch (getSizedFormat(format))
|
||||
{
|
||||
case FORMAT_RGBA8:
|
||||
case FORMAT_RGB10A2:
|
||||
case FORMAT_RG11B10F:
|
||||
case FORMAT_SRGB:
|
||||
default:
|
||||
return 32;
|
||||
case FORMAT_RGBA4:
|
||||
case FORMAT_RGB5A1:
|
||||
case FORMAT_RGB565:
|
||||
return 16;
|
||||
case FORMAT_RGBA16F:
|
||||
return 64;
|
||||
case FORMAT_RGBA32F:
|
||||
return 128;
|
||||
}
|
||||
}
|
||||
|
||||
bool Canvas::isSupported()
|
||||
{
|
||||
getStrategy();
|
||||
|
||||
Reference in New Issue
Block a user