… | |
… | |
1258 | MODULE = CFPlus PACKAGE = CFPlus::Texture |
1258 | MODULE = CFPlus PACKAGE = CFPlus::Texture |
1259 | |
1259 | |
1260 | int minpot (int n) |
1260 | int minpot (int n) |
1261 | |
1261 | |
1262 | void |
1262 | void |
1263 | pad2pot (SV *data_, SV *w_, SV *h_) |
1263 | pad (SV *data_, int ow, int oh, int nw, int nh) |
1264 | CODE: |
1264 | CODE: |
1265 | { |
1265 | { |
1266 | int ow = SvIV (w_); |
1266 | if ((nw != ow || nh != oh) && SvOK (data_)) |
1267 | int oh = SvIV (h_); |
|
|
1268 | |
|
|
1269 | if (ow && oh) |
|
|
1270 | { |
1267 | { |
1271 | int nw = minpot (ow); |
|
|
1272 | int nh = minpot (oh); |
|
|
1273 | |
|
|
1274 | if (nw != ow || nh != oh) |
|
|
1275 | { |
|
|
1276 | if (SvOK (data_)) |
|
|
1277 | { |
|
|
1278 | STRLEN datalen; |
1268 | STRLEN datalen; |
1279 | char *data = SvPVbyte (data_, datalen); |
1269 | char *data = SvPVbyte (data_, datalen); |
1280 | int bpp = datalen / (ow * oh); |
1270 | int bpp = datalen / (ow * oh); |
1281 | SV *result_ = sv_2mortal (newSV (nw * nh * bpp)); |
1271 | SV *result_ = sv_2mortal (newSV (nw * nh * bpp)); |
1282 | |
1272 | |
1283 | SvPOK_only (result_); |
1273 | SvPOK_only (result_); |
1284 | SvCUR_set (result_, nw * nh * bpp); |
1274 | SvCUR_set (result_, nw * nh * bpp); |
1285 | |
1275 | |
1286 | memset (SvPVX (result_), 0, nw * nh * bpp); |
1276 | memset (SvPVX (result_), 0, nw * nh * bpp); |
1287 | while (oh--) |
1277 | while (oh--) |
1288 | memcpy (SvPVX (result_) + oh * nw * bpp, data + oh * ow * bpp, ow * bpp); |
1278 | memcpy (SvPVX (result_) + oh * nw * bpp, data + oh * ow * bpp, ow * bpp); |
1289 | |
1279 | |
1290 | sv_setsv (data_, result_); |
1280 | sv_setsv (data_, result_); |
1291 | } |
|
|
1292 | |
|
|
1293 | sv_setiv (w_, nw); |
|
|
1294 | sv_setiv (h_, nh); |
|
|
1295 | } |
|
|
1296 | } |
1281 | } |
1297 | } |
1282 | } |
1298 | |
1283 | |
1299 | void |
1284 | void |
1300 | draw_quad (SV *self, float x, float y, float w = 0., float h = 0.) |
1285 | draw_quad (SV *self, float x, float y, float w = 0., float h = 0.) |