Skip to content

Commit

Permalink
Revert "Fix some 3D texture issues"
Browse files Browse the repository at this point in the history
  • Loading branch information
reduz committed Aug 27, 2018
1 parent 87725e8 commit bca706b
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 44 deletions.
19 changes: 4 additions & 15 deletions drivers/gles2/rasterizer_storage_gles2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,6 @@ void RasterizerStorageGLES2::texture_allocate(RID p_texture, int p_width, int p_
ERR_FAIL_COND(!texture);
texture->width = p_width;
texture->height = p_height;
texture->depth = 0;
texture->format = p_format;
texture->flags = p_flags;
texture->stored_cube_sides = 0;
Expand All @@ -385,7 +384,6 @@ void RasterizerStorageGLES2::texture_allocate(RID p_texture, int p_width, int p_
} break;
case VS::TEXTURE_TYPE_3D: {
texture->images.resize(p_depth_3d);
texture->depth = p_depth_3d;
} break;
default: {
ERR_PRINT("Unknown texture type!");
Expand All @@ -398,7 +396,6 @@ void RasterizerStorageGLES2::texture_allocate(RID p_texture, int p_width, int p_

texture->alloc_width = texture->width;
texture->alloc_height = texture->height;
texture->alloc_depth = texture->depth;

texture->gl_format_cache = format;
texture->gl_type_cache = type;
Expand Down Expand Up @@ -594,9 +591,7 @@ Ref<Image> RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer)

PoolVector<uint8_t> data;

int alloc_depth = MAX(texture->alloc_depth, 1);

int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, texture->mipmaps > 1 ? -1 : 0) * alloc_depth;
int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, texture->mipmaps > 1 ? -1 : 0);

data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers
PoolVector<uint8_t>::Write wb = data.write();
Expand Down Expand Up @@ -625,7 +620,7 @@ Ref<Image> RasterizerStorageGLES2::texture_get_data(RID p_texture, int p_layer)

wb = PoolVector<uint8_t>::Write();

data.resize(data_size / alloc_depth);
data.resize(data_size);

Image *img = memnew(Image(texture->alloc_width, texture->alloc_height, texture->mipmaps > 1 ? true : false, real_format, data));

