[3.x] Implemented global const array to shaders
This commit is contained in:
@ -560,17 +560,23 @@ String ShaderCompilerGLES3::_dump_node_code(const SL::Node *p_node, int p_level,
|
||||
}
|
||||
|
||||
for (int i = 0; i < pnode->vconstants.size(); i++) {
|
||||
const SL::ShaderNode::Constant &cnode = pnode->vconstants[i];
|
||||
String gcode;
|
||||
gcode += "const ";
|
||||
if (pnode->vconstants[i].type == SL::TYPE_STRUCT) {
|
||||
gcode += _mkid(pnode->vconstants[i].type_str);
|
||||
gcode += _mkid(cnode.type_str);
|
||||
} else {
|
||||
gcode += _prestr(pnode->vconstants[i].precision);
|
||||
gcode += _typestr(pnode->vconstants[i].type);
|
||||
gcode += _prestr(cnode.precision);
|
||||
gcode += _typestr(cnode.type);
|
||||
}
|
||||
gcode += " " + _mkid(String(cnode.name));
|
||||
if (cnode.array_size > 0) {
|
||||
gcode += "[";
|
||||
gcode += itos(cnode.array_size);
|
||||
gcode += "]";
|
||||
}
|
||||
gcode += " " + _mkid(String(pnode->vconstants[i].name));
|
||||
gcode += "=";
|
||||
gcode += _dump_node_code(pnode->vconstants[i].initializer, p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
|
||||
gcode += _dump_node_code(cnode.initializer, p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
|
||||
gcode += ";\n";
|
||||
r_gen_code.vertex_global += gcode;
|
||||
r_gen_code.fragment_global += gcode;
|
||||
@ -862,7 +868,29 @@ String ShaderCompilerGLES3::_dump_node_code(const SL::Node *p_node, int p_level,
|
||||
} break;
|
||||
case SL::Node::TYPE_CONSTANT: {
|
||||
SL::ConstantNode *cnode = (SL::ConstantNode *)p_node;
|
||||
return get_constant_text(cnode->datatype, cnode->values);
|
||||
|
||||
if (cnode->array_size == 0) {
|
||||
return get_constant_text(cnode->datatype, cnode->values);
|
||||
} else {
|
||||
if (cnode->get_datatype() == SL::TYPE_STRUCT) {
|
||||
code += _mkid(cnode->struct_name);
|
||||
} else {
|
||||
code += _typestr(cnode->datatype);
|
||||
}
|
||||
code += "[";
|
||||
code += itos(cnode->array_size);
|
||||
code += "]";
|
||||
code += "(";
|
||||
for (int i = 0; i < cnode->array_size; i++) {
|
||||
if (i > 0) {
|
||||
code += ",";
|
||||
} else {
|
||||
code += "";
|
||||
}
|
||||
code += _dump_node_code(cnode->array_declarations[0].initializer[i], p_level, r_gen_code, p_actions, p_default_actions, p_assigning);
|
||||
}
|
||||
code += ")";
|
||||
}
|
||||
|
||||
} break;
|
||||
case SL::Node::TYPE_OPERATOR: {
|
||||
|
||||
Reference in New Issue
Block a user