Ver código fonte

Fix segfault on uniform update

Daniele Bartolini 11 anos atrás
pai
commit
241f831fac
1 arquivos alterados com 6 adições e 9 exclusões
  1. 6 9
      engine/resource/material_resource.cpp

+ 6 - 9
engine/resource/material_resource.cpp

@@ -293,19 +293,16 @@ namespace material_resource
 
 	UniformData* get_uniform_data_by_string(const MaterialResource* mr, const char* str)
 	{
-		UniformData* base = (UniformData*) ((char*)mr + mr->uniform_data_offset);
-
-		uint32_t num = num_uniforms(mr);
-		for (uint32_t i = 0; i < num; i++)
+		for (uint32_t i = 0, n = num_uniforms(mr); i < n; ++i)
 		{
-			const char* name = get_uniform_name(mr, (const UniformData*)base->name_offset);
-			if (strcmp(name, str) == 0)
-				return base;
+			UniformData* base = get_uniform_data(mr, i);
+			const char* name = get_uniform_name(mr, base);
 
-			base++;
+			if (strcmp(str, name) == 0)
+				return base;
 		}
 
-		CE_FATAL("Oops, bad uniform name");
+		CE_ASSERT(false, "Bad uniform name: '%s'", str);
 		return NULL;
 	}