Expand Down Expand Up @@ -785,7 +780,7 @@ void RasterizerStorageGLES2::texture_debug_usage(List<VS::TextureInfo> *r_info)
tinfo.format = t->format;
tinfo.width = t->alloc_width;
tinfo.height = t->alloc_height;
tinfo.depth = t->alloc_depth;
tinfo.depth = 0;
tinfo.bytes = t->total_data_size;
r_info->push_back(tinfo);
}
Expand Down Expand Up @@ -3667,8 +3662,6 @@ void RasterizerStorageGLES2::_render_target_allocate(RenderTarget *rt) {
texture->alloc_width = rt->width;
texture->height = rt->height;
texture->alloc_height = rt->height;
texture->depth = 0;
texture->alloc_depth = 0;
texture->active = true;

texture_set_flags(rt->texture, texture->flags);
Expand Down Expand Up @@ -3716,8 +3709,6 @@ void RasterizerStorageGLES2::_render_target_clear(RenderTarget *rt) {
Texture *tex = texture_owner.get(rt->texture);
tex->alloc_height = 0;
tex->alloc_width = 0;
tex->alloc_depth = 0;
tex->depth = 0;
tex->width = 0;
tex->height = 0;
tex->active = false;
Expand All @@ -3741,10 +3732,8 @@ RID RasterizerStorageGLES2::render_target_create() {
t->flags = 0;
t->width = 0;
t->height = 0;
t->depth = 0;
t->alloc_width = 0;
t->alloc_height = 0;
t->alloc_depth = 0;
t->alloc_width = 0;
t->format = Image::FORMAT_R8;
t->target = GL_TEXTURE_2D;
t->gl_format_cache = 0;
Expand Down
4 changes: 1 addition & 3 deletions drivers/gles2/rasterizer_storage_gles2.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,7 @@ class RasterizerStorageGLES2 : public RasterizerStorage {
String path;
uint32_t flags;
int width, height, depth;
int alloc_width, alloc_height, alloc_depth;
int alloc_width, alloc_height;
Image::Format format;
VS::TextureType type;

Expand Down Expand Up @@ -275,10 +275,8 @@ class RasterizerStorageGLES2 : public RasterizerStorage {
flags = 0;
width = 0;
height = 0;
depth = 0;
alloc_width = 0;
alloc_height = 0;
alloc_depth = 0;
format = Image::FORMAT_L8;

target = 0;
Expand Down
23 changes: 5 additions & 18 deletions drivers/gles3/rasterizer_storage_gles3.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -667,7 +667,7 @@ void RasterizerStorageGLES3::texture_allocate(RID p_texture, int p_width, int p_
int mipmaps = 0;

while (width != 1 && height != 1) {
glTexImage3D(texture->target, mipmaps, internal_format, width, height, depth, 0, format, type, NULL);
glTexImage3D(texture->target, 0, internal_format, width, height, depth, 0, format, type, NULL);

width = MAX(1, width / 2);
height = MAX(1, height / 2);
Expand Down Expand Up @@ -1029,11 +1029,7 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer)

PoolVector<uint8_t> data;

int alloc_depth = MAX(texture->alloc_depth, 1);

ERR_FAIL_COND_V(p_layer < 0 || p_layer >= alloc_depth, Ref<Image>());

int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, texture->mipmaps > 1 ? -1 : 0) * alloc_depth;
int data_size = Image::get_image_data_size(texture->alloc_width, texture->alloc_height, real_format, texture->mipmaps > 1 ? -1 : 0);

data.resize(data_size * 2); //add some memory at the end, just in case for buggy drivers
PoolVector<uint8_t>::Write wb = data.write();
Expand Down Expand Up @@ -1089,13 +1085,9 @@ Ref<Image> RasterizerStorageGLES3::texture_get_data(RID p_texture, int p_layer)
img_format = real_format;
}

int slice_size = data_size / alloc_depth;

if (p_layer) {
memcpy(&wb[0], &wb[slice_size * p_layer], slice_size);
}
wb = PoolVector<uint8_t>::Write();

data.resize(slice_size);
data.resize(data_size);

Image *img = memnew(Image(texture->alloc_width, texture->alloc_height, texture->mipmaps > 1 ? true : false, img_format, data));

Expand Down Expand Up @@ -1283,7 +1275,7 @@ void RasterizerStorageGLES3::texture_debug_usage(List<VS::TextureInfo> *r_info)
tinfo.format = t->format;
tinfo.width = t->alloc_width;
tinfo.height = t->alloc_height;
tinfo.depth = t->alloc_depth;
tinfo.depth = 0;
tinfo.bytes = t->total_data_size;
r_info->push_back(tinfo);
}
Expand Down Expand Up @@ -1450,7 +1442,6 @@ RID RasterizerStorageGLES3::texture_create_radiance_cubemap(RID p_source, int p_
ctex->height = p_resolution;
ctex->alloc_width = p_resolution;
ctex->alloc_height = p_resolution;
ctex->alloc_depth = 0;
ctex->format = use_float ? Image::FORMAT_RGBAH : Image::FORMAT_RGBA8;
ctex->target = GL_TEXTURE_CUBE_MAP;
ctex->gl_format_cache = format;
Expand Down Expand Up @@ -6473,7 +6464,6 @@ void RasterizerStorageGLES3::_render_target_clear(RenderTarget *rt) {
Texture *tex = texture_owner.get(rt->texture);
tex->alloc_height = 0;
tex->alloc_width = 0;
tex->alloc_depth = 0;
tex->width = 0;
tex->height = 0;
tex->active = false;
Expand Down Expand Up @@ -6587,7 +6577,6 @@ void RasterizerStorageGLES3::_render_target_allocate(RenderTarget *rt) {
tex->height = rt->height;
tex->alloc_height = rt->height;
tex->active = true;
tex->alloc_depth = 0;

texture_set_flags(rt->texture, tex->flags);
}
Expand Down Expand Up @@ -6876,10 +6865,8 @@ RID RasterizerStorageGLES3::render_target_create() {
t->flags = 0;
t->width = 0;
t->height = 0;
t->depth = 0;
t->alloc_height = 0;
t->alloc_width = 0;
t->alloc_depth = 0;
t->format = Image::FORMAT_R8;
t->target = GL_TEXTURE_2D;
t->gl_format_cache = 0;
Expand Down
8 changes: 1 addition & 7 deletions drivers/gles3/rasterizer_storage_gles3.h
Original file line number Diff line number Diff line change
Expand Up @@ -294,13 +294,7 @@ class RasterizerStorageGLES3 : public RasterizerStorage {
stored_cube_sides = 0;
ignore_mipmaps = false;
render_target = NULL;
flags = 0;
width = 0;
height = 0;
depth = 0;
alloc_width = 0;
alloc_height = 0;
alloc_depth = 0;
flags = width = height = 0;
tex_id = 0;
data_size = 0;
format = Image::FORMAT_L8;
Expand Down
2 changes: 1 addition & 1 deletion scene/resources/texture.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2051,8 +2051,8 @@ void TextureLayered::create(uint32_t p_width, uint32_t p_height, uint32_t p_dept
width = p_width;
height = p_height;
depth = p_depth;

flags = p_flags;
format = p_format;
}

void TextureLayered::set_layer_data(const Ref<Image> &p_image, int p_layer) {
Expand Down

0 comments on commit bca706b

Please sign in to comment.