diff --git a/sfw/render_core/image.cpp b/sfw/render_core/image.cpp index 9de2303..a0296f7 100644 --- a/sfw/render_core/image.cpp +++ b/sfw/render_core/image.cpp @@ -30,9 +30,9 @@ #include "image.h" -#include "core/error_macros.h" -#include "core/math/math.h" -#include "core/math/vector3.h" +#include "error_macros.h" +#include "math.h" +#include "vector3.h" #include "memory.h" #include #include @@ -435,8 +435,8 @@ void Image::convert(Format p_new_format) { Image new_img(width, height, false, p_new_format); write_lock = true; - const uint8_t *rptr = data.data(); - uint8_t *wptr = new_img.data.dataw(); + const uint8_t *rptr = data.ptr(); + uint8_t *wptr = new_img.data.ptrw(); int conversion_type = format | p_new_format << 8; @@ -958,8 +958,8 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { write_lock = true; - const unsigned char *r_ptr = data.data(); - unsigned char *w_ptr = dst.data.dataw(); + const unsigned char *r_ptr = data.ptr(); + unsigned char *w_ptr = dst.data.ptrw(); switch (p_interpolation) { case INTERPOLATE_NEAREST: { @@ -1045,7 +1045,7 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { _get_mipmap_offset_and_size(mip2, offs, src_width, src_height); src_ptr = r_ptr + offs; // Switch to write to the second destination image - w_ptr = dst2.data.dataw(); + w_ptr = dst2.data.ptrw(); } } @@ -1099,7 +1099,7 @@ void Image::resize(int p_width, int p_height, Interpolation p_interpolation) { if (interpolate_mipmaps) { // Switch to read again from the first scaled mipmap to overlay it over the second - _overlay(dst.data.data(), w_ptr, mip1_weight, p_width, p_height, get_format_pixel_size(format)); + _overlay(dst.data.ptr(), w_ptr, mip1_weight, p_width, p_height, get_format_pixel_size(format)); } } break; @@ -1249,10 +1249,10 @@ void Image::crop_from_point(int p_x, int p_y, int p_width, int p_height) { pdata[i] = 0; } } else { - _get_pixelb(x, y, pixel_size, data.data(), pdata); + _get_pixelb(x, y, pixel_size, data.ptr(), pdata); } - dst._put_pixelb(x - p_x, y - p_y, pixel_size, dst.data.dataw(), pdata); + dst._put_pixelb(x - p_x, y - p_y, pixel_size, dst.data.ptrw(), pdata); } } @@ -1286,11 +1286,11 @@ void Image::flip_y() { for (int y = 0; y < height / 2; y++) { for (int x = 0; x < width; x++) { - _get_pixelb(x, y, pixel_size, data.data(), up); - _get_pixelb(x, height - y - 1, pixel_size, data.data(), down); + _get_pixelb(x, y, pixel_size, data.ptr(), up); + _get_pixelb(x, height - y - 1, pixel_size, data.ptr(), down); - _put_pixelb(x, height - y - 1, pixel_size, data.dataw(), up); - _put_pixelb(x, y, pixel_size, data.dataw(), down); + _put_pixelb(x, height - y - 1, pixel_size, data.ptrw(), up); + _put_pixelb(x, y, pixel_size, data.ptrw(), down); } } @@ -1319,11 +1319,11 @@ void Image::flip_x() { for (int y = 0; y < height; y++) { for (int x = 0; x < width / 2; x++) { - _get_pixelb(x, y, pixel_size, data.data(), up); - _get_pixelb(width - x - 1, y, pixel_size, data.data(), down); + _get_pixelb(x, y, pixel_size, data.ptr(), up); + _get_pixelb(width - x - 1, y, pixel_size, data.ptr(), down); - _put_pixelb(width - x - 1, y, pixel_size, data.dataw(), up); - _put_pixelb(x, y, pixel_size, data.dataw(), down); + _put_pixelb(width - x - 1, y, pixel_size, data.ptrw(), up); + _put_pixelb(x, y, pixel_size, data.ptrw(), down); } } @@ -1436,7 +1436,7 @@ void Image::shrink_x2() { { write_lock = true; - memcpy(new_img.dataw(), &data.data()[ofs], new_size); + memcpy(new_img.ptrw(), &data.ptr()[ofs], new_size); write_lock = false; } @@ -1459,49 +1459,49 @@ void Image::shrink_x2() { switch (format) { case FORMAT_L8: case FORMAT_R8: - _generate_po2_mipmap(data.data(), new_img.dataw(), width, height); + _generate_po2_mipmap(data.ptr(), new_img.ptrw(), width, height); break; case FORMAT_LA8: - _generate_po2_mipmap(data.data(), new_img.dataw(), width, height); + _generate_po2_mipmap(data.ptr(), new_img.ptrw(), width, height); break; case FORMAT_RG8: - _generate_po2_mipmap(data.data(), new_img.dataw(), width, height); + _generate_po2_mipmap(data.ptr(), new_img.ptrw(), width, height); break; case FORMAT_RGB8: - _generate_po2_mipmap(data.data(), new_img.dataw(), width, height); + _generate_po2_mipmap(data.ptr(), new_img.ptrw(), width, height); break; case FORMAT_RGBA8: - _generate_po2_mipmap(data.data(), new_img.dataw(), width, height); + _generate_po2_mipmap(data.ptr(), new_img.ptrw(), width, height); break; case FORMAT_RF: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGF: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGBF: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGBAF: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RH: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGH: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGBH: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGBAH: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; case FORMAT_RGBE9995: - _generate_po2_mipmap(reinterpret_cast(data.data()), reinterpret_cast(new_img.dataw()), width, height); + _generate_po2_mipmap(reinterpret_cast(data.ptr()), reinterpret_cast(new_img.ptrw()), width, height); break; default: { } @@ -1555,7 +1555,7 @@ int Image::generate_mipmaps(bool p_renormalize) { data.resize(size); - uint8_t *wp = data.dataw(); + uint8_t *wp = data.ptrw(); int prev_ofs = 0; int prev_h = height; @@ -1680,10 +1680,10 @@ Vector Image::get_data() const { } const uint8_t *Image::datar() const { - return data.data(); + return data.ptr(); } uint8_t *Image::dataw() { - return data.dataw(); + return data.ptrw(); } int Image::get_data_size() const { return data.size(); @@ -1702,7 +1702,7 @@ void Image::create(int p_width, int p_height, bool p_use_mipmaps, Format p_forma data.resize(size); { write_lock = true; - memset(data.dataw(), 0, size); + memset(data.ptrw(), 0, size); write_lock = false; } @@ -1761,10 +1761,10 @@ void Image::create(const char **p_xpm) { String line_str = line_ptr; line_str.replace("\t", " "); - size_width = line_str.get_slice(' ', 0).to_int(); - size_height = line_str.get_slice(' ', 1).to_int(); - colormap_size = line_str.get_slice(' ', 2).to_int(); - pixelchars = line_str.get_slice(' ', 3).to_int(); + size_width = line_str.get_slicec(' ', 0).to_int(); + size_height = line_str.get_slicec(' ', 1).to_int(); + colormap_size = line_str.get_slicec(' ', 2).to_int(); + pixelchars = line_str.get_slicec(' ', 3).to_int(); ERR_FAIL_COND(colormap_size > 32766); ERR_FAIL_COND(pixelchars > 5); ERR_FAIL_COND(size_width > 32767); @@ -1847,7 +1847,7 @@ void Image::create(const char **p_xpm) { if (line == colormap_size) { status = READING_PIXELS; create(size_width, size_height, false, has_alpha ? FORMAT_RGBA8 : FORMAT_RGB8); - w_ptr = data.dataw(); + w_ptr = data.ptrw(); pixel_size = has_alpha ? 4 : 3; } } break; @@ -1917,7 +1917,7 @@ bool Image::is_invisible() const { int w, h; _get_mipmap_offset_and_size(1, len, w, h); - const unsigned char *data_ptr = data.data(); + const unsigned char *data_ptr = data.ptr(); bool detected = false; @@ -1958,7 +1958,7 @@ Image::AlphaMode Image::detect_alpha() const { int w, h; _get_mipmap_offset_and_size(1, len, w, h); - const unsigned char *data_ptr = data.data(); + const unsigned char *data_ptr = data.ptr(); bool bit = false; bool detected = false; @@ -2089,7 +2089,7 @@ Rect2 Image::get_used_rect() const { } Ref Image::get_rect(const Rect2 &p_area) const { - Ref img = new Image(p_area.x, p_area.y, mipmaps, format); + Ref img = new Image(p_area.position.x, p_area.position.y, mipmaps, format); img->blit_rect(Ref((Image *)this), p_area, Vector2(0, 0)); return img; } @@ -2106,33 +2106,33 @@ void Image::blit_rect(const Ref &p_src, const Rect2 &p_src_rect, const Ve Rect2i clipped_src_rect = Rect2i(0, 0, p_src->width, p_src->height).clip(p_src_rect); if (p_dest.x < 0) { - clipped_src_rect.x = ABS(p_dest.x); + clipped_src_rect.position.x = ABS(p_dest.x); } if (p_dest.y < 0) { - clipped_src_rect.y = ABS(p_dest.y); + clipped_src_rect.position.y = ABS(p_dest.y); } - if (clipped_src_rect.w <= 0 || clipped_src_rect.h <= 0) { + if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) { return; } - Vector2 src_underscan = Vector2(MIN(0, p_src_rect.x), MIN(0, p_src_rect.y)); - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size())); + Vector2 src_underscan = Vector2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); write_lock = true; - uint8_t *dst_data_ptr = data.dataw(); + uint8_t *dst_data_ptr = data.ptrw(); - const uint8_t *src_data_ptr = p_src->data.data(); + const uint8_t *src_data_ptr = p_src->data.ptr(); int pixel_size = get_format_pixel_size(format); - for (int i = 0; i < dest_rect.h; i++) { - for (int j = 0; j < dest_rect.w; j++) { - int src_x = clipped_src_rect.x + j; - int src_y = clipped_src_rect.y + i; + for (int i = 0; i < dest_rect.size.y; i++) { + for (int j = 0; j < dest_rect.size.x; j++) { + int src_x = clipped_src_rect.position.x + j; + int src_y = clipped_src_rect.position.y + i; - int dst_x = dest_rect.x + j; - int dst_y = dest_rect.y + i; + int dst_x = dest_rect.position.x + j; + int dst_y = dest_rect.position.y + i; const uint8_t *src = &src_data_ptr[(src_y * p_src->width + src_x) * pixel_size]; uint8_t *dst = &dst_data_ptr[(dst_y * width + dst_x) * pixel_size]; @@ -2162,38 +2162,38 @@ void Image::blit_rect_mask(const Ref &p_src, const Ref &p_mask, co Rect2i clipped_src_rect = Rect2i(0, 0, p_src->width, p_src->height).clip(p_src_rect); if (p_dest.x < 0) { - clipped_src_rect.x = ABS(p_dest.x); + clipped_src_rect.position.x = ABS(p_dest.x); } if (p_dest.y < 0) { - clipped_src_rect.y = ABS(p_dest.y); + clipped_src_rect.position.y = ABS(p_dest.y); } - if (clipped_src_rect.w <= 0 || clipped_src_rect.h <= 0) { + if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) { return; } - Vector2 src_underscan = Vector2(MIN(0, p_src_rect.x), MIN(0, p_src_rect.y)); - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size())); + Vector2 src_underscan = Vector2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); write_lock = true; - uint8_t *dst_data_ptr = data.dataw(); + uint8_t *dst_data_ptr = data.ptrw(); - const uint8_t *src_data_ptr = p_src->data.data(); + const uint8_t *src_data_ptr = p_src->data.ptr(); int pixel_size = get_format_pixel_size(format); Ref msk = p_mask; msk->lock(); - for (int i = 0; i < dest_rect.h; i++) { - for (int j = 0; j < dest_rect.w; j++) { - int src_x = clipped_src_rect.x + j; - int src_y = clipped_src_rect.y + i; + for (int i = 0; i < dest_rect.size.y; i++) { + for (int j = 0; j < dest_rect.size.x; j++) { + int src_x = clipped_src_rect.position.x + j; + int src_y = clipped_src_rect.position.y + i; if (msk->get_pixel(src_x, src_y).a != 0) { - int dst_x = dest_rect.x + j; - int dst_y = dest_rect.y + i; + int dst_x = dest_rect.position.x + j; + int dst_y = dest_rect.position.y + i; const uint8_t *src = &src_data_ptr[(src_y * p_src->width + src_x) * pixel_size]; uint8_t *dst = &dst_data_ptr[(dst_y * width + dst_x) * pixel_size]; @@ -2221,30 +2221,30 @@ void Image::blend_rect(const Ref &p_src, const Rect2 &p_src_rect, const V Rect2i clipped_src_rect = Rect2i(0, 0, p_src->width, p_src->height).clip(p_src_rect); if (p_dest.x < 0) { - clipped_src_rect.x = ABS(p_dest.x); + clipped_src_rect.position.x = ABS(p_dest.x); } if (p_dest.y < 0) { - clipped_src_rect.y = ABS(p_dest.y); + clipped_src_rect.position.y = ABS(p_dest.y); } - if (clipped_src_rect.w <= 0 || clipped_src_rect.h <= 0) { + if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) { return; } - Vector2 src_underscan = Vector2(MIN(0, p_src_rect.x), MIN(0, p_src_rect.y)); - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size())); + Vector2 src_underscan = Vector2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); lock(); Ref img = p_src; img->lock(); - for (int i = 0; i < dest_rect.h; i++) { - for (int j = 0; j < dest_rect.w; j++) { - int src_x = clipped_src_rect.x + j; - int src_y = clipped_src_rect.y + i; + for (int i = 0; i < dest_rect.size.y; i++) { + for (int j = 0; j < dest_rect.size.x; j++) { + int src_x = clipped_src_rect.position.x + j; + int src_y = clipped_src_rect.position.y + i; - int dst_x = dest_rect.x + j; - int dst_y = dest_rect.y + i; + int dst_x = dest_rect.position.x + j; + int dst_y = dest_rect.position.y + i; Color sc = img->get_pixel(src_x, src_y); if (sc.a != 0) { @@ -2275,18 +2275,18 @@ void Image::blend_rect_mask(const Ref &p_src, const Ref &p_mask, c Rect2i clipped_src_rect = Rect2i(0, 0, p_src->width, p_src->height).clip(p_src_rect); if (p_dest.x < 0) { - clipped_src_rect.x = ABS(p_dest.x); + clipped_src_rect.position.x = ABS(p_dest.x); } if (p_dest.y < 0) { - clipped_src_rect.y = ABS(p_dest.y); + clipped_src_rect.position.y = ABS(p_dest.y); } - if (clipped_src_rect.w <= 0 || clipped_src_rect.h <= 0) { + if (clipped_src_rect.size.x <= 0 || clipped_src_rect.size.y <= 0) { return; } - Vector2 src_underscan = Vector2(MIN(0, p_src_rect.x), MIN(0, p_src_rect.y)); - Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size())); + Vector2 src_underscan = Vector2(MIN(0, p_src_rect.position.x), MIN(0, p_src_rect.position.y)); + Rect2i dest_rect = Rect2i(0, 0, width, height).clip(Rect2i(p_dest - src_underscan, clipped_src_rect.size)); lock(); Ref img = p_src; @@ -2294,17 +2294,17 @@ void Image::blend_rect_mask(const Ref &p_src, const Ref &p_mask, c img->lock(); msk->lock(); - for (int i = 0; i < dest_rect.h; i++) { - for (int j = 0; j < dest_rect.w; j++) { - int src_x = clipped_src_rect.x + j; - int src_y = clipped_src_rect.y + i; + for (int i = 0; i < dest_rect.size.y; i++) { + for (int j = 0; j < dest_rect.size.x; j++) { + int src_x = clipped_src_rect.position.x + j; + int src_y = clipped_src_rect.position.y + i; // If the mask's pixel is transparent then we skip it // Color c = msk->get_pixel(src_x, src_y); // if (c.a == 0) continue; if (msk->get_pixel(src_x, src_y).a != 0) { - int dst_x = dest_rect.x + j; - int dst_y = dest_rect.y + i; + int dst_x = dest_rect.position.x + j; + int dst_y = dest_rect.position.y + i; Color sc = img->get_pixel(src_x, src_y); if (sc.a != 0) { @@ -2339,7 +2339,7 @@ void Image::fill(const Color &p_color) { lock(); - uint8_t *dst_data_ptr = data.dataw(); + uint8_t *dst_data_ptr = data.ptrw(); int pixel_size = get_format_pixel_size(format); @@ -2361,21 +2361,21 @@ void Image::fill_rect(const Rect2 &p_rect, const Color &p_color) { lock(); - uint8_t *dst_data_ptr = data.dataw(); + uint8_t *dst_data_ptr = data.ptrw(); int pixel_size = get_format_pixel_size(format); // Put first pixel with the format-aware API. - uint8_t *rect_first_pixel_ptr = &dst_data_ptr[(r.y * width + r.x) * pixel_size]; - set_pixelv(r.position(), p_color); + uint8_t *rect_first_pixel_ptr = &dst_data_ptr[(r.position.y * width + r.position.x) * pixel_size]; + set_pixelv(r.position, p_color); - if (r.x == width) { + if (r.position.x == width) { // No need to fill rows separately. - _repeat_pixel_over_subsequent_memory(rect_first_pixel_ptr, pixel_size, width * r.h); + _repeat_pixel_over_subsequent_memory(rect_first_pixel_ptr, pixel_size, width * r.size.y); } else { - _repeat_pixel_over_subsequent_memory(rect_first_pixel_ptr, pixel_size, r.w); - for (int y = 1; y < r.h; y++) { - memcpy(rect_first_pixel_ptr + y * width * pixel_size, rect_first_pixel_ptr, r.w * pixel_size); + _repeat_pixel_over_subsequent_memory(rect_first_pixel_ptr, pixel_size, r.size.x); + for (int y = 1; y < r.size.y; y++) { + memcpy(rect_first_pixel_ptr + y * width * pixel_size, rect_first_pixel_ptr, r.size.x * pixel_size); } } @@ -2396,7 +2396,7 @@ Color Image::get_pixelv(const Vector2 &p_src) const { } Color Image::get_pixel(int p_x, int p_y) const { - const uint8_t *ptr = data.data(); + const uint8_t *ptr = data.ptr(); #ifdef DEBUG_ENABLED ERR_FAIL_COND_V_MSG(!ptr, Color(), "Image must be locked with 'lock()' before using get_pixel()."); @@ -2513,7 +2513,7 @@ void Image::set_pixelv(const Vector2 &p_dst, const Color &p_color) { } void Image::set_pixel(int p_x, int p_y, const Color &p_color) { - uint8_t *ptr = data.dataw(); + uint8_t *ptr = data.ptrw(); #ifdef DEBUG_ENABLED ERR_FAIL_COND_MSG(!ptr, "Image must be locked with 'lock()' before using set_pixel()."); @@ -2701,7 +2701,7 @@ void Image::normalmap_to_xy() { write_lock = true; int len = data.size() / 4; - unsigned char *data_ptr = data.dataw(); + unsigned char *data_ptr = data.ptrw(); for (int i = 0; i < len; i++) { data_ptr[(i << 2) + 3] = data_ptr[(i << 2) + 0]; // x to w @@ -2757,8 +2757,8 @@ void Image::bumpmap_to_normalmap(float bump_scale) { { write_lock = true; - unsigned char *write_ptr = result_image.dataw(); - float *read_ptr = (float *)data.dataw(); + unsigned char *write_ptr = result_image.ptrw(); + float *read_ptr = (float *)data.ptrw(); for (int ty = 0; ty < height; ty++) { int py = ty + 1; @@ -2806,7 +2806,7 @@ void Image::srgb_to_linear() { write_lock = true; int len = data.size() / 4; - unsigned char *data_ptr = data.dataw(); + unsigned char *data_ptr = data.ptrw(); for (int i = 0; i < len; i++) { data_ptr[(i << 2) + 0] = srgb2lin[data_ptr[(i << 2) + 0]]; @@ -2819,7 +2819,7 @@ void Image::srgb_to_linear() { write_lock = true; int len = data.size() / 3; - unsigned char *data_ptr = data.dataw(); + unsigned char *data_ptr = data.ptrw(); for (int i = 0; i < len; i++) { data_ptr[(i * 3) + 0] = srgb2lin[data_ptr[(i * 3) + 0]]; @@ -2842,7 +2842,7 @@ void Image::premultiply_alpha() { write_lock = true; - unsigned char *data_ptr = data.dataw(); + unsigned char *data_ptr = data.ptrw(); for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { @@ -2872,9 +2872,9 @@ void Image::fix_alpha_edges() { write_lock = true; Vector dcopy = data; - const uint8_t *srcptr = dcopy.data(); + const uint8_t *srcptr = dcopy.ptr(); - unsigned char *data_ptr = data.dataw(); + unsigned char *data_ptr = data.ptrw(); const int max_radius = 4; const int alpha_threshold = 20; @@ -2984,7 +2984,7 @@ void Image::renormalize_rgbe9995(uint32_t *p_rgb) { // Never used } -Ref Image::duplicate(bool p_subresources) const { +Ref Image::duplicate() const { Ref copy; copy.instance(); copy->_copy_internals_from(*this); diff --git a/sfw/render_core/image.h b/sfw/render_core/image.h index 1958fc3..dd90279 100644 --- a/sfw/render_core/image.h +++ b/sfw/render_core/image.h @@ -1,3 +1,6 @@ +#ifndef IMAGE_H +#define IMAGE_H + /*************************************************************************/ /* image.h */ /*************************************************************************/ @@ -28,18 +31,15 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -#ifndef IMAGE_H -#define IMAGE_H +#include "color.h" +#include "rect2.h" +#include "rect2i.h" +#include "reference.h" +#include "vector.h" +#include "vector2i.h" -#include "core/math/color.h" -#include "core/math/rect2.h" -#include "core/containers/vector.h" -#include "core/resource.h" -#include "core/math/rect2i.h" -#include "core/math/vector2i.h" - -class Image : public Resource { - RCPP_OBJECT(Image, Resource); +class Image : public Reference { + SFW_OBJECT(Image, Reference); public: enum { @@ -210,8 +210,8 @@ public: bool empty() const; Vector get_data() const; - const uint8_t* datar() const; - uint8_t* dataw(); + const uint8_t *datar() const; + uint8_t *dataw(); int get_data_size() const; Image(); @@ -271,7 +271,7 @@ public: Image(const char **p_xpm); - virtual Ref duplicate(bool p_subresources = false) const; + Ref duplicate() const; void lock(); void unlock();