You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-06 12:20:30 +00:00
Add stencil support for spatial materials
This commit is contained in:
@@ -453,6 +453,8 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
|
||||
case SL::Node::NODE_TYPE_SHADER: {
|
||||
SL::ShaderNode *pnode = (SL::ShaderNode *)p_node;
|
||||
|
||||
// Render modes.
|
||||
|
||||
for (int i = 0; i < pnode->render_modes.size(); i++) {
|
||||
if (p_default_actions.render_mode_defines.has(pnode->render_modes[i]) && !used_rmode_defines.has(pnode->render_modes[i])) {
|
||||
r_gen_code.defines.push_back(p_default_actions.render_mode_defines[pnode->render_modes[i]]);
|
||||
@@ -469,6 +471,21 @@ String ShaderCompiler::_dump_node_code(const SL::Node *p_node, int p_level, Gene
|
||||
}
|
||||
}
|
||||
|
||||
// Stencil modes.
|
||||
|
||||
for (int i = 0; i < pnode->stencil_modes.size(); i++) {
|
||||
if (p_actions.stencil_mode_values.has(pnode->stencil_modes[i])) {
|
||||
Pair<int *, int> &p = p_actions.stencil_mode_values[pnode->stencil_modes[i]];
|
||||
*p.first = p.second;
|
||||
}
|
||||
}
|
||||
|
||||
// Stencil reference value.
|
||||
|
||||
if (p_actions.stencil_reference && pnode->stencil_reference != -1) {
|
||||
*p_actions.stencil_reference = pnode->stencil_reference;
|
||||
}
|
||||
|
||||
// structs
|
||||
|
||||
for (int i = 0; i < pnode->vstructs.size(); i++) {
|
||||
@@ -1463,6 +1480,7 @@ Error ShaderCompiler::compile(RS::ShaderMode p_mode, const String &p_code, Ident
|
||||
SL::ShaderCompileInfo info;
|
||||
info.functions = ShaderTypes::get_singleton()->get_functions(p_mode);
|
||||
info.render_modes = ShaderTypes::get_singleton()->get_modes(p_mode);
|
||||
info.stencil_modes = ShaderTypes::get_singleton()->get_stencil_modes(p_mode);
|
||||
info.shader_types = ShaderTypes::get_singleton()->get_types();
|
||||
info.global_shader_uniform_type_func = _get_global_shader_uniform_type;
|
||||
info.base_varying_index = actions.base_varying_index;
|
||||
|
||||
Reference in New Issue
Block a user