mirror of
https://github.com/luanti-org/luanti.git
synced 2025-06-27 16:36:03 +00:00
Increase performance of getLight() by at least 2x
Leads to the following increases: getSmoothLight() approx. 40% increase getTileInfo() approx. 25% increase MapBlockMesh::MapBlockMesh() 25-30%
This commit is contained in:
parent
a1ea017b51
commit
c5f6f9f77a
3 changed files with 29 additions and 2 deletions
|
@ -108,6 +108,9 @@ enum Rotation {
|
|||
#define LEVELED_MASK 0x3F
|
||||
#define LEVELED_MAX LEVELED_MASK
|
||||
|
||||
|
||||
struct ContentFeatures;
|
||||
|
||||
/*
|
||||
This is the stuff what the whole world consists of.
|
||||
*/
|
||||
|
@ -188,6 +191,24 @@ struct MapNode
|
|||
|
||||
void setLight(enum LightBank bank, u8 a_light, INodeDefManager *nodemgr);
|
||||
u8 getLight(enum LightBank bank, INodeDefManager *nodemgr) const;
|
||||
|
||||
/**
|
||||
* This function differs from getLight(enum LightBank bank, INodeDefManager *nodemgr)
|
||||
* in that the ContentFeatures of the node in question are not retrieved by
|
||||
* the function itself. Thus, if you have already called nodemgr->get() to
|
||||
* get the ContentFeatures you pass it to this function instead of the
|
||||
* function getting ContentFeatures itself. Since INodeDefManager::get()
|
||||
* is relatively expensive this can lead to significant performance
|
||||
* improvements in some situations. Call this function if (and only if)
|
||||
* you have already retrieved the ContentFeatures by calling
|
||||
* INodeDefManager::get() for the node you're working with and the
|
||||
* pre-conditions listed are true.
|
||||
*
|
||||
* @pre f != NULL
|
||||
* @pre f->param_type == CPT_LIGHT
|
||||
*/
|
||||
u8 getLightNoChecks(LightBank bank, const ContentFeatures *f);
|
||||
|
||||
bool getLightBanks(u8 &lightday, u8 &lightnight, INodeDefManager *nodemgr) const;
|
||||
|
||||
// 0 <= daylight_factor <= 1000
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue