X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=nageru%2Fscene.h;h=8cff06a8d3e53946af18ad4e41aedfe56e5236b0;hb=9ece26cae09110a3c6a0c74aefb2269a6dd9a7d9;hp=8db75540559cfa29bf45611319e19380bb56fc1c;hpb=7df979279388aeee8866d59a17a19b31b9c8ef07;p=nageru diff --git a/nageru/scene.h b/nageru/scene.h index 8db7554..8cff06a 100644 --- a/nageru/scene.h +++ b/nageru/scene.h @@ -131,6 +131,10 @@ struct Block { std::map> vec4_parameters; std::string declaration_point; // For error messages. + + // Only for AUTO_WHITE_BALANCE_EFFECT. Points to the parent block with is_input = true, + // so that we know which signal to get the white balance from. + const Block *root_input_block = nullptr; }; int Block_display(lua_State* L); @@ -162,7 +166,7 @@ private: movit::Effect *instantiate_effects(const Block *block, size_t chain_idx, Instantiation *instantiation); size_t compute_chain_number_for_block(size_t block_idx, const std::bitset<256> &disabled) const; - static void find_inputs_for_block(lua_State *L, Scene *scene, Block *block); + static void find_inputs_for_block(lua_State *L, Scene *scene, Block *block, int first_input_idx = 3); // Find out which blocks (indexed by position in the “blocks” array), // if any, are disabled in a given instantiation. A disabled block is @@ -182,6 +186,11 @@ private: // it returns true. bool is_noncanonical_chain(size_t chain_idx) const; + // For a given block, find any parents it may have that are inputs. + // If there is more than one, throws an error. If there are zero, + // returns nullptr (should probably also be an error). + const Block *find_root_input_block(lua_State *L, const Block *block); + public: Scene(Theme *theme, float aspect_nom, float aspect_denom); size_t compute_chain_number(bool is_main_chain) const; @@ -192,6 +201,7 @@ public: static int add_input(lua_State *L); static int add_effect(lua_State *L); static int add_optional_effect(lua_State *L); + static int add_auto_white_balance(lua_State *L); static int finalize(lua_State *L); };