diff options
author | Craig Robbins <kde.psych@gmail.com> | 2014-12-10 00:45:07 +1000 |
---|---|---|
committer | Craig Robbins <kde.psych@gmail.com> | 2014-12-10 00:52:02 +1000 |
commit | c5f6f9f77ac1df4b223649fcaca9a66333aa8786 (patch) | |
tree | 87c5efb5da53fb26c1cfca4ab717258ab12ad897 /src/mapnode.h | |
parent | a1ea017b512ea8f99c40dca52a57ff58054c5acc (diff) | |
download | minetest-c5f6f9f77ac1df4b223649fcaca9a66333aa8786.tar.gz minetest-c5f6f9f77ac1df4b223649fcaca9a66333aa8786.tar.bz2 minetest-c5f6f9f77ac1df4b223649fcaca9a66333aa8786.zip |
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%
Diffstat (limited to 'src/mapnode.h')
-rw-r--r-- | src/mapnode.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mapnode.h b/src/mapnode.h index d0b949e6f..349739be7 100644 --- a/src/mapnode.h +++ b/src/mapnode.h @@ -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 |