소스 검색

Fix `GradientTexture2D` not working with `Light2D`

`Light2D` expects valid texture resource to be available initially for it to be properly bound.

Changed texture allocation implementation to be consistent/same with `GradientTexture` (1D).
Andrii Doroshenko (Xrayez) 3 년 전
부모
커밋
8c11c28a8a
1개의 변경된 파일4개의 추가작업 그리고 10개의 파일을 삭제
  1. 4 10
      scene/resources/texture.cpp

+ 4 - 10
scene/resources/texture.cpp

@@ -1808,13 +1808,12 @@ Ref<Image> GradientTexture::get_data() const {
 }
 
 GradientTexture2D::GradientTexture2D() {
+	texture = RID_PRIME(VS::get_singleton()->texture_create());
 	_queue_update();
 }
 
 GradientTexture2D::~GradientTexture2D() {
-	if (texture.is_valid()) {
-		VS::get_singleton()->free(texture);
-	}
+	VS::get_singleton()->free(texture);
 }
 
 void GradientTexture2D::set_gradient(Ref<Gradient> p_gradient) {
@@ -1889,13 +1888,8 @@ void GradientTexture2D::_update() {
 			image->create(width, height, false, Image::FORMAT_RGBA8, data);
 		}
 	}
-
-	if (texture.is_valid()) {
-		VS::get_singleton()->free(texture);
-		texture = VS::get_singleton()->texture_create_from_image(image);
-	} else {
-		texture = VS::get_singleton()->texture_create_from_image(image);
-	}
+	VS::get_singleton()->texture_allocate(texture, width, height, 0, image->get_format(), VS::TEXTURE_TYPE_2D, VS::TEXTURE_FLAG_FILTER);
+	VS::get_singleton()->texture_set_data(texture, image);
 
 	emit_changed();
 }