Browse Source

Fix GPUParticles3D generate AABB

CaptainProton42 3 years ago
parent
commit
dd70daafba

+ 2 - 4
servers/rendering/renderer_rd/renderer_storage_rd.cpp

@@ -4352,10 +4352,8 @@ AABB RendererStorageRD::particles_get_current_aabb(RID p_particles) {
 		total_amount *= particles->trail_bind_poses.size();
 		total_amount *= particles->trail_bind_poses.size();
 	}
 	}
 
 
-	Vector<ParticleData> data;
-	data.resize(total_amount);
-
 	Vector<uint8_t> buffer = RD::get_singleton()->buffer_get_data(particles->particle_buffer);
 	Vector<uint8_t> buffer = RD::get_singleton()->buffer_get_data(particles->particle_buffer);
+	ERR_FAIL_COND_V(buffer.size() != (int)(total_amount * sizeof(ParticleData)), AABB());
 
 
 	Transform3D inv = particles->emission_transform.affine_inverse();
 	Transform3D inv = particles->emission_transform.affine_inverse();
 
 
@@ -4363,7 +4361,7 @@ AABB RendererStorageRD::particles_get_current_aabb(RID p_particles) {
 	if (buffer.size()) {
 	if (buffer.size()) {
 		bool first = true;
 		bool first = true;
 
 
-		const ParticleData *particle_data = (const ParticleData *)data.ptr();
+		const ParticleData *particle_data = reinterpret_cast<const ParticleData *>(buffer.ptr());
 		for (int i = 0; i < total_amount; i++) {
 		for (int i = 0; i < total_amount; i++) {
 			if (particle_data[i].active) {
 			if (particle_data[i].active) {
 				Vector3 pos = Vector3(particle_data[i].xform[12], particle_data[i].xform[13], particle_data[i].xform[14]);
 				Vector3 pos = Vector3(particle_data[i].xform[12], particle_data[i].xform[13], particle_data[i].xform[14]);

+ 0 - 1
servers/rendering/renderer_rd/renderer_storage_rd.h

@@ -621,7 +621,6 @@ private:
 		float color[4];
 		float color[4];
 		float custom[3];
 		float custom[3];
 		float lifetime;
 		float lifetime;
-		uint32_t pad[3];
 	};
 	};
 
 
 	struct ParticlesFrameParams {
 	struct ParticlesFrameParams {