1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-04 12:00:25 +00:00

Blend shapes using transform feedback (GPU)

This commit is contained in:
Juan Linietsky
2016-11-24 20:46:55 -03:00
parent 69c30709ec
commit a732708b9d
16 changed files with 726 additions and 162 deletions

View File

@@ -671,6 +671,7 @@ class LegacyGLHeaderStruct:
self.fragment_lines=[]
self.uniforms=[]
self.attributes=[]
self.feedbacks=[]
self.fbos=[]
self.conditionals=[]
self.enums={}
@@ -823,6 +824,20 @@ def include_file_in_legacygl_header( filename, header_data, depth ):
bind=bind.replace("attrib:","").strip()
header_data.attributes+=[(name,bind)]
if ( line.strip().find("out ")==0 and line.find("tfb:")!=-1):
uline = line.replace("out ","");
uline = uline.replace("highp ","");
uline = uline.replace(";","");
uline = uline[ uline.find(" "): ].strip()
if (uline.find("//")!=-1):
name,bind = uline.split("//")
if (bind.find("tfb:")!=-1):
name=name.strip()
bind=bind.replace("tfb:","").strip()
header_data.feedbacks+=[(name,bind)]
line=line.replace("\r","")
line=line.replace("\n","")
@@ -1039,12 +1054,14 @@ def build_legacygl_header( filename, include, class_suffix, output_attribs ):
fd.write("\t\tstatic const Enum *_enums=NULL;\n")
fd.write("\t\tstatic const EnumValue *_enum_values=NULL;\n")
conditionals_found = []
if (len(header_data.conditionals)):
fd.write("\t\tstatic const char* _conditional_strings[]={\n")
if (len(header_data.conditionals)):
for x in header_data.conditionals:
fd.write("\t\t\t\"#define "+x+"\\n\",\n");
conditionals_found.append(x)
fd.write("\t\t};\n\n");
else:
fd.write("\t\tstatic const char **_conditional_strings=NULL;\n")
@@ -1070,6 +1087,24 @@ def build_legacygl_header( filename, include, class_suffix, output_attribs ):
else:
fd.write("\t\tstatic AttributePair *_attribute_pairs=NULL;\n")
feedback_count=0
if (len(header_data.feedbacks)):
fd.write("\t\tstatic const Feedback _feedbacks[]={\n")
for x in header_data.feedbacks:
name = x[0]
cond = x[1]
if (cond in conditionals_found):
fd.write("\t\t\t{\""+name+"\","+str(conditionals_found.index(cond))+"},\n");
else:
fd.write("\t\t\t{\""+name+"\",-1},\n");
feedback_count+=1
fd.write("\t\t};\n\n");
else:
fd.write("\t\tstatic const Feedback* _feedbacks=NULL;\n")
if (len(header_data.texunits)):
fd.write("\t\tstatic TexUnitPair _texunit_pairs[]={\n")
@@ -1109,9 +1144,9 @@ def build_legacygl_header( filename, include, class_suffix, output_attribs ):
fd.write("\t\tstatic const int _fragment_code_start="+str(header_data.fragment_offset)+";\n")
if output_attribs:
fd.write("\t\tsetup(_conditional_strings,"+str(len(header_data.conditionals))+",_uniform_strings,"+str(len(header_data.uniforms))+",_attribute_pairs,"+str(len(header_data.attributes))+", _texunit_pairs,"+str(len(header_data.texunits))+",_ubo_pairs,"+str(len(header_data.ubos))+",_vertex_code,_fragment_code,_vertex_code_start,_fragment_code_start);\n")
fd.write("\t\tsetup(_conditional_strings,"+str(len(header_data.conditionals))+",_uniform_strings,"+str(len(header_data.uniforms))+",_attribute_pairs,"+str(len(header_data.attributes))+", _texunit_pairs,"+str(len(header_data.texunits))+",_ubo_pairs,"+str(len(header_data.ubos))+",_feedbacks,"+str(feedback_count)+",_vertex_code,_fragment_code,_vertex_code_start,_fragment_code_start);\n")
else:
fd.write("\t\tsetup(_conditional_strings,"+str(len(header_data.conditionals))+",_uniform_strings,"+str(len(header_data.uniforms))+",_texunit_pairs,"+str(len(header_data.texunits))+",_enums,"+str(len(header_data.enums))+",_enum_values,"+str(enum_value_count)+",_ubo_pairs,"+str(len(header_data.ubos))+",_vertex_code,_fragment_code,_vertex_code_start,_fragment_code_start);\n")
fd.write("\t\tsetup(_conditional_strings,"+str(len(header_data.conditionals))+",_uniform_strings,"+str(len(header_data.uniforms))+",_texunit_pairs,"+str(len(header_data.texunits))+",_enums,"+str(len(header_data.enums))+",_enum_values,"+str(enum_value_count)+",_ubo_pairs,"+str(len(header_data.ubos))+",_feedbacks,"+str(feedback_count)+",_vertex_code,_fragment_code,_vertex_code_start,_fragment_code_start);\n")
fd.write("\t};\n\n")