Extended instructions, tips, and ‘gotchas’ on how to compile and build Firestorm, a third-party Open Source viewer for use with Second Life by Linden Lab.
Includes both Firestorm for Windows and also Firestorm for Ubuntu Linux.
First published in February 2014, and regularly updated ever since.
NOTE: This article assumes that you are a competent software developer who is comfortable with C++ build environments and command consoles. Most people will have no need to build their own version of Firestorm from the source code.
As part of my private build of Firestorm, the Open Source third-party viewer for Second Life from Linden Lab, I have added new library dependencies for something I am working on (adding metadata to snapshots).
This blog post details how I added them, making use of CMake and modifying various files.
I present it in the hope that it may prove useful to others.
[Originally posted on 14-Apr-2012, updated 20-Jun-2017]
Introduction
I’ve been trying to reduce my prim count at my home in SL, and one of the things I figured I could improve on is the pictures hanging on my wall. I’ve got 4 walls of pictures, and each has 3-5 pictures on it, each one on its own prim. So I could see some good savings there.
But how to reduce that number?
Well, a picture is just a texture on a prim. And a wall is also just a texture on a prim. So why not combine the two? Bake the pictures onto the texture of the wall itself.
However, unless you really are pinching every single prim, I think it is better to spend an extra prim per wall and create a transparent veneer onto which you bake your pictures. Think of it as a single picture frame prim that happens to contain multiple pictures. I will refer to this as a “veneer prim” or “veneer” for the rest of the article as it covers the wall just like a wood veneer. However, as I will shortly explain, it is actually preferable for it to be smaller than the wall itself but that doesn’t alter the fact that it is a veneer of sorts.
I logged onto SL recently and noticed that sculpts and meshes weren’t rendering properly unless I zoomed in, and I remembered that there is a debug setting to fix that and it must have got reverted for me at some time.
The fix is as old as the hills, but I thought I would note it down here simply so I can easily find it again. If it helps someone else too then so much the better.
Go to Advanced -> Debug Settings (or use Ctrl+Alt+Shift+S)
(If the Advanced menu is not enabled then enable it with Ctrl+Alt+D)
You need to set both the RenderAvatarLODFactor and RenderVolumeLODFactor settings.
A value of at least 4 is recommended, whilst 6 is better.
Another in my series of hints and tips for Second Life. This one is very short and simple.
Have you ever been in a crowded sim, say at a club or a music venue, and somebody TPs in and then, without waiting for anything to rezz, just bulldozes through everyone before (if you’re lucky) they say in open chat “sorry if I barged anyone”?
[NOTE: This is very out of date now that we no longer have prim link sets and most things are mesh instead]
A friend recently IMed me with exactly that. And, to be fair, most of us have been there. But don’t panic, and all is not lost.
Likewise do not panic if you accidentally moved something. Or if you rezzed something and exceeded your prim count and half your house got returned to you instead (that happened to me once), or your landlady had a blonde moment and returned half your stuff (happened to me also).
Here are some handy hints on what you can do in each circumstance.
You moved something
If you’ve moved something by accident the first thing you should do, if your Viewer supports it, is to hit Ctrl-Z which is the shortcut key for “undo”. Very often this will snap things back exactly as they were.
Phoenix and Firestorm both have this functionality, and doubtless many other Viewers do too.
However, this does not always work. So you will have to move it back manually. Now your first inclination will be to grab the object and start dragging it around but this is the worst thing you can do as, trust me, you will not get it back to exactly where it was. Oh, sure, it may be “good enough” and that’s fine. But then you wouldn’t be reading this if you were happy with just that. Besides, in the case of segments of a house it will not look right unless correct down to the smallest decimal point.
What you need to do it right-click on the object, select Edit, and then choose the Object tab. If you look at the screenshot above you can see what I mean. I was running Firestorm Viewer so if you’re using a different Viewer it might look slightly different.
If you look on that you’ll see all the numbers for the exact placement of the object. Now, with some rezzboxes (the box that rezzed your house) they add the exact position co-ordinates of when they were rezzed to the description field. So if that’s the case then you’re sorted as you can manually set them back to the correct value. They will very likely write the X, Y and Z values as , eg. <105.83778, 146.98111, 35.75515>
If not, you may be able to deduce the settings by looking at surrounding objects. This is often hard though.
One sure-fire way, albeit rather tedious, is to rezz a copy of the house (you may need to go to a sandbox if you have insufficient prims to do that) and examine the values of the offending segment and also those of an adjacent one, and with some very simple maths deduce the offset of one to the other. Then return to your proper house and apply the same offsets, thus returning the moved segment to its correct position. So if, for example, SegmentA is at 100,100,100 and Segment B is at 100,110,100 on the new house, and on the proper house SegmentA is at 200,200,100 then SegmentB should be at 200,210,100 because there is an offset of 10 on the Y co-ordinate.
I find that using a simple spreadsheet to do this helps enormously. If there is enough demand I could make one available.
Finally, prevention is better than cure. Once you have things back the way you want, be sure to lock the object. All this does is mean you can’t accidentally move it again until you unlock it; it’s just like the safety catch on a gun. You’ll find a tick box to lock & unlock objects on the same tab as all the numbers we’ve been looking at – it’s called “Locked”.
You deleted something
First thing to do is to find it in your inventory, and it will be in your Trash.
Note the name of the object, then right-click on it and choose “Restore” to undelete it. Do NOT click “Purge”!!
Then find the object again (searching for it by name if necessary) and see what menu options are available. On some Viewers there is the option to “Restore to last position”. Phoenix and Firestorm definitely have this, and I’m sure many other Viewers do too. If that is the case then use this option and you will very likely find the object restored to its correct place. However, I disclaim all responsibility if for some reason it doesn’t, especially if it is a no-copy item that disappears into the far blue yonder never to be seen again. You have been warned.
The other option is to just rezz the object in approximately the correct place and then use the techniques mentioned earlier for moved objects (although obviously not the first one to do with “Undo”)
You had something returned
First thing to do is to find it in your inventory, and it will be in your Lost & Found. Something worth bearing in mind is that if a large number of objects are returned to you, SL may package them up. You will find what looks like just one of your objects but it will have an icon that looks like a pile of building blocks rather than the normal icon for an object which is a box. Rezzing this will rezz all the returned objects inside the package, although possibly in the wrong place. But at least they will be rezzed in the correct relative positions to each other so it should be a case of calculating the offset to their correct position (as I outlined earlier) and then moving them.
However, if it is just one object, and not a package, then use the same technique as outlined above for deleted objects.
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept All”, you consent to the use of ALL the cookies. However, you may visit "Cookie Settings" to provide a controlled consent.
This website uses cookies that are essential for the working of basic functionalities of the website and its security.
We have not explicitly installed any data-tracking plugins and have not, for example, added Google Analytics code to this website.
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie
Duration
Description
cookielawinfo-checkbox-advertisement
1 year
Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
cookielawinfo-checkbox-analytics
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional
11 months
The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-non-necessary
1 year
Set by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Non-necessary" category .
cookielawinfo-checkbox-others
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance
11 months
This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
CookieLawInfoConsent
1 year
Records the default button state of the corresponding category & the status of CCPA. It works only in coordination with the primary cookie.
DYNSRV
session
This cookie is used for load balancing purposes to decide which server to send the visitor.
viewed_cookie_policy
11 months
The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Cookie
Duration
Description
CONSENT
2 years
YouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
Cookie
Duration
Description
VISITOR_INFO1_LIVE
5 months 27 days
A cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.
YSC
session
YSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.
yt-remote-connected-devices
never
YouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
yt-remote-device-id
never
YouTube sets this cookie to store the video preferences of the user using embedded YouTube video.