diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2017-12-27 01:11:45 +0100 |
---|---|---|
committer | K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com> | 2018-02-15 07:34:11 -0800 |
commit | 72ef766dfa5fcf35283079ccb98d74f4dbb2d934 (patch) | |
tree | dc4366247a4cf21961299669f1302c0dcb852a04 | |
parent | 8699f643c9b02bc804024f0b67dea80467bef91d (diff) |
Add dummy Texture handling
-rw-r--r-- | drivers/dummy/rasterizer_dummy.h | 84 |
1 files changed, 74 insertions, 10 deletions
diff --git a/drivers/dummy/rasterizer_dummy.h b/drivers/dummy/rasterizer_dummy.h index dc1ed4d280..e2f2562156 100644 --- a/drivers/dummy/rasterizer_dummy.h +++ b/drivers/dummy/rasterizer_dummy.h @@ -117,21 +117,77 @@ public: class RasterizerStorageDummy : public RasterizerStorage { public: /* TEXTURE API */ + struct DummyTexture : public RID_Data { + int width; + int height; + uint32_t flags; + Image::Format format; + Ref<Image> image; + String path; + }; + + mutable RID_Owner<DummyTexture> texture_owner; + + RID texture_create() { + + DummyTexture *texture = memnew(DummyTexture); + ERR_FAIL_COND_V(!texture, RID()); + return texture_owner.make_rid(texture); + } + void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT) { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND(!t); + t->width = p_width; + t->height = p_height; + t->flags = p_flags; + t->format = p_format; + t->image = Ref<Image>(memnew(Image)); + t->image->create(p_width, p_height, false, p_format); + } + void texture_set_data(RID p_texture, const Ref<Image> &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND(!t); + t->width = p_image->get_width(); + t->height = p_image->get_height(); + t->format = p_image->get_format(); + t->image->create(t->width, t->height, false, t->format, p_image->get_data()); + } - RID texture_create() { return RID(); } - void texture_allocate(RID p_texture, int p_width, int p_height, Image::Format p_format, uint32_t p_flags = VS::TEXTURE_FLAGS_DEFAULT) {} - void texture_set_data(RID p_texture, const Ref<Image> &p_image, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) {} - Ref<Image> texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const { return NULL; } - void texture_set_flags(RID p_texture, uint32_t p_flags) {} - uint32_t texture_get_flags(RID p_texture) const { return 0; } - Image::Format texture_get_format(RID p_texture) const { return Image::FORMAT_RGB8; } + Ref<Image> texture_get_data(RID p_texture, VS::CubeMapSide p_cube_side = VS::CUBEMAP_LEFT) const { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND_V(!t, Ref<Image>()); + return t->image; + } + void texture_set_flags(RID p_texture, uint32_t p_flags) { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND(!t); + t->flags = p_flags; + } + uint32_t texture_get_flags(RID p_texture) const { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND_V(!t, 0); + return t->flags; + } + Image::Format texture_get_format(RID p_texture) const { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND_V(!t, Image::FORMAT_RGB8); + return t->format; + } uint32_t texture_get_texid(RID p_texture) const { return 0; } uint32_t texture_get_width(RID p_texture) const { return 0; } uint32_t texture_get_height(RID p_texture) const { return 0; } void texture_set_size_override(RID p_texture, int p_width, int p_height) {} - void texture_set_path(RID p_texture, const String &p_path) {} - String texture_get_path(RID p_texture) const { return ""; } + void texture_set_path(RID p_texture, const String &p_path) { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND(!t); + t->path = p_path; + } + String texture_get_path(RID p_texture) const { + DummyTexture *t = texture_owner.getornull(p_texture); + ERR_FAIL_COND_V(!t, String()); + return t->path; + } void texture_set_shrink_all_x2_on_set_data(bool p_enable) {} @@ -460,7 +516,15 @@ public: void canvas_light_occluder_set_polylines(RID p_occluder, const PoolVector<Vector2> &p_lines) {} VS::InstanceType get_base_type(RID p_rid) const {} - bool free(RID p_rid) {} + bool free(RID p_rid) { + + if (texture_owner.owns(p_rid)) { + // delete the texture + DummyTexture *texture = texture_owner.get(p_rid); + texture_owner.free(p_rid); + memdelete(texture); + } + } bool has_os_feature(const String &p_feature) const {} |