mirror of
https://github.com/love2d/love.git
synced 2026-08-19 20:19:42 +02:00
Merge Framebuffer:set/getWrap to minor
--HG-- branch : minor
This commit is contained in:
@@ -286,7 +286,7 @@ namespace opengl
|
|||||||
return img;
|
return img;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Framebuffer::setFilter(Image::Filter f)
|
void Framebuffer::setFilter(const Image::Filter &f)
|
||||||
{
|
{
|
||||||
GLint gmin = (f.min == Image::FILTER_NEAREST) ? GL_NEAREST : GL_LINEAR;
|
GLint gmin = (f.min == Image::FILTER_NEAREST) ? GL_NEAREST : GL_LINEAR;
|
||||||
GLint gmag = (f.mag == Image::FILTER_NEAREST) ? GL_NEAREST : GL_LINEAR;
|
GLint gmag = (f.mag == Image::FILTER_NEAREST) ? GL_NEAREST : GL_LINEAR;
|
||||||
@@ -311,18 +311,45 @@ namespace opengl
|
|||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Framebuffer::setWrap(const Image::Wrap &w)
|
||||||
|
{
|
||||||
|
GLint wrap_s = (w.s == Image::WRAP_CLAMP) ? GL_CLAMP_TO_EDGE : GL_REPEAT;
|
||||||
|
GLint wrap_t = (w.t == Image::WRAP_CLAMP) ? GL_CLAMP_TO_EDGE : GL_REPEAT;
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, img);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t);
|
||||||
|
}
|
||||||
|
|
||||||
|
Image::Wrap Framebuffer::getWrap() const
|
||||||
|
{
|
||||||
|
GLint wrap_s, wrap_t;
|
||||||
|
glBindTexture(GL_TEXTURE_2D, img);
|
||||||
|
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, &wrap_s);
|
||||||
|
glGetTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, &wrap_t);
|
||||||
|
|
||||||
|
Image::Wrap w;
|
||||||
|
w.s = (wrap_s == GL_CLAMP_TO_EDGE) ? Image::WRAP_CLAMP : Image::WRAP_REPEAT;
|
||||||
|
w.t = (wrap_t == GL_CLAMP_TO_EDGE) ? Image::WRAP_CLAMP : Image::WRAP_REPEAT;
|
||||||
|
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
|
||||||
bool Framebuffer::loadVolatile()
|
bool Framebuffer::loadVolatile()
|
||||||
{
|
{
|
||||||
status = strategy->createFBO(fbo, depthbuffer, img, width, height);
|
status = strategy->createFBO(fbo, depthbuffer, img, width, height);
|
||||||
if (status == GL_FRAMEBUFFER_COMPLETE)
|
if (status != GL_FRAMEBUFFER_COMPLETE)
|
||||||
setFilter(settings.filter);
|
return false;
|
||||||
|
|
||||||
return (status == GL_FRAMEBUFFER_COMPLETE);
|
setFilter(settings.filter);
|
||||||
|
setWrap(settings.wrap);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Framebuffer::unloadVolatile()
|
void Framebuffer::unloadVolatile()
|
||||||
{
|
{
|
||||||
settings.filter = getFilter();
|
settings.filter = getFilter();
|
||||||
|
settings.wrap = getWrap();
|
||||||
strategy->deleteFBO(fbo, depthbuffer, img);
|
strategy->deleteFBO(fbo, depthbuffer, img);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,9 +32,12 @@ namespace opengl
|
|||||||
virtual void draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const;
|
virtual void draw(float x, float y, float angle, float sx, float sy, float ox, float oy) const;
|
||||||
love::image::ImageData * getImageData(love::image::Image * image);
|
love::image::ImageData * getImageData(love::image::Image * image);
|
||||||
|
|
||||||
void setFilter(Image::Filter f);
|
void setFilter(const Image::Filter &f);
|
||||||
Image::Filter getFilter() const;
|
Image::Filter getFilter() const;
|
||||||
|
|
||||||
|
void setWrap(const Image::Wrap &w);
|
||||||
|
Image::Wrap getWrap() const;
|
||||||
|
|
||||||
bool loadVolatile();
|
bool loadVolatile();
|
||||||
void unloadVolatile();
|
void unloadVolatile();
|
||||||
|
|
||||||
@@ -51,6 +54,7 @@ namespace opengl
|
|||||||
|
|
||||||
struct {
|
struct {
|
||||||
Image::Filter filter;
|
Image::Filter filter;
|
||||||
|
Image::Wrap wrap;
|
||||||
} settings;
|
} settings;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ namespace opengl
|
|||||||
if (!Image::getConstant(minstr, f.min))
|
if (!Image::getConstant(minstr, f.min))
|
||||||
return luaL_error(L, "Invalid min filter mode: %s", minstr);
|
return luaL_error(L, "Invalid min filter mode: %s", minstr);
|
||||||
if (!Image::getConstant(magstr, f.mag))
|
if (!Image::getConstant(magstr, f.mag))
|
||||||
return luaL_error(L, "Invalid max filter mode: %s", minstr);
|
return luaL_error(L, "Invalid max filter mode: %s", magstr);
|
||||||
|
|
||||||
fbo->setFilter(f);
|
fbo->setFilter(f);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -73,11 +73,45 @@ namespace opengl
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int w_Framebuffer_setWrap(lua_State * L)
|
||||||
|
{
|
||||||
|
Framebuffer * fbo = luax_checkfbo(L, 1);
|
||||||
|
const char * wrap_s = luaL_checkstring(L, 2);
|
||||||
|
const char * wrap_t = luaL_checkstring(L, 3);
|
||||||
|
|
||||||
|
Image::Wrap w;
|
||||||
|
if (!Image::getConstant(wrap_s, w.s))
|
||||||
|
return luaL_error(L, "Invalid wrap mode: %s", wrap_s);
|
||||||
|
if (!Image::getConstant(wrap_t, w.t))
|
||||||
|
return luaL_error(L, "Invalid wrap mode: %s", wrap_t);
|
||||||
|
|
||||||
|
fbo->setWrap(w);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int w_Framebuffer_getWrap(lua_State * L)
|
||||||
|
{
|
||||||
|
Framebuffer * fbo = luax_checkfbo(L, 1);
|
||||||
|
Image::Wrap w = fbo->getWrap();
|
||||||
|
|
||||||
|
const char * wrap_s;
|
||||||
|
const char * wrap_t;
|
||||||
|
Image::getConstant(w.s, wrap_s);
|
||||||
|
Image::getConstant(w.t, wrap_t);
|
||||||
|
|
||||||
|
lua_pushstring(L, wrap_s);
|
||||||
|
lua_pushstring(L, wrap_t);
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
static const luaL_Reg functions[] = {
|
static const luaL_Reg functions[] = {
|
||||||
{ "renderTo", w_Framebuffer_renderTo },
|
{ "renderTo", w_Framebuffer_renderTo },
|
||||||
{ "getImageData", w_Framebuffer_getImageData },
|
{ "getImageData", w_Framebuffer_getImageData },
|
||||||
{ "setFilter", w_Framebuffer_setFilter },
|
{ "setFilter", w_Framebuffer_setFilter },
|
||||||
{ "getFilter", w_Framebuffer_getFilter },
|
{ "getFilter", w_Framebuffer_getFilter },
|
||||||
|
{ "setWrap", w_Framebuffer_setWrap },
|
||||||
|
{ "getWrap", w_Framebuffer_getWrap },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -17,6 +17,8 @@ namespace opengl
|
|||||||
int w_Framebuffer_getImageData(lua_State * L);
|
int w_Framebuffer_getImageData(lua_State * L);
|
||||||
int w_Framebuffer_setFilter(lua_State * L);
|
int w_Framebuffer_setFilter(lua_State * L);
|
||||||
int w_Framebuffer_getFilter(lua_State * L);
|
int w_Framebuffer_getFilter(lua_State * L);
|
||||||
|
int w_Framebuffer_setWrap(lua_State * L);
|
||||||
|
int w_Framebuffer_getWrap(lua_State * L);
|
||||||
int luaopen_framebuffer(lua_State * L);
|
int luaopen_framebuffer(lua_State * L);
|
||||||
|
|
||||||
} // opengl
|
} // opengl
|
||||||
|
|||||||
@@ -96,14 +96,14 @@ namespace box2d
|
|||||||
}
|
}
|
||||||
|
|
||||||
World::World(b2AABB aabb)
|
World::World(b2AABB aabb)
|
||||||
: meter(DEFAULT_METER), world(NULL)
|
: world(NULL), meter(DEFAULT_METER)
|
||||||
{
|
{
|
||||||
world = new b2World(scaleDown(aabb), b2Vec2(0,0), true);
|
world = new b2World(scaleDown(aabb), b2Vec2(0,0), true);
|
||||||
world->SetContactListener(this);
|
world->SetContactListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
World::World(b2AABB aabb, b2Vec2 gravity, bool sleep, int meter)
|
World::World(b2AABB aabb, b2Vec2 gravity, bool sleep, int meter)
|
||||||
: meter(meter), world(NULL)
|
: world(NULL), meter(meter)
|
||||||
{
|
{
|
||||||
world = new b2World(scaleDown(aabb), scaleDown(gravity), sleep);
|
world = new b2World(scaleDown(aabb), scaleDown(gravity), sleep);
|
||||||
world->SetContactListener(this);
|
world->SetContactListener(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user