Browse Source

Revert "Fix some 3D texture issues"

Juan Linietsky 7 years ago
parent
commit
bca706b361

+ 4 - 15
drivers/gles2/rasterizer_storage_gles2.cpp

@@ -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;
@@ -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!");
@@ -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;
@@ -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();
@@ -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));
 
@@ -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);
 	}
@@ -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);
@@ -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;
@@ -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;

+ 1 - 3
drivers/gles2/rasterizer_storage_gles2.h

@@ -232,7 +232,7 @@ public:
 		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;
 
@@ -275,10 +275,8 @@ public:
 			flags = 0;
 			width = 0;
 			height = 0;
-			depth = 0;
 			alloc_width = 0;
 			alloc_height = 0;
-			alloc_depth = 0;
 			format = Image::FORMAT_L8;
 
 			target = 0;

+ 5 - 18
drivers/gles3/rasterizer_storage_gles3.cpp

@@ -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);
@@ -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();
@@ -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));
 
@@ -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);
 	}
@@ -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;
@@ -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;
@@ -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);
 	}
@@ -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;

+ 1 - 7
drivers/gles3/rasterizer_storage_gles3.h

@@ -294,13 +294,7 @@ public:
 			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;

+ 1 - 1
scene/resources/texture.cpp

@@ -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) {