├── .github
└── workflows
│ └── docker-publish.yml
├── .gitignore
├── BuildVersion
├── BuildVersion.exe
└── BuildVersion.exe.config
├── LICENSE
├── README.md
├── ReleaseSteps.txt
├── THIRDPARTYLICENSES
├── InWorldz.PrimExporter
├── LookingGlass.txt
├── OpenSimulator
├── ParameterParse
├── Radegast
└── libopenmetaverse
├── VERSION
├── bin
├── Mono.Addins.dll
├── Nini.dll
├── OpenMetaverse.Rendering.Meshmerizer.dll
├── OpenMetaverse.StructuredData.dll
├── OpenMetaverse.dll
├── OpenMetaverse.dll.config
├── OpenMetaverseTypes.dll
├── OpenSim.Capabilities.dll
├── OpenSim.Data.Null.dll
├── OpenSim.Framework.Monitoring.dll
├── OpenSim.Framework.Serialization.dll
├── OpenSim.Framework.Servers.HttpServer.dll
├── OpenSim.Framework.dll
├── OpenSim.Region.CoreModules.dll
├── OpenSim.Region.Framework.dll
├── OpenSim.Region.PhysicsModule.BasicPhysics.dll
├── OpenSim.Region.PhysicsModules.SharedBase.dll
├── OpenSim.Services.Connectors.dll
├── OpenSim.Services.Interfaces.dll
├── OpenSim.Tests.Common.dll
├── PrimMesher.dll
├── SmartThreadPool.dll
├── log4net.dll
├── nunit.framework.dll
└── zlib.net.dll
├── buildDocker.sh
├── convoar.sln
├── convoar
├── App.config
├── Convoar.cs
├── ConvoarParams.cs
├── ConvoarStats.cs
├── ConvoarTests.cs
├── NullUserAccountService.cs
├── OarConverter.cs
├── ParameterParsing.cs
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Resources.Designer.cs
│ └── Resources.resx
├── Resources
│ └── README.txt
├── VersionInfo.cs
├── convoar.csproj
├── libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
├── openjpeg-dotnet-x86_64.dll
└── openjpeg-dotnet.dll
├── dist
├── Herbal3d.CommonEntities.dll
├── Herbal3d.CommonEntitiesConv.dll
├── Herbal3d.CommonEntitiesConv.dll.config
├── Herbal3d.CommonEntitiesUtil.dll
├── Herbal3d.CommonUtil.dll
├── Microsoft.Win32.Primitives.dll
├── Mono.Addins.dll
├── NLog.dll
├── NLog.xml
├── Nini.dll
├── OpenMetaverse.Rendering.Meshmerizer.dll
├── OpenMetaverse.StructuredData.dll
├── OpenMetaverse.dll
├── OpenMetaverse.dll.config
├── OpenMetaverseTypes.dll
├── OpenSim.Capabilities.dll
├── OpenSim.Capabilities.pdb
├── OpenSim.Data.Null.dll
├── OpenSim.Data.Null.pdb
├── OpenSim.Framework.Monitoring.dll
├── OpenSim.Framework.Monitoring.pdb
├── OpenSim.Framework.Serialization.dll
├── OpenSim.Framework.Serialization.pdb
├── OpenSim.Framework.Servers.HttpServer.dll
├── OpenSim.Framework.Servers.HttpServer.pdb
├── OpenSim.Framework.dll
├── OpenSim.Framework.pdb
├── OpenSim.Region.CoreModules.dll
├── OpenSim.Region.CoreModules.pdb
├── OpenSim.Region.Framework.dll
├── OpenSim.Region.Framework.pdb
├── OpenSim.Region.PhysicsModule.BasicPhysics.dll
├── OpenSim.Region.PhysicsModule.BasicPhysics.pdb
├── OpenSim.Region.PhysicsModules.SharedBase.dll
├── OpenSim.Region.PhysicsModules.SharedBase.pdb
├── OpenSim.Services.Connectors.dll
├── OpenSim.Services.Connectors.pdb
├── OpenSim.Services.Interfaces.dll
├── OpenSim.Services.Interfaces.pdb
├── OpenSim.Tests.Common.dll
├── OpenSim.Tests.Common.pdb
├── PrimMesher.dll
├── SmartThreadPool.dll
├── SmartThreadPool.pdb
├── System.AppContext.dll
├── System.Collections.Concurrent.dll
├── System.Collections.NonGeneric.dll
├── System.Collections.Specialized.dll
├── System.Collections.dll
├── System.ComponentModel.EventBasedAsync.dll
├── System.ComponentModel.Primitives.dll
├── System.ComponentModel.TypeConverter.dll
├── System.ComponentModel.dll
├── System.Console.dll
├── System.Data.Common.dll
├── System.Diagnostics.Contracts.dll
├── System.Diagnostics.Debug.dll
├── System.Diagnostics.FileVersionInfo.dll
├── System.Diagnostics.Process.dll
├── System.Diagnostics.StackTrace.dll
├── System.Diagnostics.TextWriterTraceListener.dll
├── System.Diagnostics.Tools.dll
├── System.Diagnostics.TraceSource.dll
├── System.Diagnostics.Tracing.dll
├── System.Drawing.Primitives.dll
├── System.Dynamic.Runtime.dll
├── System.Globalization.Calendars.dll
├── System.Globalization.Extensions.dll
├── System.Globalization.dll
├── System.IO.Compression.ZipFile.dll
├── System.IO.Compression.dll
├── System.IO.FileSystem.DriveInfo.dll
├── System.IO.FileSystem.Primitives.dll
├── System.IO.FileSystem.Watcher.dll
├── System.IO.FileSystem.dll
├── System.IO.IsolatedStorage.dll
├── System.IO.MemoryMappedFiles.dll
├── System.IO.Pipes.dll
├── System.IO.UnmanagedMemoryStream.dll
├── System.IO.dll
├── System.Linq.Expressions.dll
├── System.Linq.Parallel.dll
├── System.Linq.Queryable.dll
├── System.Linq.dll
├── System.Net.Http.dll
├── System.Net.NameResolution.dll
├── System.Net.NetworkInformation.dll
├── System.Net.Ping.dll
├── System.Net.Primitives.dll
├── System.Net.Requests.dll
├── System.Net.Security.dll
├── System.Net.Sockets.dll
├── System.Net.WebHeaderCollection.dll
├── System.Net.WebSockets.Client.dll
├── System.Net.WebSockets.dll
├── System.ObjectModel.dll
├── System.Reflection.Extensions.dll
├── System.Reflection.Primitives.dll
├── System.Reflection.dll
├── System.Resources.Reader.dll
├── System.Resources.ResourceManager.dll
├── System.Resources.Writer.dll
├── System.Runtime.CompilerServices.VisualC.dll
├── System.Runtime.Extensions.dll
├── System.Runtime.Handles.dll
├── System.Runtime.InteropServices.RuntimeInformation.dll
├── System.Runtime.InteropServices.dll
├── System.Runtime.Numerics.dll
├── System.Runtime.Serialization.Formatters.dll
├── System.Runtime.Serialization.Json.dll
├── System.Runtime.Serialization.Primitives.dll
├── System.Runtime.Serialization.Xml.dll
├── System.Runtime.dll
├── System.Security.Claims.dll
├── System.Security.Cryptography.Algorithms.dll
├── System.Security.Cryptography.Csp.dll
├── System.Security.Cryptography.Encoding.dll
├── System.Security.Cryptography.Primitives.dll
├── System.Security.Cryptography.X509Certificates.dll
├── System.Security.Principal.dll
├── System.Security.SecureString.dll
├── System.Text.Encoding.Extensions.dll
├── System.Text.Encoding.dll
├── System.Text.RegularExpressions.dll
├── System.Threading.Overlapped.dll
├── System.Threading.Tasks.Parallel.dll
├── System.Threading.Tasks.dll
├── System.Threading.Thread.dll
├── System.Threading.ThreadPool.dll
├── System.Threading.Timer.dll
├── System.Threading.dll
├── System.ValueTuple.dll
├── System.Xml.ReaderWriter.dll
├── System.Xml.XDocument.dll
├── System.Xml.XPath.XDocument.dll
├── System.Xml.XPath.dll
├── System.Xml.XmlDocument.dll
├── System.Xml.XmlSerializer.dll
├── convoar.exe
├── convoar.exe.config
├── convoar.pdb
├── libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
├── log4net.dll
├── netstandard.dll
├── nunit.framework.dll
├── openjpeg-dotnet-x86_64.dll
├── openjpeg-dotnet.dll
└── zlib.net.dll
├── docker
├── Dockerfile
└── run-convoar.sh
├── gatherLibs.sh
├── setupConvoar.sh
└── updateVersion.sh
/.github/workflows/docker-publish.yml:
--------------------------------------------------------------------------------
1 | name: Convoar Docker image
2 |
3 | on:
4 | push:
5 | # Publish `master` as Docker `latest` image.
6 | branches:
7 | - master
8 |
9 | env:
10 | IMAGE_NAME: convoar
11 | IMAGE_OWNER: misterblue
12 |
13 | jobs:
14 | # Push image to GitHub Packages.
15 | # See also https://docs.docker.com/docker-hub/builds/
16 | push:
17 | runs-on: ubuntu-latest
18 | if: github.event_name == 'push'
19 |
20 | steps:
21 | - name: checkout
22 | uses: actions/checkout@v2
23 |
24 | - name: Place version number into environment
25 | run: |
26 | echo "CVERSION=$(cat VERSION)" >> $GITHUB_ENV
27 |
28 | - name: Setup QEMU
29 | uses: docker/setup-qemu-action@v1
30 |
31 | - name: Login to Github Container registry
32 | uses: docker/login-action@v1
33 | with:
34 | registry: ghcr.io
35 | username: ${{ github.repository_owner }}
36 | password: ${{ secrets.GITHUB_TOKEN }}
37 |
38 | - name: Build and push
39 | uses: docker/build-push-action@v2
40 | with:
41 | context: ./docker
42 | build-args: |
43 | TARGET=Release
44 | VERSION=${{ env.CVERSION }}
45 | platforms: linux/amd64
46 | # platforms: linux/amd64,linux/arm64
47 | push: true
48 | tags: |
49 | ghcr.io/${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:latest
50 | ghcr.io/${{ env.IMAGE_OWNER }}/${{ env.IMAGE_NAME }}:${{ env.CVERSION }}
51 |
52 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Added for convoar
2 | test/
3 | addon-modules/
4 |
5 | ## Ignore Visual Studio temporary files, build results, and
6 | ## files generated by popular Visual Studio add-ons.
7 | ##
8 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
9 |
10 | # User-specific files
11 | *.suo
12 | *.user
13 | *.userosscache
14 | *.sln.docstates
15 |
16 | # User-specific files (MonoDevelop/Xamarin Studio)
17 | *.userprefs
18 |
19 | # Build results
20 | [Dd]ebug/
21 | [Dd]ebugPublic/
22 | [Rr]elease/
23 | [Rr]eleases/
24 | x64/
25 | x86/
26 | bld/
27 | [Oo]bj/
28 | [Ll]og/
29 |
30 | # Visual Studio 2015 cache/options directory
31 | .vs/
32 | # Uncomment if you have tasks that create the project's static files in wwwroot
33 | #wwwroot/
34 |
35 | # MSTest test Results
36 | [Tt]est[Rr]esult*/
37 | [Bb]uild[Ll]og.*
38 |
39 | # NUNIT
40 | *.VisualState.xml
41 | TestResult.xml
42 |
43 | # Build Results of an ATL Project
44 | [Dd]ebugPS/
45 | [Rr]eleasePS/
46 | dlldata.c
47 |
48 | # .NET Core
49 | project.lock.json
50 | project.fragment.lock.json
51 | artifacts/
52 | **/Properties/launchSettings.json
53 |
54 | *_i.c
55 | *_p.c
56 | *_i.h
57 | *.ilk
58 | *.meta
59 | *.obj
60 | *.pch
61 | *.pdb
62 | *.pgc
63 | *.pgd
64 | *.rsp
65 | *.sbr
66 | *.tlb
67 | *.tli
68 | *.tlh
69 | *.tmp
70 | *.tmp_proj
71 | *.log
72 | *.vspscc
73 | *.vssscc
74 | .builds
75 | *.pidb
76 | *.svclog
77 | *.scc
78 |
79 | # Chutzpah Test files
80 | _Chutzpah*
81 |
82 | # Visual C++ cache files
83 | ipch/
84 | *.aps
85 | *.ncb
86 | *.opendb
87 | *.opensdf
88 | *.sdf
89 | *.cachefile
90 | *.VC.db
91 | *.VC.VC.opendb
92 |
93 | # Visual Studio profiler
94 | *.psess
95 | *.vsp
96 | *.vspx
97 | *.sap
98 |
99 | # TFS 2012 Local Workspace
100 | $tf/
101 |
102 | # Guidance Automation Toolkit
103 | *.gpState
104 |
105 | # ReSharper is a .NET coding add-in
106 | _ReSharper*/
107 | *.[Rr]e[Ss]harper
108 | *.DotSettings.user
109 |
110 | # JustCode is a .NET coding add-in
111 | .JustCode
112 |
113 | # TeamCity is a build add-in
114 | _TeamCity*
115 |
116 | # DotCover is a Code Coverage Tool
117 | *.dotCover
118 |
119 | # Visual Studio code coverage results
120 | *.coverage
121 | *.coveragexml
122 |
123 | # NCrunch
124 | _NCrunch_*
125 | .*crunch*.local.xml
126 | nCrunchTemp_*
127 |
128 | # MightyMoose
129 | *.mm.*
130 | AutoTest.Net/
131 |
132 | # Web workbench (sass)
133 | .sass-cache/
134 |
135 | # Installshield output folder
136 | [Ee]xpress/
137 |
138 | # DocProject is a documentation generator add-in
139 | DocProject/buildhelp/
140 | DocProject/Help/*.HxT
141 | DocProject/Help/*.HxC
142 | DocProject/Help/*.hhc
143 | DocProject/Help/*.hhk
144 | DocProject/Help/*.hhp
145 | DocProject/Help/Html2
146 | DocProject/Help/html
147 |
148 | # Click-Once directory
149 | publish/
150 |
151 | # Publish Web Output
152 | *.[Pp]ublish.xml
153 | *.azurePubxml
154 | # TODO: Comment the next line if you want to checkin your web deploy settings
155 | # but database connection strings (with potential passwords) will be unencrypted
156 | *.pubxml
157 | *.publishproj
158 |
159 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
160 | # checkin your Azure Web App publish settings, but sensitive information contained
161 | # in these scripts will be unencrypted
162 | PublishScripts/
163 |
164 | # NuGet Packages
165 | *.nupkg
166 | # The packages folder can be ignored because of Package Restore
167 | **/packages/*
168 | # except build/, which is used as an MSBuild target.
169 | !**/packages/build/
170 | # Uncomment if necessary however generally it will be regenerated when needed
171 | #!**/packages/repositories.config
172 | # NuGet v3's project.json files produces more ignorable files
173 | *.nuget.props
174 | *.nuget.targets
175 |
176 | # Microsoft Azure Build Output
177 | csx/
178 | *.build.csdef
179 |
180 | # Microsoft Azure Emulator
181 | ecf/
182 | rcf/
183 |
184 | # Windows Store app package directories and files
185 | AppPackages/
186 | BundleArtifacts/
187 | Package.StoreAssociation.xml
188 | _pkginfo.txt
189 |
190 | # Visual Studio cache files
191 | # files ending in .cache can be ignored
192 | *.[Cc]ache
193 | # but keep track of directories ending in .cache
194 | !*.[Cc]ache/
195 |
196 | # Others
197 | ClientBin/
198 | ~$*
199 | *~
200 | *.dbmdl
201 | *.dbproj.schemaview
202 | *.jfm
203 | *.pfx
204 | *.publishsettings
205 | orleans.codegen.cs
206 |
207 | # Since there are multiple workflows, uncomment next line to ignore bower_components
208 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
209 | #bower_components/
210 |
211 | # RIA/Silverlight projects
212 | Generated_Code/
213 |
214 | # Backup & report files from converting an old project file
215 | # to a newer Visual Studio version. Backup files are not needed,
216 | # because we have git ;-)
217 | _UpgradeReport_Files/
218 | Backup*/
219 | UpgradeLog*.XML
220 | UpgradeLog*.htm
221 |
222 | # SQL Server files
223 | *.mdf
224 | *.ldf
225 | *.ndf
226 |
227 | # Business Intelligence projects
228 | *.rdl.data
229 | *.bim.layout
230 | *.bim_*.settings
231 |
232 | # Microsoft Fakes
233 | FakesAssemblies/
234 |
235 | # GhostDoc plugin setting file
236 | *.GhostDoc.xml
237 |
238 | # Node.js Tools for Visual Studio
239 | .ntvs_analysis.dat
240 | node_modules/
241 |
242 | # Typescript v1 declaration files
243 | typings/
244 |
245 | # Visual Studio 6 build log
246 | *.plg
247 |
248 | # Visual Studio 6 workspace options file
249 | *.opt
250 |
251 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
252 | *.vbw
253 |
254 | # Visual Studio LightSwitch build output
255 | **/*.HTMLClient/GeneratedArtifacts
256 | **/*.DesktopClient/GeneratedArtifacts
257 | **/*.DesktopClient/ModelManifest.xml
258 | **/*.Server/GeneratedArtifacts
259 | **/*.Server/ModelManifest.xml
260 | _Pvt_Extensions
261 |
262 | # Paket dependency manager
263 | .paket/paket.exe
264 | paket-files/
265 |
266 | # FAKE - F# Make
267 | .fake/
268 |
269 | # JetBrains Rider
270 | .idea/
271 | *.sln.iml
272 |
273 | # CodeRush
274 | .cr/
275 |
276 | # Python Tools for Visual Studio (PTVS)
277 | __pycache__/
278 | *.pyc
279 |
280 | # Cake - Uncomment if you are using it
281 | # tools/**
282 | # !tools/packages.config
283 |
284 | # Telerik's JustMock configuration file
285 | *.jmconfig
286 |
287 | # BizTalk build output
288 | *.btp.cs
289 | *.btm.cs
290 | *.odx.cs
291 | *.xsd.cs
292 |
293 |
--------------------------------------------------------------------------------
/BuildVersion/BuildVersion.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/BuildVersion/BuildVersion.exe
--------------------------------------------------------------------------------
/BuildVersion/BuildVersion.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # convoar
2 |
3 | * [Invocation](https://github.com/Misterblue/convoar#invocation)
4 | * [Building](https://github.com/Misterblue/convoar#building)
5 | * [Simple Build](https://github.com/Misterblue/convoar#simple-build)
6 | * [Library Updating Build](https://github.com/Misterblue/convoar#update-build)
7 | * [Docker Image](https://github.com/Misterblue/convoar#docker-image)
8 | * [What Is Converted](https://github.com/Misterblue/convoar#what-is-converted)
9 | * [Releases and Roadmap](https://github.com/Misterblue/convoar#releases-and-roadmap)
10 |
11 | Command line application for converting OpenSimulator OAR files into GLTF scene file.
12 |
13 | An [OpenSimulator] OAR file saves a region's contents.
14 | All the information about the region (parcels, terrain, etc.)
15 | is saved in an OAR file along with
16 | all the objects and their locations (prims, meshes, scripts, textures, etc.).
17 | Thus, an OAR file of a region is convertable into any other scene
18 | representation format.
19 |
20 | Convoar reads an OAR file and outputs a GLTF scene and image files
21 | which is most of the region information.
22 | Most specifically, it outputs the textured mesh representation of
23 | all the objects in the region.
24 |
25 | Convoar is evolving.
26 | See the "Releases and Roadmap" section below.
27 | The current version reads an OAR file and outputs either an unoptimized GLTF
28 | scene file or a "material reorganized" GLTF scene (see below).
29 | The output GLTF is not packed or binary
30 | so the output files are a JSON `.gltf` file, one or more `.buf` files
31 | (containing the vertex information), and an `images` directory with
32 | the texture files for the mesh materials. By default, the output textures
33 | are either JPG or PNG format depending if there is any transparency
34 | in the texture.
35 |
36 | The unoptimized GLTF conversion is a simple conversion of the OAR primitives
37 | which creates many, many meshes and is very inefficient for rendering but
38 | is good for editing (importing into [Blender], for instance).
39 |
40 | The "material reorganized" scene has objects corresponding to each
41 | unique material (texture/color/features) and the meshes have been
42 | assigned to each of these material objects.
43 | This renders the scene uneditable but this should greatly reduce
44 | the number of draw calls needed to render the scene in OpenGL/WebGL.
45 |
46 | Future versions of convoar with either contain or have tools to
47 | perform other optimizations to the scene and the object therein.
48 |
49 | The name "convoar" is from "convert oar" and is pronounced like "condor".
50 | There is a logo idea in there somewhere.
51 |
52 | # Invocation
53 |
54 | Checkout the convoar sources and run the prebuilt binary in the `dist` directory.
55 | The binaries are compiled for .NET Framework 4.8 so you must install that
56 | library version better on Windows10 or, if running on Linux, Mono v4.2.1
57 | or better.
58 |
59 | ```bash
60 | git clone https://github.com/Misterblue/convoar
61 | if Windows:
62 | convoar/dist/convoar.exe region.oar
63 | if Linux:
64 | mono convoar/dist/convoar.exe region.oar
65 | ```
66 |
67 | The full invocation form is:
68 |
69 | convoar inputOARfile
70 |
71 | A short list of the available parameters (a boolean parameter can be followed with
72 | a `true` or `false`):
73 |
74 | Parameter | Meaning
75 | ---------- | ----------
76 | `--mergeSharedMaterialMeshes` or `-m` | reorganize all meshes in the scene into groups using the same materials. This makes the scene uneditable but will make for way fewer draw calls when displayed.
77 | `--outputdir` or `-d` | directory for generated GLTF and image files. Default is `./convoar'.
78 | `--regionName` | Name to use for generated scene. Default is name of input OAR file.
79 | `--textureMaxSize` | Maximum size for textures. All images are resized to less than this dimension. Default is 256.
80 | `--halfRezTerrain` | Whether to reduce terrain resolution by two. Default is true.
81 | `--createTerrainSplat` | whether to create a terrain texture based on height. Default is true.
82 | `--verbose` or `-v` | Output information on numbers of meshes, etc.
83 | `--help` | list all available parameters with descriptions and default values
84 |
85 | An invocation of `convoar ../REGION.oar` will create, in the output directory,
86 | the files `REGION.gltf`, one or more `REGION-bufferNNN.buf` files, and an
87 | `images` directory containing .JPG and .PNG files. The GLTF file will reference
88 | the `images directory and the `.buf` files so the relative directory
89 | position of the `.buf and `images` files is significant.
90 |
91 | The output directory is changed with the `--outputdir` parameter.
92 |
93 | # Building
94 |
95 | Convoar uses [OpenSimulator] binaries to do the reading and conversion of the
96 | OAR file. These binaries files are included in the repository. So there is a *simple*
97 | build where one just builds the sources checked out, and there is the *updating* build
98 | where one fetches new versions of the [OpenSimulator] sources.
99 |
100 | Some functionality has been moved out into another project that must be
101 | checked out in the directory `addon-modules`.
102 | The script `setupConvoar.sh` fetches
103 | [HerbalCommonEntitiesCS] and [HerbalCommonUtilCS] into this directory
104 | and sets things up for compilation.
105 |
106 | If you have a current [OpenSimulator] build, you can use the binaries from
107 | that by setting the environment variable `OPENSIMBIN` to point to the
108 | `bin` directory in that build. See below.
109 |
110 | Under windows 10, use Visual Studio 2017 or better. At the moment, convoar is
111 | built under Windows to create the `dist` directory.
112 | The prebuilt binaries will run on Windows10 and with [Mono] on Linux.
113 | There are no external dependencies --
114 | everything is included in the Convoar GitHub repository.
115 |
116 | If compiling on Linux, one needs [Mono] version 5 or better and one
117 | just uses `msbuild`.
118 | So the steps are:
119 |
120 | ```
121 | git clone https://github.com/Misterblue/convoar
122 | cd convoar
123 | ./setupConvoar.sh
124 | msbuild # or open the .sln file with Visual Studio
125 | ```
126 |
127 | ## Updating Build
128 |
129 | To update the OpenSimulator sources, the script `gatherLibs.sh` fetches the
130 | required DLLs from other repositories. The other repositories must be cloned
131 | into the same directory as the convoar repository so the steps could be:
132 |
133 | ```
134 | git clone https://github.com/Misterblue/convoar
135 | cd convoar
136 | OPENSIMBIN=pathToOpenSimBinDir ./setupConvoar.sh
137 | msbuild # or open the .sln file with Visual Studio
138 |
139 | ```
140 |
141 | Then convoar can be built using either Visual Studio or `msbuild`.
142 |
143 | # Docker Image
144 |
145 | For those with Docker environments, there is a Docker image of convoar.
146 |
147 | Assume the OAR to be converted is at `/tmp/frog/REGION.oar`.
148 | Then, to do the conversion:
149 |
150 | ```bash
151 | docker pull misterblue/convoar
152 | docker run --rm --user $(id -u):$(id -g) -v /tmp/frog:/oar ghcr.io/misterblue/convoar REGION.oar
153 | ```
154 |
155 | This maps the local `/tmp/frog` directory to the `/oar` directory in
156 | the Docker container, runs the container, and writes the output GLTF files
157 | into the `/tmp/frog` directory.
158 |
159 | NOTE: the most common problem is permissions. The command above, sets the
160 | user and group IDs to that of the current user (the `--user` parameter)
161 | which is usually is the right thing for write permissions into the mapped directory.
162 |
163 | ALSO NOTE: `docker` does not automatically pull the newest image if
164 | there is a local image of the same name. You must do the `docker pull`
165 | operation to make sure you have the latest version of the image.
166 |
167 | # What Is Converted
168 |
169 | Convoar reads in the totality of the OAR file and then maps the various
170 | features of the scene into the GLTF definition. This mapping is incomplete.
171 | What follows is a list of features that are copied:
172 |
173 | * Scene
174 | * Primitives: converted to a mesh using PrimMesher using highest LOD setting
175 | * Sculptie: converted into a mesh using PrimMesher using highest LOD setting
176 | * Mesh: repackaged as a mesh. Mesh vertices and indices are deduplicated and repacked for GPU efficiency
177 | * Linksets: All meshes in a linkset are grouped into a GLTF group of meshes
178 | * Images: All images are converted into JPEG or PNG. PNG is used if there is any transparency in the image. The images are all resized to be less than `TextureMaxSize` on a side (default is 256);
179 | * Materials: mesh face info is converted into a material and the following attributes are copied:
180 | * face image
181 | * face color (RGBA)
182 | * transparency
183 | * bump
184 | * glow
185 | * shiny
186 | * two sided (parameter `DoubleSided`. Default is `false`)
187 | - Terrain: A mesh is created from the region heightmap. The mesh resolution is in meters (so a standard sized region would be 256x256 vertices) but a half size mesh (parameter `HalfRezTerrain` default is `true`) can be generated
188 |
189 | # Releases and Roadmap
190 |
191 | - [x] Release 1.0
192 | * basic OAR to GLTF conversion
193 | * material-centric optimization
194 | - [x] Release 1.1
195 | * cleaned up and debugged command line and Docker version
196 | - [x] Release 1.2
197 | * bug release -- trying to figure out why some JPEG2000 don't decomopress.
198 | - [x] Release 1.3 and after
199 | * bug releases and optimization experimentation before going to version 2
200 | - [x] Release 2.0
201 | * Rework of initial Convoar to create validated GLTF output
202 | - [ ] Release 3.0
203 | * option to include all prim information in `extras` (scripts, notes, etc.)
204 | * pipeline tools in Docker image for binary/DRACO packing of GLTF file
205 | * invocation options to select sub-regions of OAR region
206 | - [ ] Release 3.1
207 | * pipeline tools for scene optimizations (small mesh elimination, mesh decimation/simplification, etc.)
208 |
209 | [Convoar]: https://github.com/Misterblue/convoar
210 | [OpenSimulator]: http://opensimulator.org
211 | [Mono]: http://www.mono-project.com/
212 | [Blender]: https://www.blender.org/
213 | [HerbalCommonEntitiesCS]: https://github.com/Herbal3d/HerbalCommonEntitiesCS
214 | [HerbalCommonUtilCS]: https://github.com/Herbal3d/HerbalCommonUtilCS
215 |
216 |
--------------------------------------------------------------------------------
/ReleaseSteps.txt:
--------------------------------------------------------------------------------
1 | Convoar Release steps
2 |
3 | Until we plug into some build and release system, the
4 | steps to build and release convoar are:
5 |
6 | CREATE THE GITHUB PRE-COMPILED BINARIES
7 | =======================================
8 | Update VERSION
9 | Run ./setupConvoar.sh
10 | Open project in Visual Studio 2019+
11 | Verify compile target is "Release"
12 | Rebuild Solution
13 | Git commit all changed files (should be exe's and date files)
14 | Push new commit to Github
15 |
16 | CREATE THE DOCKER IMAGE
17 | ========================
18 | Log into Linux box with Docker installed
19 | Pull latest github sources
20 | cd convoar
21 | docker login # user herbal3d
22 | ./buildDocker.sh
23 |
24 |
25 |
--------------------------------------------------------------------------------
/THIRDPARTYLICENSES/InWorldz.PrimExporter:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "{}"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright {yyyy} {name of copyright owner}
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/THIRDPARTYLICENSES/LookingGlass.txt:
--------------------------------------------------------------------------------
1 | LookingGlass: http://lookingglassviewer.org
2 | https://github.com/Misterblue/LookingGlass-Viewer
3 |
4 | /* Copyright (c) Robert Adams
5 | * Redistribution and use in source and binary forms, with or without
6 | * modification, are permitted provided that the following conditions are met:
7 | * * Redistributions of source code must retain the above copyright
8 | * notice, this list of conditions and the following disclaimer.
9 | * * Redistributions in binary form must reproduce the above copyright
10 | * notice, this list of conditions and the following disclaimer in the
11 | * documentation and/or other materials provided with the distribution.
12 | * * The name of the copyright holder may not be used to endorse or promote products
13 | * derived from this software without specific prior written permission.
14 | *
15 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
16 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
19 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 | */
26 | // November 30, 2008
27 |
--------------------------------------------------------------------------------
/THIRDPARTYLICENSES/OpenSimulator:
--------------------------------------------------------------------------------
1 | Copyright (c) Contributors, http://opensimulator.org/
2 | See CONTRIBUTORS.TXT for a full list of copyright holders.
3 |
4 | Redistribution and use in source and binary forms, with or without
5 | modification, are permitted provided that the following conditions are met:
6 | * Redistributions of source code must retain the above copyright
7 | notice, this list of conditions and the following disclaimer.
8 | * Redistributions in binary form must reproduce the above copyright
9 | notice, this list of conditions and the following disclaimer in the
10 | documentation and/or other materials provided with the distribution.
11 | * Neither the name of the OpenSimulator Project nor the
12 | names of its contributors may be used to endorse or promote products
13 | derived from this software without specific prior written permission.
14 |
15 | THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
16 | IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18 | DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
21 | GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
23 | IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
24 | OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
25 | ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |
--------------------------------------------------------------------------------
/THIRDPARTYLICENSES/ParameterParse:
--------------------------------------------------------------------------------
1 | The parameter parsing and some logging code was derived from the
2 | DSGToolKit (https://github.com/intelvwi/DSGToolkit.git) which was
3 | published with the following license:
4 |
5 | /* -----------------------------------------------------------------
6 | * Copyright (c) 2013 Intel Corporation
7 | * All rights reserved.
8 | *
9 | * Redistribution and use in source and binary forms, with or without
10 | * modification, are permitted provided that the following conditions are
11 | * met:
12 | *
13 | * * Redistributions of source code must retain the above copyright
14 | * notice, this list of conditions and the following disclaimer.
15 | *
16 | * * Redistributions in binary form must reproduce the above
17 | * copyright notice, this list of conditions and the following
18 | * disclaimer in the documentation and/or other materials provided
19 | * with the distribution.
20 | *
21 | * * Neither the name of the Intel Corporation nor the names of its
22 | * contributors may be used to endorse or promote products derived
23 | * from this software without specific prior written permission.
24 | *
25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR
29 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 | * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 | * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 | * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 | * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 | * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 | *
37 | * EXPORT LAWS: THIS LICENSE ADDS NO RESTRICTIONS TO THE EXPORT LAWS OF
38 | * YOUR JURISDICTION. It is licensee's responsibility to comply with any
39 | * export regulations applicable in licensee's jurisdiction. Under
40 | * CURRENT (May 2000) U.S. export regulations this software is eligible
41 | * for export from the U.S. and can be downloaded by or otherwise
42 | * exported or reexported worldwide EXCEPT to U.S. embargoed destinations
43 | * which include Cuba, Iraq, Libya, North Korea, Iran, Syria, Sudan,
44 | * Afghanistan and any other country to which the U.S. has embargoed
45 | * goods and services.
46 | * -----------------------------------------------------------------
47 | */
48 |
--------------------------------------------------------------------------------
/THIRDPARTYLICENSES/Radegast:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/THIRDPARTYLICENSES/Radegast
--------------------------------------------------------------------------------
/THIRDPARTYLICENSES/libopenmetaverse:
--------------------------------------------------------------------------------
1 |
2 | Copyright (c) 2006-2016, openmetaverse.co
3 | All rights reserved.
4 |
5 | - Redistribution and use in source and binary forms, with or without
6 | modification, are permitted provided that the following conditions are met:
7 |
8 | - Redistributions of source code must retain the above copyright notice, this
9 | list of conditions and the following disclaimer.
10 | - Neither the name of the openmetaverse.co nor the names
11 | of its contributors may be used to endorse or promote products derived from
12 | this software without specific prior written permission.
13 |
14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
18 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
19 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
20 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
22 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
23 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24 | POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
/VERSION:
--------------------------------------------------------------------------------
1 | 2.0.6
2 |
--------------------------------------------------------------------------------
/bin/Mono.Addins.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/Mono.Addins.dll
--------------------------------------------------------------------------------
/bin/Nini.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/Nini.dll
--------------------------------------------------------------------------------
/bin/OpenMetaverse.Rendering.Meshmerizer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverse.Rendering.Meshmerizer.dll
--------------------------------------------------------------------------------
/bin/OpenMetaverse.StructuredData.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverse.StructuredData.dll
--------------------------------------------------------------------------------
/bin/OpenMetaverse.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverse.dll
--------------------------------------------------------------------------------
/bin/OpenMetaverse.dll.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/bin/OpenMetaverseTypes.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenMetaverseTypes.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Capabilities.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Capabilities.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Data.Null.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Data.Null.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Framework.Monitoring.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.Monitoring.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Framework.Serialization.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.Serialization.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Framework.Servers.HttpServer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.Servers.HttpServer.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Framework.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Region.CoreModules.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.CoreModules.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Region.Framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.Framework.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Region.PhysicsModule.BasicPhysics.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.PhysicsModule.BasicPhysics.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Region.PhysicsModules.SharedBase.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Region.PhysicsModules.SharedBase.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Services.Connectors.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Services.Connectors.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Services.Interfaces.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Services.Interfaces.dll
--------------------------------------------------------------------------------
/bin/OpenSim.Tests.Common.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/OpenSim.Tests.Common.dll
--------------------------------------------------------------------------------
/bin/PrimMesher.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/PrimMesher.dll
--------------------------------------------------------------------------------
/bin/SmartThreadPool.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/SmartThreadPool.dll
--------------------------------------------------------------------------------
/bin/log4net.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/log4net.dll
--------------------------------------------------------------------------------
/bin/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/nunit.framework.dll
--------------------------------------------------------------------------------
/bin/zlib.net.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/bin/zlib.net.dll
--------------------------------------------------------------------------------
/buildDocker.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 | # Script to build convoar Docker image.
3 | # Make user file 'VERSION' contains the latest version.
4 | # Make sure you are logged onto DockerHub before running this script.
5 | # Hacked version based on https://medium.com/travis-on-docker/how-to-version-your-docker-images-1d5c577ebf54
6 |
7 | DOCKERHUB_USER=herbal3d
8 | IMAGE=convoar
9 |
10 | # export TARGET=Release
11 | export TARGET=Debug
12 |
13 | if [[ ! -e "./VERSION" ]] ; then
14 | echo "No file named 'VERSION'. You might be in the wrong directory."
15 | echo "Run the build script in the base project directory."
16 | exit
17 | fi
18 | VERSION=$(cat VERSION)
19 |
20 | # Build the docker image of the latest git commited sources.
21 | DO_DOCKER_BUILD=yes
22 |
23 | # Push the built docker image to DockerHub.
24 | DO_DOCKERHUB_PUSH=yes
25 |
26 | if [[ "$DO_DOCKER_BUILD" == "yes" ]] ; then
27 | cd docker
28 | # docker build --build-arg TARGET=${TARGET} --build-arg VERSION=${VERSION} -t herbal3d/convoar .
29 | docker build --no-cache --build-arg TARGET=${TARGET} --build-arg VERSION=${VERSION} -t $DOCKERHUB_USER/convoar .
30 |
31 | docker tag $DOCKERHUB_USER/$IMAGE:latest $DOCKERHUB_USER/$IMAGE:$VERSION
32 | fi
33 |
34 | if [[ "$DO_DOCKERHUB_PUSH" == "yes" ]] ; then
35 | docker push $DOCKERHUB_USER/$IMAGE:latest
36 | docker push $DOCKERHUB_USER/$IMAGE:$VERSION
37 | fi
38 |
39 |
40 |
--------------------------------------------------------------------------------
/convoar.sln:
--------------------------------------------------------------------------------
1 | Microsoft Visual Studio Solution File, Format Version 12.00
2 | # Visual Studio Version 17
3 | VisualStudioVersion = 17.1.32328.378
4 | MinimumVisualStudioVersion = 10.0.40219.1
5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "convoar", "convoar\convoar.csproj", "{BD9942A1-315C-4961-B56A-D1770BED83B0}"
6 | EndProject
7 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Herbal3d.CommonEntities", "addon-modules\HerbalCommonEntitiesCS\CommonEntities\Herbal3d.CommonEntities.csproj", "{1267952C-0000-0000-0000-000000000000}"
8 | EndProject
9 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Herbal3d.CommonEntitiesConv", "addon-modules\HerbalCommonEntitiesCS\CommonEntitiesConv\Herbal3d.CommonEntitiesConv.csproj", "{CE3D1850-0000-0000-0000-000000000000}"
10 | EndProject
11 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Herbal3d.CommonUtil", "addon-modules\HerbalCommonUtilCS\Herbal3d.CommonUtil.csproj", "{C0DFAC61-6999-4278-855F-0E9BCA2E8625}"
12 | EndProject
13 | Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{7077C142-D972-47D8-BE14-E5417159747E}"
14 | ProjectSection(SolutionItems) = preProject
15 | bin\libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so = bin\libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
16 | bin\openjpeg-dotnet-x86_64.dll = bin\openjpeg-dotnet-x86_64.dll
17 | bin\openjpeg-dotnet.dll = bin\openjpeg-dotnet.dll
18 | EndProjectSection
19 | EndProject
20 | Global
21 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
22 | Debug|Any CPU = Debug|Any CPU
23 | Debug|x64 = Debug|x64
24 | Release|Any CPU = Release|Any CPU
25 | Release|x64 = Release|x64
26 | EndGlobalSection
27 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
28 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
29 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
30 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|x64.ActiveCfg = Debug|x64
31 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Debug|x64.Build.0 = Debug|x64
32 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
33 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|Any CPU.Build.0 = Release|Any CPU
34 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|x64.ActiveCfg = Release|x64
35 | {BD9942A1-315C-4961-B56A-D1770BED83B0}.Release|x64.Build.0 = Release|x64
36 | {1267952C-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
37 | {1267952C-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
38 | {1267952C-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
39 | {1267952C-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
40 | {1267952C-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
41 | {1267952C-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
42 | {1267952C-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
43 | {1267952C-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
44 | {CE3D1850-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
45 | {CE3D1850-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU
46 | {CE3D1850-0000-0000-0000-000000000000}.Debug|x64.ActiveCfg = Debug|Any CPU
47 | {CE3D1850-0000-0000-0000-000000000000}.Debug|x64.Build.0 = Debug|Any CPU
48 | {CE3D1850-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU
49 | {CE3D1850-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU
50 | {CE3D1850-0000-0000-0000-000000000000}.Release|x64.ActiveCfg = Release|Any CPU
51 | {CE3D1850-0000-0000-0000-000000000000}.Release|x64.Build.0 = Release|Any CPU
52 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
53 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|Any CPU.Build.0 = Debug|Any CPU
54 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|x64.ActiveCfg = Debug|Any CPU
55 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Debug|x64.Build.0 = Debug|Any CPU
56 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|Any CPU.ActiveCfg = Release|Any CPU
57 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|Any CPU.Build.0 = Release|Any CPU
58 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|x64.ActiveCfg = Release|Any CPU
59 | {C0DFAC61-6999-4278-855F-0E9BCA2E8625}.Release|x64.Build.0 = Release|Any CPU
60 | EndGlobalSection
61 | GlobalSection(SolutionProperties) = preSolution
62 | HideSolutionNode = FALSE
63 | EndGlobalSection
64 | GlobalSection(ExtensibilityGlobals) = postSolution
65 | SolutionGuid = {5A7B81A2-9EFD-4287-852D-38E31437A820}
66 | EndGlobalSection
67 | EndGlobal
68 |
--------------------------------------------------------------------------------
/convoar/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/convoar/Convoar.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2022 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Linq;
19 | using System.IO;
20 | using System.Reflection;
21 | using System.Text;
22 | using System.Threading;
23 | using System.Threading.Tasks;
24 |
25 | using OpenSim.Services.Interfaces;
26 |
27 | using org.herbal3d.cs.CommonEntities;
28 | using org.herbal3d.cs.CommonUtil;
29 |
30 | namespace org.herbal3d.convoar {
31 |
32 | // Class passed around for global context for this region module instance.
33 | // NOT FOR PASSING DATA! Only used for global resources like logging, configuration
34 | // parameters, statistics, and the such.
35 | public class GlobalContext {
36 | public ConvoarParams parms;
37 | public ConvoarStats stats;
38 | public BLogger log;
39 | public string contextName; // a unique identifier for this context -- used in filenames, ...
40 | public string version;
41 | public string versionLong;
42 | public string buildDateShort;
43 | public string gitCommit;
44 |
45 | public GlobalContext()
46 | {
47 | stats = null;
48 | contextName = String.Empty;
49 | version = VersionInfo.appVersion;
50 | buildDateShort = VersionInfo.buildDate;
51 | versionLong = VersionInfo.longVersion;
52 | }
53 | }
54 |
55 | class ConvOAR {
56 | private static readonly string _logHeader = "[ConvOAR]";
57 |
58 | public static GlobalContext Globals;
59 |
60 | string _outputDir;
61 |
62 | private string Invocation() {
63 | StringBuilder buff = new StringBuilder();
64 | buff.AppendLine("Invocation: convoar inputOARfile");
65 | buff.AppendLine(" Possible parameters are (negate bool parameters by prepending 'no'):");
66 | string[] paramDescs = Globals.parms.ListParameters().Select(kvp => { return kvp.Key + ": " + kvp.Value; }).ToArray();
67 | buff.AppendLine(String.Join(Environment.NewLine, paramDescs));
68 | return buff.ToString();
69 | }
70 |
71 | static void Main(string[] args) {
72 | ConvOAR prog = new ConvOAR();
73 | CancellationToken cancelToken = new CancellationToken();
74 | prog.Start(cancelToken, args).Wait();
75 | return;
76 | }
77 |
78 | // If run from the command line, create instance and call 'Start' with args.
79 | // If run programmatically, create instance and call 'Start' with parameters.
80 | public async Task Start(CancellationToken cancelToken, string[] args) {
81 | var parms = new ConvoarParams();
82 | var logger = new BLoggerNLog(parms.LogFilename, parms.LogToConsole, parms.LogToFiles);
83 | // var logger = new LoggerLog4Net(),
84 | // var logger = new LoggerConsole(),
85 |
86 | Globals = new GlobalContext() {
87 | log = logger,
88 | stats = new ConvoarStats(),
89 | parms = parms,
90 | };
91 |
92 | // A single parameter of '--help' outputs the invocation parameters
93 | if (args.Length > 0 && args[0] == "--help") {
94 | System.Console.Write(Invocation());
95 | return;
96 | }
97 |
98 | // 'ConvoarParams' initializes to default values.
99 | // Over ride default values with command line parameters.
100 | try {
101 | // Note that trailing parameters will be put into "InputOAR" parameter
102 | Globals.parms.MergeCommandLine(args, null, "InputOAR");
103 | }
104 | catch (Exception e) {
105 | Globals.log.Error("ERROR: bad parameters: " + e.Message);
106 | Globals.log.Error(Invocation());
107 | return;
108 | }
109 |
110 | if (Globals.parms.Verbose) {
111 | Globals.log.SetLogLevel(LogLevels.Debug);
112 | }
113 |
114 | if (!Globals.parms.Quiet) {
115 | System.Console.WriteLine("Convoar " + Globals.versionLong);
116 | System.Console.WriteLine(" using Herbal3d.CommonEntities " + org.herbal3d.cs.CommonEntities.VersionInfo.longVersion);
117 | System.Console.WriteLine(" using Herbal3d.CommonEntitiesConv " + org.herbal3d.cs.CommonEntitiesConv.VersionInfo.longVersion);
118 | System.Console.WriteLine(" using Herbal3d.CommonUtil " + org.herbal3d.cs.CommonUtil.VersionInfo.longVersion);
119 | }
120 |
121 | // Validate parameters
122 | if (String.IsNullOrEmpty(Globals.parms.InputOAR)) {
123 | Globals.log.Error("An input OAR file must be specified");
124 | Globals.log.Error(Invocation());
125 | return;
126 | }
127 | if (String.IsNullOrEmpty(Globals.parms.OutputDir)) {
128 | _outputDir = "./out";
129 | Globals.log.Debug("Output directory defaulting to {0}", _outputDir);
130 | }
131 |
132 | // Base asset storage system -- 'MemAssetService' is in-memory storage
133 | using (MemAssetService memAssetService = new MemAssetService()) {
134 |
135 | // 'assetManager' is the asset cache and fetching code -- where all the mesh,
136 | // material, and instance information is stored for later processing.
137 | using (AssetManager assetManager = new AssetManager(memAssetService, Globals.log, Globals.parms.OutputDir)) {
138 |
139 | try {
140 | BScene bScene = await LoadOAR(memAssetService, assetManager);
141 |
142 | Globals.contextName = bScene.name;
143 |
144 | Globals.log.Debug("{0} Scene created. name={1}, instances={2}",
145 | _logHeader, bScene.name, bScene.instances.Count);
146 | Globals.log.Debug("{0} num assetFetcher.images={1}", _logHeader, assetManager.Assets.Images.Count);
147 | Globals.log.Debug("{0} num assetFetcher.materials={1}", _logHeader, assetManager.Assets.Materials.Count);
148 | Globals.log.Debug("{0} num assetFetcher.meshes={1}", _logHeader, assetManager.Assets.Meshes.Count);
149 | Globals.log.Debug("{0} num assetFetcher.renderables={1}", _logHeader, assetManager.Assets.Renderables.Count);
150 |
151 | if (ConvOAR.Globals.parms.TerrainOnly) {
152 | ConvOAR.Globals.log.Debug("{0} Clearing out scene so there's only terrain (TerrainOnly)", _logHeader);
153 | bScene.instances.Clear();
154 | bScene.instances.Add(bScene.terrainInstance);
155 | }
156 |
157 | /*
158 | // Perform any optimizations on the scene and its instances
159 | if (Globals.parms.P("DoMeshSimplification")) {
160 | // TODO:
161 | }
162 | if (Globals.parms.P("DoSceneOptimizations")) {
163 | using (BSceneManipulation optimizer = new BSceneManipulation()) {
164 | bScene = optimizer.OptimizeScene(bScene);
165 | Globals.log.DebugFormat("{0} merged BScene. numInstances={1}", _logHeader, bScene.instances.Count);
166 | }
167 | }
168 | */
169 | if (Globals.parms.MergeSharedMaterialMeshes) {
170 | // using (BSceneManipulation optimizer = new BSceneManipulation(Globals.log, Globals.parms)) {
171 | var manipParams = new ParamBlock(new Dictionary {
172 | { "SeparateInstancedMeshes", false },
173 | { "MergeSharedMaterialMeshes", false },
174 | { "MeshShareThreshold", 5 }
175 |
176 | });
177 | using (BSceneManipulation optimizer = new BSceneManipulation(Globals.log, manipParams)) {
178 | bScene = optimizer.RebuildSceneBasedOnSharedMeshes(bScene);
179 | Globals.log.Debug("{0} merged meshes in scene. numInstances={1}", _logHeader, bScene.instances.Count);
180 | }
181 | }
182 |
183 | // Output the transformed scene as Gltf version 2
184 | GltfB gltf = new GltfB(bScene.name, Globals.log, new gltfParamsB() {
185 | inputOAR = Globals.parms.InputOAR,
186 | uriBase = Globals.parms.URIBase,
187 | verticesMaxForBuffer = Globals.parms.VerticesMaxForBuffer,
188 | gltfCopyright = Globals.parms.GltfCopyright,
189 | addUniqueCodes = Globals.parms.AddUniqueCodes,
190 | doubleSided = Globals.parms.DoubleSided,
191 | textureMaxSize = Globals.parms.TextureMaxSize,
192 | logBuilding = Globals.parms.LogBuilding,
193 | logGltfBuilding = Globals.parms.LogGltfBuilding,
194 | versionLong = Globals.versionLong
195 | });
196 |
197 | try {
198 | gltf.LoadScene(bScene);
199 |
200 | Globals.log.Debug("{0} num Gltf.nodes={1}", _logHeader, gltf.nodes.Count);
201 | Globals.log.Debug("{0} num Gltf.meshes={1}", _logHeader, gltf.meshes.Count);
202 | Globals.log.Debug("{0} num Gltf.materials={1}", _logHeader, gltf.materials.Count);
203 | Globals.log.Debug("{0} num Gltf.images={1}", _logHeader, gltf.images.Count);
204 | Globals.log.Debug("{0} num Gltf.accessor={1}", _logHeader, gltf.accessors.Count);
205 | Globals.log.Debug("{0} num Gltf.buffers={1}", _logHeader, gltf.buffers.Count);
206 | Globals.log.Debug("{0} num Gltf.bufferViews={1}", _logHeader, gltf.bufferViews.Count);
207 | }
208 | catch (Exception e) {
209 | Globals.log.Error("{0} Exception loading GltfScene: {1}", _logHeader, e);
210 | }
211 |
212 | try {
213 | if (gltf.scenes.Count > 0) {
214 | string gltfFilename = gltf.GetFilename(gltf.IdentifyingString);
215 | using (var outm = new MemoryStream()) {
216 | using (var outt = new StreamWriter(outm)) {
217 | gltf.ToJSON(outt);
218 | }
219 | await assetManager.AssetStorage.Store(gltfFilename, outm.ToArray());
220 | }
221 | gltf.WriteBinaryFiles(assetManager.AssetStorage);
222 |
223 | if (Globals.parms.ExportTextures) {
224 | gltf.WriteImages(assetManager.AssetStorage);
225 | }
226 | }
227 | else {
228 | Globals.log.Error("{0} Not writing out GLTF because no scenes", _logHeader);
229 | }
230 | }
231 | catch (Exception e) {
232 | Globals.log.Error("{0} Exception writing GltfScene: {1}", _logHeader, e);
233 | }
234 |
235 | /*
236 | // Output all the instances in the scene as individual GLTF files
237 | if (Globals.parms.P("ExportIndividualGltf")) {
238 | bScene.instances.ForEach(instance => {
239 | string instanceName = instance.handle.ToString();
240 | Gltf gltf = new Gltf(instanceName);
241 | gltf.persist.baseDirectory = bScene.name;
242 | // gltf.persist.baseDirectory = PersistRules.JoinFilePieces(bScene.name, instanceName);
243 | GltfScene gltfScene = new GltfScene(gltf, instanceName);
244 | gltf.defaultScene = gltfScene;
245 |
246 | Displayable rootDisp = instance.Representation;
247 | GltfNode rootNode = GltfNode.GltfNodeFactory(gltf, gltfScene, rootDisp, assetFetcher);
248 | rootNode.translation = instance.Position;
249 | rootNode.rotation = instance.Rotation;
250 |
251 | gltf.BuildAccessorsAndBuffers();
252 | gltf.UpdateGltfv2ReferenceIndexes();
253 |
254 | // After the building, get rid of the default scene name as we're not outputting a scene
255 | gltf.defaultScene = null;
256 |
257 | PersistRules.ResolveAndCreateDir(gltf.persist.filename);
258 |
259 | using (StreamWriter outt = File.CreateText(gltf.persist.filename)) {
260 | gltf.ToJSON(outt);
261 | }
262 | gltf.WriteBinaryFiles();
263 |
264 | if (Globals.parms.P("ExportTextures")) {
265 | gltf.WriteImages();
266 | }
267 | });
268 | }
269 | */
270 | }
271 | catch (Exception e) {
272 | Globals.log.Error("{0} Global exception converting scene: {1}", _logHeader, e);
273 | // A common error is not having all the DLLs for OpenSimulator. Print out what's missing.
274 | if (e is ReflectionTypeLoadException refE) {
275 | foreach (var ee in refE.LoaderExceptions) {
276 | Globals.log.Error("{0} reference exception: {1}", _logHeader, ee);
277 | }
278 | }
279 | }
280 | }
281 | }
282 | }
283 |
284 | // Initialization if using ConvOAR programmatically.
285 | public void Start(ConvoarParams pParameters, BLogger pLogger) {
286 | Globals = new GlobalContext() {
287 | log = pLogger,
288 | parms = pParameters,
289 | stats = new ConvoarStats()
290 | };
291 | }
292 |
293 | // Load the OARfile specified in Globals.params.InputOAR.
294 | // Parameters are in 'ConvOAR.Globals.params'.
295 | // For the moment, the OAR file must be specified with a string because of how OpenSimulator
296 | // processes the input files. Note that the filename can be an 'http:' type URL.
297 | public async Task LoadOAR(IAssetService assetService, AssetManager assetManager) {
298 | BScene ret = null;
299 |
300 | try {
301 | OarConverter converter = new OarConverter(Globals.log, Globals.parms);
302 | ret = await converter.ConvertOarToScene(assetService, assetManager);
303 | }
304 | catch (Exception e) {
305 | ConvOAR.Globals.log.Error("{0} LoadOAR exception: {1}", _logHeader, e);
306 | throw (e);
307 | }
308 | return ret;
309 | }
310 |
311 | }
312 | }
313 |
--------------------------------------------------------------------------------
/convoar/ConvoarParams.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2016 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | /*
17 | * Some code covered by: Copyright (c) Contributors, http://opensimulator.org/
18 | */
19 |
20 | using System;
21 | using System.Collections.Generic;
22 | using System.Reflection;
23 | using System.Text;
24 |
25 | using org.herbal3d.cs.CommonUtil;
26 |
27 | using OMV = OpenMetaverse;
28 |
29 | namespace org.herbal3d.convoar {
30 | public class ConfigParam : Attribute {
31 | public ConfigParam(string name, Type valueType, string desc = "", string alt = null) {
32 | this.name = name;
33 | this.valueType = valueType;
34 | this.desc = desc;
35 | this.alt = alt;
36 | }
37 | public string name;
38 | public Type valueType;
39 | public string desc;
40 | public string alt;
41 | }
42 |
43 | public class ConvoarParams {
44 |
45 | public ConvoarParams() {
46 | }
47 |
48 | // ========== General Input and Output Parameters
49 | [ConfigParam(name: "InputOAR", valueType: typeof(string), desc: "Input OAR file", alt: "i")]
50 | public string InputOAR = null;
51 | [ConfigParam(name: "OutputDir", valueType: typeof(string), desc: "Directory (relative to current dir) to store output files", alt: "d")]
52 | public string OutputDir = "./convoar";
53 | [ConfigParam(name: "URIBase", valueType: typeof(string), desc: "String added to the beginning of asset name to create URI")]
54 | public string URIBase = "";
55 | [ConfigParam(name: "UseReadableFilenames", valueType: typeof(bool), desc: "Whether filenames should be human readable or UUIDs")]
56 | public bool UseReadableFilenames = true;
57 | [ConfigParam(name: "UseDeepFilenames", valueType: typeof(bool), desc: "Whether filenames organized into deep directory structure")]
58 | public bool UseDeepFilenames = false;
59 | [ConfigParam(name: "WriteBinaryGltf", valueType: typeof(bool), desc: "Whether to write .gltf or .glb file")]
60 | public bool WriteBinaryGltf = false;
61 |
62 | // ========== OAR Reading Specific Parameters"
63 | [ConfigParam(name: "ConvoarID", valueType: typeof(string), desc: "GUID for 'convoar' identity (used for CreatorID, ...)")]
64 | public string ConvoarID = "e67a2ff8-597d-4f03-b559-930aeaf4836b";
65 | [ConfigParam(name: "RegionName", valueType: typeof(string), desc: "Name to use for the region (default generated from OAR filename)")]
66 | public string RegionName = String.Empty;
67 | [ConfigParam(name: "Displacement", valueType: typeof(OMV.Vector3), desc: "Optional displacement to add to OAR entities")]
68 | public OMV.Vector3 Displacement = OMV.Vector3.Zero;
69 | [ConfigParam(name: "Rotation", valueType: typeof(float), desc: "Optional rotation to add to OAR entities")]
70 | public float Rotation = 0;
71 | [ConfigParam(name: "SubRegion", valueType: typeof(string), desc: "Bounds of subregion to export. upper-right to lower-left as (X,Y,Z,X,Y,Z). Whole region if empty or null")]
72 | public string SubRegion = null;
73 |
74 | // ========== Optimizations
75 | [ConfigParam(name: "MergeSharedMaterialMeshes", valueType: typeof(bool), desc: "whether to merge meshes with similar materials", alt: "m")]
76 | public bool MergeSharedMaterialMeshes = false;
77 | [ConfigParam(name: "UseOpenJPEG", valueType: typeof(bool), desc: "Use OpenJPEG to decode JPEG2000 images. Alternative is CSJ2K")]
78 | public bool UseOpenJPEG = true;
79 |
80 | /*
81 | [ConfigParam(name: "DoMeshSimplification", valueType: typeof(bool), desc: "pass over all the meshes and simplify if needed")]
82 | public bool DoMeshSimplification = true;
83 | [ConfigParam(name: "DoSceneOptimizations", valueType: typeof(bool), desc: "optimize the instances in the scene")]
84 | public bool DoSceneOptimizations = true;
85 | [ConfigParam(name: "SeparateInstancedMeshes", valueType: typeof(bool), desc: "whether to find instanced meshes and not do shared meshes with them")]
86 | public bool SeparateInstancedMeshes = true;
87 | [ConfigParam(name:"MeshShareThreshold", valueType: typeof(int), desc: "meshes used more than this many times are not material combined")]
88 | public int MeshShareThreshold = 5;
89 | [ConfigParam(name: "CreateStaticLayer", valueType: typeof(bool), desc: "whether to merge meshes with similar materials in static objects")]
90 | public bool CreateStaticLayer = false;
91 | [ConfigParam(name: "CreateDynamicLayer", valueType: typeof(bool), desc: "whether to merge meshes within non-static entities ")]
92 | public bool CreateDynamicLayer = false;
93 | */
94 |
95 | // ========== Export Parameters
96 | [ConfigParam(name: "TerrainOnly", valueType: typeof(bool), desc: "Only create and output the terrain and terrain texture")]
97 | public bool TerrainOnly = false;
98 | [ConfigParam(name: "GltfCopyright", valueType: typeof(string), desc: "Copyright notice embedded into generated GLTF files")]
99 | public string GltfCopyright = "Copyright 2022. All rights reserved";
100 | [ConfigParam(name: "ExportTextures", valueType: typeof(bool), desc: "Convert textures to PNGs and export to target dir")]
101 | public bool ExportTextures = true;
102 | [ConfigParam(name: "TexturesDir", valueType: typeof(string), desc: "sub-directory for all the image files")]
103 | public string TexturesDir = "images";
104 | [ConfigParam(name: "TextureMaxSize", valueType: typeof(int), desc: "The maximum size of textures for a simple export")]
105 | public int TextureMaxSize = 256;
106 | [ConfigParam(name: "PreferredTextureFormat", valueType: typeof(string), desc: "One of: PNG, JPG, GIF, BMP")]
107 | public string PreferredTextureFormat = "PNG";
108 | [ConfigParam(name: "PreferredTextureFormatIfNoTransparency", valueType: typeof(string), desc: "One of: PNG, JPG, GIF, BMP")]
109 | public string PreferredTextureFormatIfNoTransparency = "JPG";
110 | [ConfigParam(name: "VerticesMaxForBuffer", valueType: typeof(int), desc: "Number of vertices to cause splitting of buffer files")]
111 | public int VerticesMaxForBuffer = 50000;
112 | [ConfigParam(name: "DisplayTimeScaling", valueType: typeof(bool), desc: "If to delay mesh scaling to display/GPU time")]
113 | public bool DisplayTimeScaling = false;
114 | [ConfigParam(name: "DoubleSided", valueType: typeof(bool), desc: "specify whether double sided mesh rendering")]
115 | public bool DoubleSided = false;
116 | [ConfigParam(name: "AddUniqueCodes", valueType: typeof(bool), desc: "Add an extras.unique value to some GLTF objects as a unique hash")]
117 | public bool AddUniqueCodes = true;
118 |
119 | // ========== Terrain Generation Parameters
120 | [ConfigParam(name: "AddTerrainMesh", valueType: typeof(bool), desc: "whether to create and add a terrain mesh")]
121 | public bool AddTerrainMesh = true;
122 | [ConfigParam(name: "HalfRezTerrain", valueType: typeof(bool), desc: "Whether to reduce the terrain resolution by 2")]
123 | public bool HalfRezTerrain = true;
124 | [ConfigParam(name: "CreateTerrainSplat", valueType: typeof(bool), desc: "whether to generate a terrain mesh splat texture")]
125 | public bool CreateTerrainSplat = true;
126 |
127 | // ========== Debugging
128 | [ConfigParam(name: "Quiet", valueType: typeof(bool), desc: "supress as much informational output as possible", alt: "q")]
129 | public bool Quiet = false;
130 | [ConfigParam(name: "Verbose", valueType: typeof(bool), desc: "enable DEBUG information logging", alt: "v")]
131 | public bool Verbose = false;
132 | [ConfigParam(name: "LogToConsole", valueType: typeof(bool), desc: "Whether to also output logs to console")]
133 | public bool LogToConsole = true;
134 | [ConfigParam(name: "LogToFile", valueType: typeof(bool), desc: "Whether to output logs to files")]
135 | public bool LogToFiles = false;
136 | [ConfigParam(name: "LogFilename", valueType: typeof(string), desc: "Base filename of log files")]
137 | public string LogFilename = "Logs/convoar.log";
138 | [ConfigParam(name: "LogBuilding", valueType: typeof(bool), desc: "log detailed BScene/BInstance object building")]
139 | public bool LogBuilding = false;
140 | [ConfigParam(name: "LogGltfBuilding", valueType: typeof(bool), desc: "log detailed Gltf object building")]
141 | public bool LogGltfBuilding = false;
142 |
143 | // Find the parameter definition and return the config info and the field info
144 | // Returns 'true' of the parameter is found. False otherwise.
145 | public bool TryGetParameterInfo(string pName, out ConfigParam pConfigParam, out FieldInfo pFieldInfo) {
146 | var lName = pName.ToLower();
147 | foreach (FieldInfo fi in this.GetType().GetFields()) {
148 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) {
149 | ConfigParam cp = attr as ConfigParam;
150 | if (cp != null) {
151 | if (cp.name.ToLower() == lName || (cp.alt != null && cp.alt == lName)) {
152 | pConfigParam = cp;
153 | pFieldInfo = fi;
154 | return true;
155 | }
156 | }
157 | }
158 | }
159 | pConfigParam = null;
160 | pFieldInfo = null;
161 | return false;
162 | }
163 |
164 | // Return a string version of a particular parameter value
165 | public string GetParameterValue(string pName) {
166 | var ret = String.Empty;
167 | foreach (FieldInfo fi in this.GetType().GetFields()) {
168 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) {
169 | ConfigParam cp = attr as ConfigParam;
170 | if (cp != null) {
171 | if (cp.name == pName) {
172 | var val = fi.GetValue(this);
173 | if (val != null) {
174 | ret = val.ToString();
175 | }
176 | break;
177 | }
178 | }
179 | }
180 | if (ret != String.Empty) {
181 | break;
182 | }
183 | }
184 | return ret;
185 | }
186 | // Set a parameter value
187 | public bool SetParameterValue(string pName, string pVal) {
188 | var ret = false;
189 | foreach (FieldInfo fi in this.GetType().GetFields()) {
190 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) {
191 | ConfigParam cp = attr as ConfigParam;
192 | if (cp != null) {
193 | if (cp.name == pName) {
194 | fi.SetValue(this, ParamBlock.ConvertToObj(cp.valueType, pVal));
195 | ret = true;
196 | break;
197 | }
198 | }
199 | }
200 | if (ret) {
201 | break;
202 | }
203 | }
204 | return ret;
205 | }
206 | // Return a list of all the parameters and their descriptions
207 | public Dictionary ListParameters() {
208 | var ret = new Dictionary();
209 | foreach (FieldInfo fi in this.GetType().GetFields()) {
210 | foreach (Attribute attr in Attribute.GetCustomAttributes(fi)) {
211 | ConfigParam cp = attr as ConfigParam;
212 | if (cp != null) {
213 | ret.Add(cp.name, cp.desc);
214 | }
215 | }
216 | }
217 | return ret;
218 | }
219 |
220 | public void MergeCommandLine(string[] args) {
221 | MergeCommandLine(args, null, null);
222 | }
223 |
224 | // Given parameters from the command line, read the parameters and set values specified
225 | // array of command line tokens
226 | // if 'true' presume the first token in the parameter line
227 | // is a special value that should be assigned to the keyword "--firstparam".
228 | // if 'true' presume multiple specs at the end of the line
229 | // are filenames and pack them together into a CSV string in LAST_PARAM.
230 | public bool MergeCommandLine(string[] args, string firstOpParameter, string multipleLastParameters) {
231 | bool ret = true; // start out assuming parsing worked
232 |
233 | bool firstOpFlag = false; // no first op
234 | if (!String.IsNullOrEmpty(firstOpParameter)) {
235 | firstOpFlag = true;
236 | }
237 | bool multipleLast = false;
238 | if (!String.IsNullOrEmpty(multipleLastParameters)) {
239 | multipleLast = true;
240 | }
241 |
242 | for (int ii = 0; ii < args.Length; ii++) {
243 | string para = args[ii];
244 | // is this a parameter?
245 | if (para[0] == '-') {
246 | ii += AddCommandLineParameter(para, (ii==(args.Length-1)) ? null : args[ii + 1]);
247 | }
248 | else {
249 | if (ii == 0 && firstOpFlag) {
250 | // if the first thing is not a parameter, make like it's an op or something
251 | ii += AddCommandLineParameter(firstOpParameter, args[ii + 1]);
252 | }
253 | else {
254 | if (multipleLast) {
255 | // Pack all remaining arguments into a comma-separated list as LAST_PARAM
256 | StringBuilder multFiles = new StringBuilder();
257 | for (int jj = ii; jj < args.Length; jj++) {
258 | if (multFiles.Length != 0) {
259 | multFiles.Append(",");
260 | }
261 | multFiles.Append(args[jj]);
262 | }
263 | AddCommandLineParameter(multipleLastParameters, multFiles.ToString());
264 |
265 | // Skip them all
266 | ii = args.Length;
267 | }
268 | else {
269 | throw new ArgumentException("Unknown parameter " + para);
270 | }
271 | }
272 | }
273 | }
274 |
275 | return ret;
276 | }
277 |
278 | // Store the value for the parameter.
279 | // If we accept the value as a good value for the parameter, return 1 else 0.
280 | // A 'good value' is one that does not start with '-' or is not after a boolean parameter.
281 | // Return the number of parameters to advance the parameter line. That means, return
282 | // a zero of we didn't used the next parameter and a 1 if the next parameter
283 | // was used as a value so don't consider it the next parameter.
284 | private int AddCommandLineParameter(string pParm, string val) {
285 | // System.Console.WriteLine(String.Format("AddCommandLineParameter: parm={0}, val={1}", pParm, val));
286 | int ret = 1; // start off assuming the next token is the value we're setting
287 | string parm = pParm.ToLower();
288 | // Strip leading hyphens
289 | while (parm[0] == '-') {
290 | parm = parm.Substring(1);
291 | }
292 |
293 | // If the boolean parameter starts with "no", turn it off rather than on.
294 | string positiveAssertion = "true";
295 | if (parm.Length > 2 && parm[0] == 'n' && parm[1] == 'o') {
296 | string maybeParm = parm.Substring(2);
297 | if (TryGetParameterInfo(parm, out ConfigParam bcp, out FieldInfo bfi)) {
298 | if (bcp.valueType == typeof(Boolean)) {
299 | // The parameter without the 'no' exists and is a boolean
300 | positiveAssertion = "false";
301 | parm = maybeParm;
302 | }
303 | }
304 | }
305 |
306 | // If the next token starts with a parameter mark, it's not really a value
307 | if (val == null) {
308 | ret = 0; // the next token is not used here to set the value
309 | }
310 | else {
311 | if (val[0] == '-') {
312 | val = null; // don't use the next token as a value
313 | ret = 0; // the next token is not used here to set the value
314 | }
315 | }
316 |
317 | if (TryGetParameterInfo(parm, out ConfigParam cp, out FieldInfo fi)) {
318 | // If the parameter is a boolean type and the next value is not a parameter,
319 | // don't try to take up the next value.
320 | // This handles boolean flags.
321 | // If there is a value next (val != null) and that value is not the
322 | // values 'true' or 'false' or 't' or 'f', then ignore the next value
323 | // as not belonging to this flag. THis allows (and the logic above)
324 | // allows:
325 | // "--flag --otherFlag ...",
326 | // "--flag something ...",
327 | // "--flag true --otherFlag ...",
328 | // "--noflag --otherflag ...",
329 | // etc
330 | if (cp.valueType == typeof(Boolean)) {
331 | if (val != null) {
332 | string valL = val.ToLower();
333 | if (valL != "true" && valL != "t" && valL != "false" && valL != "f") {
334 | // The value is not associated with this boolean so ignore it
335 | val = null; // don't use the val token
336 | ret = 0; // the next token is not used here to set the value
337 | }
338 | }
339 | if (val == null) {
340 | // If the value is assumed, use the value based on the optional 'no'
341 | val = positiveAssertion;
342 | }
343 | }
344 | // Set the named parameter to the passed value
345 | fi.SetValue(this, ParamBlock.ConvertToObj(cp.valueType, val));
346 | }
347 | else {
348 | throw new ArgumentException("Unknown parameter " + parm);
349 | }
350 | return ret;
351 | }
352 | }
353 | }
354 |
--------------------------------------------------------------------------------
/convoar/ConvoarStats.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2016 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | using System;
18 | using System.Text;
19 | using System.Collections.Generic;
20 |
21 | using log4net;
22 |
23 | using OpenSim.Region.Framework.Scenes;
24 |
25 | using OMV = OpenMetaverse;
26 | using OMVR = OpenMetaverse.Rendering;
27 |
28 | namespace org.herbal3d.convoar {
29 | public class ConvoarStats {
30 |
31 | public int numSimplePrims = 0;
32 | public int numMeshAssets = 0;
33 | public int numSculpties = 0;
34 |
35 |
36 | public Scene m_scene;
37 | #pragma warning disable 414
38 | private static readonly string _logHeader = "[Stats]";
39 | #pragma warning restore 414
40 |
41 | public ConvoarStats() {
42 | }
43 |
44 | /* TODO: figure out what statistics are wanted
45 | // Gather statistics
46 | public void ExtractStatistics(BasilModule.ReorganizedScene reorgScene) {
47 | staticStats = StatsFromEntityGroupList("static", reorgScene.staticEntities);
48 | nonStaticStats = StatsFromEntityGroupList("nonStatic", reorgScene.nonStaticEntities);
49 | rebuiltStats = StatsFromEntityGroupList("rebuilt", reorgScene.rebuiltFaceEntities);
50 | rebuiltNonStaticStats = StatsFromEntityGroupList("rebuiltNonStatic", reorgScene.rebuiltNonStaticEntities);
51 | }
52 | */
53 |
54 | /*
55 | public class EntityGroupStats {
56 | public int numEntities = 0;
57 | public int numMeshes = 0;
58 | public int numLinksets = 0;
59 | public int numIndices = 0;
60 | public int numVertices = 0;
61 | public int numMaterials = 0;
62 | public int numTextures = 0;
63 | }
64 |
65 | EntityGroupStats staticStats = null;
66 | EntityGroupStats nonStaticStats = null;
67 | EntityGroupStats rebuiltStats = null;
68 | EntityGroupStats rebuiltNonStaticStats = null;
69 |
70 |
71 | public EntityGroupStats StatsFromEntityGroupList(string listName, EntityGroupList entityList) {
72 | EntityGroupStats egs = new EntityGroupStats();
73 | try {
74 | List TEFs = new List();
75 | List TEXs = new List();
76 | egs.numEntities = entityList.Count;
77 | entityList.ForEach(entity => {
78 | if (entity.Count > 1) {
79 | egs.numLinksets++;
80 | }
81 | entity.ForEach(epg => {
82 | var ep = epg.primaryExtendePrim;
83 | egs.numMeshes += ep.faces.Count;
84 | foreach (FaceInfo fi in ep.faces) {
85 | egs.numIndices += fi.indices.Count;
86 | egs.numVertices += fi.vertexs.Count;
87 | if (!TEFs.Contains(fi.textureEntry)) {
88 | TEFs.Add(fi.textureEntry);
89 | }
90 | if (fi.textureID != null && !TEXs.Contains((OMV.UUID)fi.textureID)) {
91 | TEXs.Add((OMV.UUID)fi.textureID);
92 | }
93 | }
94 | });
95 | });
96 | egs.numMaterials = TEFs.Count;
97 | egs.numTextures = TEXs.Count;
98 | }
99 | catch (Exception e) {
100 | m_log.ErrorFormat("{0}: Exception computing {1} stats: {2}", "StatsFromEntityGroupList", listName, e);
101 | }
102 |
103 | return egs;
104 | }
105 |
106 |
107 | // Output the non entitiy list info
108 | public void Log(string header) {
109 | m_log.DebugFormat("{0} numSimplePrims={1}", header, numSimplePrims);
110 | m_log.DebugFormat("{0} numSculpties={1}", header, numSculpties);
111 | m_log.DebugFormat("{0} numMeshAssets={1}", header, numMeshAssets);
112 | }
113 |
114 | public void Log(EntityGroupStats stats, string header) {
115 | m_log.DebugFormat("{0} numEntities={1}", header, stats.numEntities);
116 | m_log.DebugFormat("{0} numMeshes={1}", header, stats.numMeshes);
117 | m_log.DebugFormat("{0} numLinksets={1}", header, stats.numLinksets);
118 | m_log.DebugFormat("{0} numIndices={1}", header, stats.numIndices);
119 | m_log.DebugFormat("{0} numVertices={1}", header, stats.numVertices);
120 | m_log.DebugFormat("{0} numMaterials={1}", header, stats.numMaterials);
121 | m_log.DebugFormat("{0} numTextures={1}", header, stats.numTextures);
122 | }
123 |
124 | public void LogAll(string header) {
125 | Log(header + " " + m_scene.Name);
126 |
127 | if (staticStats != null) {
128 | Log(staticStats, header + " " + m_scene.Name + " static");
129 | }
130 | if (nonStaticStats != null) {
131 | Log(nonStaticStats, header + " " + m_scene.Name + " nonStatic");
132 | }
133 | if (rebuiltStats != null) {
134 | Log(rebuiltStats, header + " " + m_scene.Name + " rebuilt");
135 | }
136 | if (rebuiltNonStaticStats != null) {
137 | Log(rebuiltNonStaticStats, header + " " + m_scene.Name + " rebuiltNonStatic");
138 | }
139 | }
140 |
141 | private const int indentStep = 2;
142 | private string MI(int indent) { // short for "MakeIndent"
143 | return _logHeader + " ".Substring(0, indent * indentStep);
144 | }
145 | public void DumpDetailed(EntityGroupList egl) {
146 | DumpDetailed(1, egl);
147 | }
148 | public void DumpDetailed(int indent, EntityGroupList egl) {
149 | m_log.Debug(MI(indent) + "EntityGroupList. Num entities=" + egl.Count);
150 | egl.ForEach(eg => {
151 | DumpDetailed(indent+1, eg);
152 | });
153 | }
154 | public void DumpDetailed(int indent, EntityGroup eg) {
155 | m_log.Debug(MI(indent) + "EntityGroup. NumExtendedPrims=" + eg.Count);
156 | eg.ForEach(epg => {
157 | DumpDetailed(indent+1, epg);
158 | });
159 | }
160 | public void DumpDetailed(int indent, ExtendedPrimGroup epg) {
161 | m_log.Debug(MI(indent) + "ExtendedPrimGroup");
162 | foreach (PrimGroupType lodKey in epg.Keys) {
163 | DumpDetailed(indent+1, lodKey, epg[lodKey]);
164 | }
165 | }
166 | public void DumpDetailed(int indent, PrimGroupType lodKey, ExtendedPrim ep) {
167 | m_log.Debug(MI(indent) + "LOD=" + lodKey);
168 | DumpDetailed(indent+1, ep);
169 | }
170 | public void DumpDetailed(int indent, ExtendedPrim ep) {
171 | var name = ep.fromOS.SOG == null ? "TERRAIN" : ep.fromOS.SOG.Name;
172 | m_log.Debug(MI(indent) + "name=" + name);
173 | StringBuilder buff = new StringBuilder();
174 | buff.Append(MI(indent) + "faces=" + ep.faces.Count);
175 | foreach (FaceInfo face in ep.faces) {
176 | buff.Append("(");
177 | buff.Append(face.vertexs.Count.ToString());
178 | buff.Append("/");
179 | buff.Append(face.indices.Count.ToString());
180 | buff.Append("/");
181 | var hash = face.textureEntry == null ? 0 : face.GetTextureHash();
182 | buff.Append(hash.ToString());
183 | if (face.textureID != null
184 | && face.textureID != OMV.UUID.Zero
185 | && face.textureID != OMV.Primitive.TextureEntry.WHITE_TEXTURE) {
186 | buff.Append("T");
187 | }
188 | buff.Append(") ");
189 | }
190 | m_log.Debug(buff.ToString());
191 | }
192 | */
193 | }
194 | }
195 |
--------------------------------------------------------------------------------
/convoar/ConvoarTests.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2016 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.Text;
21 | using System.Threading.Tasks;
22 |
23 | using OpenSim.Region.Framework.Scenes;
24 |
25 | using org.herbal3d.cs.CommonEntities;
26 | using org.herbal3d.cs.CommonUtil;
27 |
28 | using OMV = OpenMetaverse;
29 | using OMVR = OpenMetaverse.Rendering;
30 |
31 | using org.herbal3d.convoar;
32 |
33 | using NUnit.Framework;
34 |
35 | namespace org.herbal3d.convoar.tests {
36 |
37 | [TestFixture]
38 | public class ConvoarTestCase {
39 | // Documentation on attributes: http://www.nunit.org/index.php?p=attributes&r=2.6.1
40 | // Documentation on assertions: http://www.nunit.org/index.php?p=assertions&r=2.6.1
41 |
42 | [SetUp]
43 | public virtual void Setup() {
44 | }
45 | }
46 |
47 | // =========================================================================================
48 | [TestFixture]
49 | public class ParameterParsing : ConvoarTestCase {
50 |
51 | ConvoarParams _params;
52 | BLogger _log;
53 |
54 | [TestFixtureSetUp]
55 | public void Init() {
56 | _log = new BLoggerConsole();
57 | _params = new ConvoarParams();
58 | ConvOAR.Globals = new GlobalContext() {
59 | log = _log,
60 | parms = _params
61 | };
62 | }
63 |
64 | [TestFixtureTearDown]
65 | public void TearDown() {
66 | }
67 |
68 | [TestCase]
69 | public void ProcessArgsParameter() {
70 | bool oldExportTextures = _params.ExportTextures;
71 | string inputOARFileParameterName = "InputOAR";
72 | string inputOARFile = "AnOARFileToRead.oar";
73 | string outputDirectory = "this/that";
74 | string[] args = new string[] {
75 | "-d", outputDirectory,
76 | "--exporttextures",
77 | "--preferredTextureFormat", "GIF",
78 | "--mergeStaticMeshes",
79 | "--verticesmaxForBuffer", "1234",
80 | inputOARFile
81 | };
82 | _params.SetParameterValue("ExportTextures", "false");
83 | _params.SetParameterValue("MergeStaticMeshes", "false");
84 |
85 | Exception exceptionCode = null;
86 | try {
87 | _params.MergeCommandLine(args, null, inputOARFileParameterName);
88 | }
89 | catch (Exception e) {
90 | exceptionCode = e;
91 | }
92 |
93 | if (exceptionCode != null) {
94 | Assert.Fail("Exception merging parameters: " + exceptionCode.ToString());
95 | }
96 | else {
97 | Assert.AreEqual(outputDirectory, _params.OutputDir, "Output directory specification short form was not set");
98 | Assert.AreEqual(true, _params.ExportTextures, "ExportTextures was not parameterized properly");
99 | Assert.AreEqual("GIF", _params.PreferredTextureFormat, "Preferred texture format was not set");
100 | // Assert.AreEqual(true, _params.MergeStaticMeshes, "MergeStaticMeshes was not set");
101 | Assert.AreEqual(1234, _params.VerticesMaxForBuffer, "VerticesMaxForBuffer was not set");
102 | // Assert.AreEqual(inputOARFile, InputOAR, "The trailing filename was not set");
103 | }
104 | }
105 |
106 | [TestCase]
107 | public void ProcessNoParameter() {
108 | string outputDirectory = "this/that";
109 | string[] args = new string[] {
110 | "-d", outputDirectory,
111 | "--noExportTextures",
112 | "--preferredTextureFormat", "GIF",
113 | };
114 | _params.SetParameterValue("ExportTextures", "true");
115 |
116 | Exception exceptionCode = null;
117 | try {
118 | _params.MergeCommandLine(args);
119 | }
120 | catch (Exception e) {
121 | exceptionCode = e;
122 | }
123 |
124 | if (exceptionCode != null) {
125 | Assert.Fail("Exception merging parameters: " + exceptionCode.ToString());
126 | }
127 | else {
128 | Assert.AreEqual(false, _params.ExportTextures, "ExportTextures was not set to false");
129 | }
130 | }
131 | }
132 |
133 | // =========================================================================================
134 | // Verify that terrain mesh is generated across the whole region area.
135 | [TestFixture]
136 | public class TerrainMeshGeneration : ConvoarTestCase {
137 |
138 | ConvoarParams _params;
139 | BLogger _log;
140 | MemAssetService _assetService;
141 | private AssetManager _assetManager = null;
142 | private OarConverter _converter = null;
143 | private OMV.Primitive.TextureEntryFace _defaultTexture = null;
144 | Scene _scene;
145 |
146 | [TestFixtureSetUp]
147 | public void Init() {
148 | _log = new BLoggerConsole();
149 | _params = new ConvoarParams();
150 | ConvOAR.Globals = new GlobalContext() {
151 | log = _log,
152 | parms = _params
153 | };
154 | _assetService = new MemAssetService();
155 | _converter = new OarConverter(_log, _params);
156 | _scene = _converter.CreateScene(_assetService, "convoar-test");
157 | _assetManager = new AssetManager(_assetService, _log, _params.OutputDir);
158 | OMV.UUID defaultTextureID = new OMV.UUID("179cdabd-398a-9b6b-1391-4dc333ba321f");
159 | _defaultTexture = new OMV.Primitive.TextureEntryFace(null) {
160 | TextureID = defaultTextureID
161 | };
162 | }
163 |
164 | [TestFixtureTearDown]
165 | public void TearDown() {
166 | _scene.Close();
167 | _assetManager.Dispose();
168 | _assetService.Dispose();
169 | }
170 |
171 | [TestCase]
172 | public void VerifyHeightmapMatchesMesh() {
173 | }
174 |
175 | [TestCase(100, 200)]
176 | public async void VerifyMeshCoversWholeRegion(int heightmapSize, int regionSize) {
177 | float[,] heightMap = CreateHeightmap(heightmapSize);
178 | PrimToMesh mesher = new PrimToMesh(_log, new BConverterOSParams() {
179 | addTerrainMesh = false,
180 | displayTimeScaling = false,
181 | doubleSided = false,
182 | logBuilding = false,
183 | });
184 | DisplayableRenderable dr = await mesher.MeshFromHeightMap(heightMap, regionSize, regionSize,
185 | _assetManager, _defaultTexture);
186 | RenderableMeshGroup rmg = dr as RenderableMeshGroup;
187 | Assert.IsTrue(rmg != null, "MeshFromHeightMap did not return a RenderableMeshGroup");
188 | Assert.AreEqual(rmg.meshes.Count, 1, "MeshFromHeightMap returned more than one mesh");
189 | }
190 |
191 | // Creates a heightmap of specificed size with a simple gradient from on corner to the
192 | // opposite corner.
193 | private float[,] CreateHeightmap(int pHeightmapSize) {
194 | float[,] heightmap = new float[pHeightmapSize, pHeightmapSize];
195 | int xSize = heightmap.GetLength(0);
196 | int ySize = heightmap.GetLength(1);
197 | float xStep = 1.0f / (float)xSize;
198 | float yStep = 1.0f / (float)ySize;
199 | for (int xx = 0; xx < xSize; xx++) {
200 | for (int yy = 0; yy < ySize; yy++) {
201 | heightmap[xx, yy] = (xStep * (float)xx) + (yStep * (float)yy);
202 | }
203 | }
204 | return heightmap;
205 | }
206 | }
207 |
208 | // =========================================================================================
209 | // Test the operations of BHasher and BHash.
210 | [TestFixture]
211 | public class BHasherTests : ConvoarTestCase {
212 |
213 | [TestFixtureSetUp]
214 | public void Init() {
215 | }
216 |
217 | [TestFixtureTearDown]
218 | public void TearDown() {
219 | }
220 |
221 | [TestCase(Result = 8511673652397437578L)]
222 | public ulong BHasherMdjb2TestParams() {
223 | BHasher hasher = new BHasherMdjb2();
224 | hasher.Add('c');
225 | hasher.Add((ushort)6);
226 | hasher.Add((int)12345);
227 | hasher.Add(-2345L);
228 | byte[] byt = Encoding.ASCII.GetBytes("This is a string");
229 | hasher.Add(byt, 0, byt.Length);
230 | BHash hash = hasher.Finish();
231 | // System.Console.WriteLine("BHasher hash output = " + hash.ToString());
232 | return hash.ToULong();
233 | }
234 |
235 | [TestCase("This is a string", Result = "1036731341136637329")]
236 | [TestCase("A long string which is much longer than we are willing to test", Result = "6489722179198911432")]
237 | [TestCase("A string witA one difference", Result = "254346540298589279")]
238 | [TestCase("A string witB one difference", Result = "5728349923385932352")]
239 | [TestCase("A string witC one difference", Result = "11202353306473275425")]
240 | public string BHasherMdjb2Test(string toHash) {
241 | BHasher hasher = new BHasherMdjb2();
242 | byte[] byt = Encoding.ASCII.GetBytes(toHash);
243 | hasher.Add(byt, 0, byt.Length);
244 | BHash hash = hasher.Finish();
245 | // System.Console.WriteLine("BHasherMdjb2 hash output = " + hash.ToString());
246 | return hash.ToString();
247 | }
248 |
249 | [TestCase("This is a string", Result = "41FB5B5AE4D57C5EE528ADB00E5E8E74")]
250 | [TestCase("A long string which is much longer than we are willing to test", Result = "7DA9312B687AEF9E776DD9F441254437")]
251 | [TestCase("A string witA one difference", Result = "D3E5DC1272277204DEC8B8009AC31CE7")]
252 | [TestCase("A string witB one difference", Result = "AF4F00FE82C49DA99623911BA79B61A4")]
253 | [TestCase("A string witC one difference", Result = "B7954F90F15DBEB6EE4974F38895D8C8")]
254 | public string BHasherMD5Test(string toHash) {
255 | BHasher hasher = new BHasherMD5();
256 | byte[] byt = Encoding.ASCII.GetBytes(toHash);
257 | hasher.Add(byt, 0, byt.Length);
258 | BHash hash = hasher.Finish();
259 | System.Console.WriteLine("BHasherMD5 hash output = " + hash.ToString());
260 | return hash.ToString();
261 | }
262 |
263 | [TestCase("This is a string", Result = "4E9518575422C9087396887CE20477AB5F550A4AA3D161C5C22A996B0ABB8B35")]
264 | [TestCase("A long string which is much longer than we are willing to test", Result = "312BB2AFFEF9E276C83C30342A742CD05CE51BDB7E15DB5209B3CCADDBBDF3B5")]
265 | [TestCase("A string witA one difference", Result = "D0E312AC7CA43B85822A95ADB1D12014EF5DE6B66F4F7A4905078941BB0C27C1")]
266 | [TestCase("A string witB one difference", Result = "59129922BEBED4D0F9EBF1C450D77C3C3600D6535E0F6E39CB270898A3865369")]
267 | [TestCase("A string witC one difference", Result = "D260E15C2F3251F1D8AD037418B39311BBE2AA828E914415408A3E60F0AC84EF")]
268 | public string BHasherSHA256Test(string toHash) {
269 | BHasher hasher = new BHasherSHA256();
270 | byte[] byt = Encoding.ASCII.GetBytes(toHash);
271 | hasher.Add(byt, 0, byt.Length);
272 | BHash hash = hasher.Finish();
273 | System.Console.WriteLine("BHasherSHA256 hash output = " + hash.ToString());
274 | return hash.ToString();
275 | }
276 |
277 | // Test that passing the hashing input in parts is the same as passing it all at once.
278 | [TestCase]
279 | public void BHasherParameterParts() {
280 | byte[] testBytes = new byte[100];
281 | Random rand = new Random();
282 | rand.NextBytes(testBytes);
283 | BHasher hasher1 = new BHasherMdjb2();
284 | BHasher hasher2 = new BHasherMdjb2();
285 | TestHasher("Mdjb2", hasher1, hasher2, testBytes);
286 | hasher1 = new BHasherMD5();
287 | hasher2 = new BHasherMD5();
288 | TestHasher("MD5", hasher1, hasher2, testBytes);
289 | hasher1 = new BHasherSHA256();
290 | hasher2 = new BHasherSHA256();
291 | TestHasher("SHA256", hasher1, hasher2, testBytes);
292 | }
293 |
294 | private void TestHasher(string name, BHasher hasher1, BHasher hasher2, byte[] testBytes) {
295 | hasher1.Add(testBytes, 0, testBytes.Length);
296 | BHash hash1 = hasher1.Finish();
297 | hasher2.Add(testBytes[0]);
298 | hasher2.Add(testBytes, 1, 10);
299 | hasher2.Add(testBytes[11]);
300 | hasher2.Add(testBytes, 12, testBytes.Length - 12);
301 | BHash hash2 = hasher2.Finish();
302 | Assert.AreEqual(hash1.ToString(), hash2.ToString(), "Adding bytes in different order gave different results in " + name);
303 | }
304 | }
305 |
306 | // =========================================================================================
307 | // Test the operations of PersistRules
308 | [TestFixture]
309 | public class PersistRulesTest : ConvoarTestCase {
310 |
311 | [TestFixtureSetUp]
312 | public void Init() {
313 | }
314 |
315 | [TestFixtureTearDown]
316 | public void TearDown() {
317 | }
318 | }
319 | // =========================================================================================
320 | // Test whether the coordinates and child rotations happen properly when
321 | // converting linksets.
322 | [TestFixture]
323 | public class LinksetToEntity : ConvoarTestCase {
324 |
325 | [TestFixtureSetUp]
326 | public void Init() {
327 | }
328 |
329 | [TestFixtureTearDown]
330 | public void TearDown() {
331 | }
332 | }
333 |
334 | }
335 |
--------------------------------------------------------------------------------
/convoar/NullUserAccountService.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 | using System;
17 | using System.Collections.Generic;
18 | using System.Linq;
19 | using System.Text;
20 | using System.Threading.Tasks;
21 | using OpenMetaverse;
22 | using OpenSim.Services.Interfaces;
23 |
24 | namespace org.herbal3d.convoar {
25 | // A dummy class used to fool OpenSimulator routines that there is a real user account service
26 | class NullUserAccountService : IUserAccountService
27 | {
28 | public UserAccount GetUserAccount(UUID scopeID, UUID userID) {
29 | UserAccount ua = new UserAccount(scopeID, userID, "firstname", "lastname", "firstname.lastname@example.com");
30 | return ua;
31 | }
32 |
33 | public UserAccount GetUserAccount(UUID scopeID, string FirstName, string LastName) {
34 | UserAccount ua = new UserAccount(scopeID, FirstName, LastName, "firstname.lastname@example.com");
35 | return ua;
36 | }
37 |
38 | public UserAccount GetUserAccount(UUID scopeID, string Email) {
39 | UserAccount ua = new UserAccount(scopeID, "firstname", "lastname", Email);
40 | return ua;
41 | }
42 |
43 | public List GetUserAccounts(UUID scopeID, string query) {
44 | UserAccount ua = new UserAccount(scopeID, "firstname", "lastname", "firstname.lastname@example.com");
45 | return new List() { ua } ;
46 | }
47 |
48 | public List GetUserAccounts(UUID scopeID, List IDs) {
49 | UserAccount ua = new UserAccount(scopeID, "firstname", "lastname", "firstname.lastname@example.com");
50 | return new List() { ua } ;
51 | throw new NotImplementedException();
52 | }
53 |
54 | public List GetUserAccountsWhere(UUID scopeID, string where) {
55 | throw new NotImplementedException();
56 | }
57 |
58 | public void InvalidateCache(UUID userID) {
59 | throw new NotImplementedException();
60 | }
61 |
62 | public bool StoreUserAccount(UserAccount data) {
63 | throw new NotImplementedException();
64 | }
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/convoar/OarConverter.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | using System;
18 | using System.Collections.Generic;
19 | using System.Linq;
20 | using System.IO;
21 | using System.Reflection;
22 | using System.Text;
23 | using System.Threading.Tasks;
24 | using System.Xml;
25 |
26 | using OpenSim.Framework;
27 | using OpenSim.Services.Interfaces;
28 | using OpenSim.Region.CoreModules;
29 | using OpenSim.Region.CoreModules.World.Serialiser;
30 | using OpenSim.Region.Framework.Interfaces;
31 | using OpenSim.Region.Framework.Scenes;
32 | using OpenSim.Region.CoreModules.World.Terrain;
33 | using OpenSim.Region.CoreModules.World.Archiver;
34 | using OpenSim.Region.PhysicsModule.BasicPhysics;
35 | using OpenSim.Region.PhysicsModules.SharedBase;
36 | using OpenSim.Tests.Common;
37 | using OpenSim.Data.Null;
38 |
39 | using org.herbal3d.cs.CommonEntities;
40 | using org.herbal3d.cs.CommonUtil;
41 |
42 | using OMV = OpenMetaverse;
43 | using OMVS = OpenMetaverse.StructuredData;
44 | using OMVA = OpenMetaverse.Assets;
45 | using OMVR = OpenMetaverse.Rendering;
46 |
47 |
48 | namespace org.herbal3d.convoar {
49 | // Convert things from OpenSimulator to Instances and Displayables things
50 | public class OarConverter {
51 | // private static readonly string _logHeader = "[OarConverter]";
52 |
53 | private readonly BLogger _log;
54 | private readonly ConvoarParams _params;
55 | private readonly BConverterOS _converter;
56 |
57 | public OarConverter(BLogger pLog, ConvoarParams pParams) {
58 | _log = pLog;
59 | _params = pParams;
60 | _converter = new BConverterOS(_log, new BConverterOSParams() {
61 | addTerrainMesh = _params.AddTerrainMesh,
62 | displayTimeScaling = _params.DisplayTimeScaling,
63 | doubleSided = _params.DoubleSided,
64 | logBuilding = _params.LogBuilding,
65 | convoarId = _params.ConvoarID
66 | });
67 |
68 | }
69 |
70 | public async Task ConvertOarToScene(IAssetService assetService, AssetManager assetManager) {
71 |
72 | // Assemble all the parameters that loadoar takes and uses
73 | Dictionary options = new Dictionary {
74 | // options.Add("merge", false);
75 | { "displacement", _params.Displacement }
76 | };
77 | //if (optRotation != null) options.Add("rotation", float.Parse(optRotation, System.Threading.Thread.CurrentThread.CurrentCulture));
78 | if (_params.Rotation != 0) options.Add("rotation", _params.Rotation);
79 | // options.Add("default-user", OMV.UUID.Random());
80 | // if (optSkipAssets != null) options.Add('skipAssets', true);
81 | // if (optForceTerrain != null) options.Add("force-terrain", true);
82 | // if (optNoObjects != null) options.Add("no-objects", true);
83 | string optSubRegion = _params.SubRegion;
84 | if (optSubRegion != null) {
85 | List bounds = optSubRegion.Split(',').Select(x => { return float.Parse(x); }).ToList();
86 | options.Add("bounding-origin", new OMV.Vector3(bounds[0], bounds[1], bounds[2]));
87 | options.Add("bounding-size", new OMV.Vector3(bounds[3] - bounds[0], bounds[4] - bounds[1], bounds[5] - bounds[2]));
88 | }
89 |
90 | // Create an OpenSimulator region and scene to load the OAR into
91 | string regionName = "convoar";
92 | if (String.IsNullOrEmpty(_params.RegionName)) {
93 | // Try to build the region name from the OAR filesname
94 | regionName = Path.GetFileNameWithoutExtension(_params.InputOAR);
95 | }
96 | else {
97 | regionName = _params.RegionName;
98 | }
99 | Scene scene = CreateScene(assetService, regionName);
100 |
101 | // Load the archive into our scene
102 | ArchiveReadRequest archive = new ArchiveReadRequest(scene, _params.InputOAR, Guid.Empty, options);
103 | archive.DearchiveRegion(false);
104 |
105 | return await _converter.ConvertRegionToBScene(scene, assetManager);
106 | }
107 |
108 | // Create an OpenSimulator Scene and add enough auxillery services and objects
109 | // to it so it will allow the loading of assets.
110 | public Scene CreateScene(IAssetService memAssetService, string regionName) {
111 | var estateSettings = new EstateSettings {
112 | EstateOwner = OMV.UUID.Random()
113 | };
114 | RegionInfo regionInfo = new RegionInfo(0, 0, null, regionName) {
115 | RegionName = regionName,
116 | RegionSizeX = Constants.RegionSize,
117 | RegionSizeY = Constants.RegionSize,
118 | RegionID = OMV.UUID.Random(),
119 | EstateSettings = estateSettings
120 | };
121 |
122 | Scene scene = new Scene(regionInfo);
123 |
124 | // Add an in-memory asset service for all the loaded assets to go into
125 | scene.RegisterModuleInterface(memAssetService);
126 |
127 | ISimulationDataService simulationDataService = new NullDataService();
128 | scene.RegisterModuleInterface(simulationDataService);
129 |
130 | IRegionSerialiserModule serializerModule = new SerialiserModule();
131 | scene.RegisterModuleInterface(serializerModule);
132 |
133 | IUserAccountService userAccountService = new NullUserAccountService();
134 | scene.RegisterModuleInterface(userAccountService);
135 |
136 | PhysicsScene physScene = CreateSimplePhysicsEngine();
137 | ((INonSharedRegionModule)physScene).AddRegion(scene);
138 | ((INonSharedRegionModule)physScene).RegionLoaded(scene);
139 | scene.PhysicsScene = physScene;
140 |
141 | scene.LandChannel = new TestLandChannel(scene); // simple land with no parcels
142 | Nini.Config.IConfigSource config = new Nini.Config.IniConfigSource();
143 | config.AddConfig("Terrain");
144 | config.Configs["Terrain"].Set("InitialTerrain", "flat");
145 | var terrainModule = new TerrainModule();
146 | try {
147 | terrainModule.Initialise(config);
148 | terrainModule.AddRegion(scene);
149 | }
150 | catch (ReflectionTypeLoadException e) {
151 | // The terrain module loads terrain brushes and they might not all have been included
152 | StringBuilder sb = new StringBuilder();
153 | foreach (Exception exSub in e.LoaderExceptions) {
154 | sb.AppendLine(exSub.Message);
155 | if (exSub is FileNotFoundException exFileNotFound) {
156 | if (!string.IsNullOrEmpty(exFileNotFound.FusionLog)) {
157 | sb.AppendLine("Fusion Log:");
158 | sb.AppendLine(exFileNotFound.FusionLog);
159 | }
160 | }
161 | sb.AppendLine();
162 | }
163 | string errorMessage = sb.ToString();
164 | _log.Error("BConverterOS.CreateScene: exception adding region:");
165 | _log.Error(errorMessage);
166 | }
167 | catch (Exception e) {
168 | _log.Error("BConverterOS.CreateScene: exception adding region: {0}", e);
169 | }
170 |
171 | SceneManager.Instance.Add(scene);
172 |
173 | return scene;
174 | }
175 |
176 | public PhysicsScene CreateSimplePhysicsEngine() {
177 | Nini.Config.IConfigSource config = new Nini.Config.IniConfigSource();
178 | config.AddConfig("Startup");
179 | config.Configs["Startup"].Set("physics", "basicphysics");
180 |
181 | PhysicsScene pScene = new BasicScene();
182 | INonSharedRegionModule mod = pScene as INonSharedRegionModule;
183 | mod.Initialise(config);
184 |
185 | return pScene;
186 | }
187 |
188 | public void LogBProgress(string msg, params Object[] args) {
189 | if (_params.LogBuilding) {
190 | _log.Debug(msg, args);
191 | }
192 | }
193 | }
194 | }
195 |
--------------------------------------------------------------------------------
/convoar/ParameterParsing.cs:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (c) 2017 Robert Adams
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * http://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | // Derived from DSGLogToolkit, BSD 3-clause license.
18 | // Copyright (c) 2013 Intel Corporation. All rights reserved.
19 |
20 | using System;
21 | using System.Collections.Generic;
22 | using System.Text;
23 |
24 | namespace org.herbal3d.convoar {
25 |
26 | public static class ParameterParse {
27 |
28 | public const string FIRST_PARAM = "--firstParameter";
29 | public const string LAST_PARAM = "--lastParameter";
30 | public const string ERROR_PARAM = "--errorParameter";
31 |
32 | // ================================================================
33 | ///
34 | /// Given the array of command line arguments, create a dictionary of the parameter
35 | /// keyword to values. If there is no value for a parameter keyword, the value of
36 | /// 'null' is stored.
37 | /// Command line keywords begin with "-" or "--". Anything else is presumed to be
38 | /// a value.
39 | ///
40 | /// array of command line tokens
41 | /// if 'true' presume the first token in the parameter line
42 | /// is a special value that should be assigned to the keyword "--firstparam".
43 | /// if 'true' presume multiple specs at the end of the line
44 | /// are filenames and pack them together into a CSV string in LAST_PARAM.
45 | ///
46 | public static Dictionary ParseArguments(string[] args, bool firstOpFlag, bool multipleFiles) {
47 | Dictionary m_params = new Dictionary();
48 |
49 | for (int ii = 0; ii < args.Length; ii++) {
50 | string para = args[ii];
51 | // is this a parameter?
52 | if (para[0] == '-') {
53 | // is the next one a parameter?
54 | if (ii == (args.Length - 1) || args[ii + 1][0] == '-') {
55 | // two parameters in a row. this must be a toggle parameter
56 | m_params.Add(para, null);
57 | }
58 | else {
59 | // looks like a parameter followed by a value
60 | m_params.Add(para, args[ii + 1]);
61 | ii++; // skip the value we just added to the dictionary
62 | }
63 | }
64 | else {
65 | if (ii == 0 && firstOpFlag) {
66 | // if the first thing is not a parameter, make like it's an op or something
67 | m_params.Add(FIRST_PARAM, para);
68 | }
69 | else {
70 | if (multipleFiles) {
71 | // Pack all remaining arguments into a comma-separated list as LAST_PARAM
72 | StringBuilder multFiles = new StringBuilder();
73 | for (int jj = ii; jj < args.Length; jj++) {
74 | if (multFiles.Length != 0) {
75 | multFiles.Append(",");
76 | }
77 | multFiles.Append(args[jj]);
78 | }
79 | m_params.Add(LAST_PARAM, multFiles.ToString());
80 |
81 | // Skip them all
82 | ii = args.Length;
83 | }
84 | else {
85 | // This token is not a keyword. If it's the last thing, place it
86 | // into the dictionary as the last parameter. Otherwise an error.
87 | if (ii == args.Length - 1) {
88 | m_params.Add(LAST_PARAM, para);
89 | }
90 | else {
91 | // something is wrong with the format of the parameters
92 | m_params.Add(ERROR_PARAM, "Unknown parameter " + para);
93 | }
94 | }
95 | }
96 | }
97 | }
98 | return m_params;
99 | }
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/convoar/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("convoar")]
9 | [assembly: AssemblyDescription("Convert OpenSimulator OAR files to GLTF scene files")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("convoar")]
13 | [assembly: AssemblyCopyright("Copyright © 2022")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("bd9942a1-315c-4961-b56a-d1770bed83b0")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("2.0.6.0")]
36 | [assembly: AssemblyFileVersion("2.0.6.0")]
37 |
38 | [assembly: log4net.Config.XmlConfigurator(Watch = true)]
39 |
40 |
--------------------------------------------------------------------------------
/convoar/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace org.herbal3d.convoar.Properties {
12 | using System;
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources {
26 |
27 | private static global::System.Resources.ResourceManager resourceMan;
28 |
29 | private static global::System.Globalization.CultureInfo resourceCulture;
30 |
31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
32 | internal Resources() {
33 | }
34 |
35 | ///
36 | /// Returns the cached ResourceManager instance used by this class.
37 | ///
38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
39 | internal static global::System.Resources.ResourceManager ResourceManager {
40 | get {
41 | if (object.ReferenceEquals(resourceMan, null)) {
42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("org.herbal3d.convoar.Properties.Resources", typeof(Resources).Assembly);
43 | resourceMan = temp;
44 | }
45 | return resourceMan;
46 | }
47 | }
48 |
49 | ///
50 | /// Overrides the current thread's CurrentUICulture property for all
51 | /// resource lookups using this strongly typed resource class.
52 | ///
53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
54 | internal static global::System.Globalization.CultureInfo Culture {
55 | get {
56 | return resourceCulture;
57 | }
58 | set {
59 | resourceCulture = value;
60 | }
61 | }
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/convoar/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 |
--------------------------------------------------------------------------------
/convoar/Resources/README.txt:
--------------------------------------------------------------------------------
1 | The items in this directory are created by pre-build actions
2 | in convoar.csproj. In particular, the actions are:
3 |
4 | echo %date% %time% > "$(ProjectDir)\Resources\BuildDate.txt"
5 | git rev-parse HEAD > "$(ProjectDir)\Resources\GitCommit.txt"
6 |
7 | The files so created are set as embedded resources in convoar.csproj
8 | and, as resources, their contents are available for the
9 | convoar application.
10 |
--------------------------------------------------------------------------------
/convoar/VersionInfo.cs:
--------------------------------------------------------------------------------
1 | // This file is auto-generated by BuildVersion
2 | // Before editting, check out the application's build environment for use of BuildVersion
3 | using System;
4 | namespace org.herbal3d.convoar {
5 | public class VersionInfo {
6 | public static string appVersion = "2.0.6";
7 | public static string longVersion = "2.0.6-20220516-98d4885d";
8 | public static string buildDate = "20220516";
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/convoar/convoar.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {BD9942A1-315C-4961-B56A-D1770BED83B0}
8 | Exe
9 | org.herbal3d.convoar
10 | convoar
11 | v4.8
12 | 512
13 | true
14 | false
15 |
16 |
17 |
18 | publish\
19 | true
20 | Disk
21 | false
22 | Foreground
23 | 7
24 | Days
25 | false
26 | false
27 | true
28 | 0
29 | 1.2.4.%2a
30 | false
31 | true
32 |
33 |
34 | AnyCPU
35 | true
36 | full
37 | false
38 | ..\dist\
39 | DEBUG;TRACE
40 | prompt
41 | 4
42 | false
43 |
44 |
45 | AnyCPU
46 | pdbonly
47 | true
48 | ..\dist\
49 | TRACE
50 | prompt
51 | 4
52 |
53 |
54 | true
55 | bin\x64\Debug\
56 | DEBUG;TRACE
57 | full
58 | x64
59 | prompt
60 | MinimumRecommendedRules.ruleset
61 |
62 |
63 | bin\x64\Release\
64 | TRACE
65 | true
66 | pdbonly
67 | x64
68 | prompt
69 | MinimumRecommendedRules.ruleset
70 | true
71 |
72 |
73 |
74 | False
75 | ..\libs\log4net.dll
76 |
77 |
78 | ..\libs\Mono.Addins.dll
79 |
80 |
81 | ..\libs\Nini.dll
82 |
83 |
84 | False
85 | ..\libs\nunit.framework.dll
86 |
87 |
88 | False
89 | ..\bin\OpenMetaverse.dll
90 |
91 |
92 | False
93 | ..\bin\OpenMetaverse.Rendering.Meshmerizer.dll
94 |
95 |
96 | False
97 | ..\bin\OpenMetaverse.StructuredData.dll
98 |
99 |
100 | False
101 | ..\bin\OpenMetaverseTypes.dll
102 |
103 |
104 | ..\bin\OpenSim.Capabilities.dll
105 |
106 |
107 | False
108 | ..\bin\OpenSim.Data.Null.dll
109 |
110 |
111 | ..\bin\OpenSim.Framework.dll
112 |
113 |
114 | ..\bin\OpenSim.Framework.Monitoring.dll
115 |
116 |
117 | ..\bin\OpenSim.Framework.Serialization.dll
118 |
119 |
120 | ..\bin\OpenSim.Framework.Servers.HttpServer.dll
121 |
122 |
123 | ..\bin\OpenSim.Region.CoreModules.dll
124 |
125 |
126 | ..\bin\OpenSim.Region.Framework.dll
127 |
128 |
129 | False
130 | ..\bin\OpenSim.Region.PhysicsModule.BasicPhysics.dll
131 |
132 |
133 | False
134 | ..\bin\OpenSim.Region.PhysicsModules.SharedBase.dll
135 |
136 |
137 | ..\bin\OpenSim.Services.Connectors.dll
138 |
139 |
140 | ..\bin\OpenSim.Services.Interfaces.dll
141 |
142 |
143 | ..\bin\OpenSim.Tests.Common.dll
144 |
145 |
146 | ..\bin\SmartThreadPool.dll
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 | True
167 | True
168 | Resources.resx
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 | False
178 | Microsoft .NET Framework 4.5.2 %28x86 and x64%29
179 | true
180 |
181 |
182 | False
183 | .NET Framework 3.5 SP1
184 | false
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 | ResXFileCodeGenerator
193 | Resources.Designer.cs
194 | Designer
195 |
196 |
197 |
198 |
199 | {ce3d1850-0000-0000-0000-000000000000}
200 | Herbal3d.CommonEntitiesConv
201 |
202 |
203 | {1267952c-0000-0000-0000-000000000000}
204 | Herbal3d.CommonEntities
205 |
206 |
207 | {c0dfac61-6999-4278-855f-0e9bca2e8625}
208 | Herbal3d.CommonUtil
209 |
210 |
211 |
212 |
--------------------------------------------------------------------------------
/convoar/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/convoar/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
--------------------------------------------------------------------------------
/convoar/openjpeg-dotnet-x86_64.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/convoar/openjpeg-dotnet-x86_64.dll
--------------------------------------------------------------------------------
/convoar/openjpeg-dotnet.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/convoar/openjpeg-dotnet.dll
--------------------------------------------------------------------------------
/dist/Herbal3d.CommonEntities.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonEntities.dll
--------------------------------------------------------------------------------
/dist/Herbal3d.CommonEntitiesConv.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonEntitiesConv.dll
--------------------------------------------------------------------------------
/dist/Herbal3d.CommonEntitiesConv.dll.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/dist/Herbal3d.CommonEntitiesUtil.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonEntitiesUtil.dll
--------------------------------------------------------------------------------
/dist/Herbal3d.CommonUtil.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Herbal3d.CommonUtil.dll
--------------------------------------------------------------------------------
/dist/Microsoft.Win32.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Microsoft.Win32.Primitives.dll
--------------------------------------------------------------------------------
/dist/Mono.Addins.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Mono.Addins.dll
--------------------------------------------------------------------------------
/dist/NLog.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/NLog.dll
--------------------------------------------------------------------------------
/dist/Nini.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/Nini.dll
--------------------------------------------------------------------------------
/dist/OpenMetaverse.Rendering.Meshmerizer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverse.Rendering.Meshmerizer.dll
--------------------------------------------------------------------------------
/dist/OpenMetaverse.StructuredData.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverse.StructuredData.dll
--------------------------------------------------------------------------------
/dist/OpenMetaverse.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverse.dll
--------------------------------------------------------------------------------
/dist/OpenMetaverse.dll.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/dist/OpenMetaverseTypes.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenMetaverseTypes.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Capabilities.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Capabilities.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Capabilities.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Capabilities.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Data.Null.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Data.Null.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Data.Null.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Data.Null.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.Monitoring.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Monitoring.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.Monitoring.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Monitoring.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.Serialization.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Serialization.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.Serialization.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Serialization.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.Servers.HttpServer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Servers.HttpServer.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.Servers.HttpServer.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.Servers.HttpServer.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Framework.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Framework.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Region.CoreModules.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.CoreModules.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Region.CoreModules.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.CoreModules.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Region.Framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.Framework.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Region.Framework.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.Framework.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Region.PhysicsModule.BasicPhysics.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModule.BasicPhysics.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Region.PhysicsModule.BasicPhysics.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModule.BasicPhysics.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Region.PhysicsModules.SharedBase.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModules.SharedBase.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Region.PhysicsModules.SharedBase.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Region.PhysicsModules.SharedBase.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Services.Connectors.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Connectors.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Services.Connectors.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Connectors.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Services.Interfaces.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Interfaces.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Services.Interfaces.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Services.Interfaces.pdb
--------------------------------------------------------------------------------
/dist/OpenSim.Tests.Common.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Tests.Common.dll
--------------------------------------------------------------------------------
/dist/OpenSim.Tests.Common.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/OpenSim.Tests.Common.pdb
--------------------------------------------------------------------------------
/dist/PrimMesher.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/PrimMesher.dll
--------------------------------------------------------------------------------
/dist/SmartThreadPool.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/SmartThreadPool.dll
--------------------------------------------------------------------------------
/dist/SmartThreadPool.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/SmartThreadPool.pdb
--------------------------------------------------------------------------------
/dist/System.AppContext.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.AppContext.dll
--------------------------------------------------------------------------------
/dist/System.Collections.Concurrent.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.Concurrent.dll
--------------------------------------------------------------------------------
/dist/System.Collections.NonGeneric.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.NonGeneric.dll
--------------------------------------------------------------------------------
/dist/System.Collections.Specialized.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.Specialized.dll
--------------------------------------------------------------------------------
/dist/System.Collections.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Collections.dll
--------------------------------------------------------------------------------
/dist/System.ComponentModel.EventBasedAsync.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.EventBasedAsync.dll
--------------------------------------------------------------------------------
/dist/System.ComponentModel.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.ComponentModel.TypeConverter.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.TypeConverter.dll
--------------------------------------------------------------------------------
/dist/System.ComponentModel.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ComponentModel.dll
--------------------------------------------------------------------------------
/dist/System.Console.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Console.dll
--------------------------------------------------------------------------------
/dist/System.Data.Common.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Data.Common.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.Contracts.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Contracts.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.Debug.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Debug.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.FileVersionInfo.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.FileVersionInfo.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.Process.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Process.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.StackTrace.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.StackTrace.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.TextWriterTraceListener.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.TextWriterTraceListener.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.Tools.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Tools.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.TraceSource.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.TraceSource.dll
--------------------------------------------------------------------------------
/dist/System.Diagnostics.Tracing.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Diagnostics.Tracing.dll
--------------------------------------------------------------------------------
/dist/System.Drawing.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Drawing.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.Dynamic.Runtime.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Dynamic.Runtime.dll
--------------------------------------------------------------------------------
/dist/System.Globalization.Calendars.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Globalization.Calendars.dll
--------------------------------------------------------------------------------
/dist/System.Globalization.Extensions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Globalization.Extensions.dll
--------------------------------------------------------------------------------
/dist/System.Globalization.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Globalization.dll
--------------------------------------------------------------------------------
/dist/System.IO.Compression.ZipFile.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.Compression.ZipFile.dll
--------------------------------------------------------------------------------
/dist/System.IO.Compression.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.Compression.dll
--------------------------------------------------------------------------------
/dist/System.IO.FileSystem.DriveInfo.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.DriveInfo.dll
--------------------------------------------------------------------------------
/dist/System.IO.FileSystem.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.IO.FileSystem.Watcher.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.Watcher.dll
--------------------------------------------------------------------------------
/dist/System.IO.FileSystem.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.FileSystem.dll
--------------------------------------------------------------------------------
/dist/System.IO.IsolatedStorage.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.IsolatedStorage.dll
--------------------------------------------------------------------------------
/dist/System.IO.MemoryMappedFiles.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.MemoryMappedFiles.dll
--------------------------------------------------------------------------------
/dist/System.IO.Pipes.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.Pipes.dll
--------------------------------------------------------------------------------
/dist/System.IO.UnmanagedMemoryStream.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.UnmanagedMemoryStream.dll
--------------------------------------------------------------------------------
/dist/System.IO.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.IO.dll
--------------------------------------------------------------------------------
/dist/System.Linq.Expressions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.Expressions.dll
--------------------------------------------------------------------------------
/dist/System.Linq.Parallel.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.Parallel.dll
--------------------------------------------------------------------------------
/dist/System.Linq.Queryable.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.Queryable.dll
--------------------------------------------------------------------------------
/dist/System.Linq.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Linq.dll
--------------------------------------------------------------------------------
/dist/System.Net.Http.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Http.dll
--------------------------------------------------------------------------------
/dist/System.Net.NameResolution.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.NameResolution.dll
--------------------------------------------------------------------------------
/dist/System.Net.NetworkInformation.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.NetworkInformation.dll
--------------------------------------------------------------------------------
/dist/System.Net.Ping.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Ping.dll
--------------------------------------------------------------------------------
/dist/System.Net.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.Net.Requests.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Requests.dll
--------------------------------------------------------------------------------
/dist/System.Net.Security.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Security.dll
--------------------------------------------------------------------------------
/dist/System.Net.Sockets.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.Sockets.dll
--------------------------------------------------------------------------------
/dist/System.Net.WebHeaderCollection.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.WebHeaderCollection.dll
--------------------------------------------------------------------------------
/dist/System.Net.WebSockets.Client.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.WebSockets.Client.dll
--------------------------------------------------------------------------------
/dist/System.Net.WebSockets.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Net.WebSockets.dll
--------------------------------------------------------------------------------
/dist/System.ObjectModel.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ObjectModel.dll
--------------------------------------------------------------------------------
/dist/System.Reflection.Extensions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Reflection.Extensions.dll
--------------------------------------------------------------------------------
/dist/System.Reflection.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Reflection.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.Reflection.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Reflection.dll
--------------------------------------------------------------------------------
/dist/System.Resources.Reader.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Resources.Reader.dll
--------------------------------------------------------------------------------
/dist/System.Resources.ResourceManager.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Resources.ResourceManager.dll
--------------------------------------------------------------------------------
/dist/System.Resources.Writer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Resources.Writer.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.CompilerServices.VisualC.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.CompilerServices.VisualC.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Extensions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Extensions.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Handles.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Handles.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.InteropServices.RuntimeInformation.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.InteropServices.RuntimeInformation.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.InteropServices.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.InteropServices.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Numerics.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Numerics.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Serialization.Formatters.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Formatters.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Serialization.Json.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Json.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Serialization.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.Serialization.Xml.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.Serialization.Xml.dll
--------------------------------------------------------------------------------
/dist/System.Runtime.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Runtime.dll
--------------------------------------------------------------------------------
/dist/System.Security.Claims.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Claims.dll
--------------------------------------------------------------------------------
/dist/System.Security.Cryptography.Algorithms.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Algorithms.dll
--------------------------------------------------------------------------------
/dist/System.Security.Cryptography.Csp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Csp.dll
--------------------------------------------------------------------------------
/dist/System.Security.Cryptography.Encoding.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Encoding.dll
--------------------------------------------------------------------------------
/dist/System.Security.Cryptography.Primitives.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.Primitives.dll
--------------------------------------------------------------------------------
/dist/System.Security.Cryptography.X509Certificates.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Cryptography.X509Certificates.dll
--------------------------------------------------------------------------------
/dist/System.Security.Principal.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.Principal.dll
--------------------------------------------------------------------------------
/dist/System.Security.SecureString.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Security.SecureString.dll
--------------------------------------------------------------------------------
/dist/System.Text.Encoding.Extensions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Text.Encoding.Extensions.dll
--------------------------------------------------------------------------------
/dist/System.Text.Encoding.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Text.Encoding.dll
--------------------------------------------------------------------------------
/dist/System.Text.RegularExpressions.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Text.RegularExpressions.dll
--------------------------------------------------------------------------------
/dist/System.Threading.Overlapped.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Overlapped.dll
--------------------------------------------------------------------------------
/dist/System.Threading.Tasks.Parallel.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Tasks.Parallel.dll
--------------------------------------------------------------------------------
/dist/System.Threading.Tasks.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Tasks.dll
--------------------------------------------------------------------------------
/dist/System.Threading.Thread.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Thread.dll
--------------------------------------------------------------------------------
/dist/System.Threading.ThreadPool.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.ThreadPool.dll
--------------------------------------------------------------------------------
/dist/System.Threading.Timer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.Timer.dll
--------------------------------------------------------------------------------
/dist/System.Threading.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Threading.dll
--------------------------------------------------------------------------------
/dist/System.ValueTuple.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.ValueTuple.dll
--------------------------------------------------------------------------------
/dist/System.Xml.ReaderWriter.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.ReaderWriter.dll
--------------------------------------------------------------------------------
/dist/System.Xml.XDocument.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XDocument.dll
--------------------------------------------------------------------------------
/dist/System.Xml.XPath.XDocument.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XPath.XDocument.dll
--------------------------------------------------------------------------------
/dist/System.Xml.XPath.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XPath.dll
--------------------------------------------------------------------------------
/dist/System.Xml.XmlDocument.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XmlDocument.dll
--------------------------------------------------------------------------------
/dist/System.Xml.XmlSerializer.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/System.Xml.XmlSerializer.dll
--------------------------------------------------------------------------------
/dist/convoar.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/convoar.exe
--------------------------------------------------------------------------------
/dist/convoar.exe.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/dist/convoar.pdb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/convoar.pdb
--------------------------------------------------------------------------------
/dist/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so
--------------------------------------------------------------------------------
/dist/log4net.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/log4net.dll
--------------------------------------------------------------------------------
/dist/netstandard.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/netstandard.dll
--------------------------------------------------------------------------------
/dist/nunit.framework.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/nunit.framework.dll
--------------------------------------------------------------------------------
/dist/openjpeg-dotnet-x86_64.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/openjpeg-dotnet-x86_64.dll
--------------------------------------------------------------------------------
/dist/openjpeg-dotnet.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/openjpeg-dotnet.dll
--------------------------------------------------------------------------------
/dist/zlib.net.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Misterblue/convoar/be7abbedc0d7d295a76800b2fe2e1fc9a58a7934/dist/zlib.net.dll
--------------------------------------------------------------------------------
/docker/Dockerfile:
--------------------------------------------------------------------------------
1 | # Dockerfile for building a runnable version of convoar
2 |
3 | FROM mono:latest as builder
4 |
5 | # add the development environment and base tools
6 | RUN apt-get update \
7 | && apt-get upgrade -y \
8 | && apt-get install -y \
9 | curl \
10 | git \
11 | vim \
12 | libc6-dev libgdiplus
13 |
14 | ARG TARGET=Release
15 |
16 | ARG PLACE=/tmp
17 |
18 | ARG OPENSIM_BRANCH=master
19 | ARG CONVOAR_BRANCH=master
20 | ARG COMMON_ENTITIES_BRANCH=master
21 | ARG COMMON_UTIL_BRANCH=main
22 |
23 | ADD https://api.github.com/repos/opensim/opensim/git/refs/heads/$OPENSIM_BRANCH opensim-git-version.json
24 | RUN cd $PLACE \
25 | && git clone --depth 1 -b $OPENSIM_BRANCH --single-branch https://github.com/opensim/opensim.git \
26 | && cd opensim \
27 | && ./runprebuild48.sh \
28 | && msbuild /p:Configuration=${TARGET}
29 |
30 | # Gather all the sources
31 | # The following ADD's break the caching of the sources changed
32 | ADD https://api.github.com/repos/Misterblue/convoar/git/refs/heads/$CONVOAR_BRANCH convoar-git-version.json
33 | ADD https://api.github.com/repos/Herbal3d/HerbalCommonEntitiesCS/git/refs/heads/$COMMON_ENTITES_BRANCH commonentites-git-version.json
34 | ADD https://api.github.com/repos/Herbal3d/HerbalCommonUtilCS/git/refs/heads/$COMMON_UTIL_BRANCH commonutil-git-version.json
35 | RUN cd $PLACE \
36 | && git clone --depth 1 -b $CONVOAR_BRANCH --single-branch https://github.com/Misterblue/convoar.git \
37 | && cd convoar \
38 | && mkdir -p bin \
39 | && OPENSIMBIN=$PLACE/opensim/bin LIBOMVBIN=$PLACE/opensim/bin ./gatherLibs.sh \
40 | && ./updateVersion.sh "mono ./BuildVersion/BuildVersion.exe" \
41 | && mkdir -p addon-modules \
42 | && cd addon-modules \
43 | && git clone --depth 1 -b $COMMON_ENTITIES_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonEntitiesCS.git \
44 | && git clone --depth 1 -b $COMMON_UTIL_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonUtilCS.git
45 |
46 | RUN cd $PLACE/convoar \
47 | && nuget restore convoar.sln \
48 | && msbuild /p:Configuration=${TARGET}
49 |
50 | # Convoar is now built into $PLACE/convoar/dist
51 |
52 | # ===================================================================
53 | FROM mono:latest
54 |
55 | ARG VERSION
56 |
57 | LABEL Version=${VERSION}
58 | LABEL Description="Docker container convoar"
59 |
60 | # Optout of the .NET Core Telemetry (https://aka.ms/dotnet-cli-telemetry)
61 | ENV DOTNET_CLI_TELEMETRY_OPTOUT=true
62 |
63 | # Must be same as in the 'builder' step above
64 | ARG PLACE=/tmp
65 |
66 | # An account is created in the docker file for building and running the app.
67 | # Set the real password in the calling environment. This is just a default.
68 | ENV USER=convoar
69 | ENV CONVOAR_PASSWORD=convoarconvoar
70 |
71 | # Add and switch to user 'convoar'
72 | RUN adduser --disabled-password --gecos 'Convoar user' ${USER} \
73 | && echo "${USER}:${CONVOAR_PASSWORD}" | chpasswd
74 | WORKDIR /home/${USER}
75 | USER ${USER}:${USER}
76 |
77 | RUN mkdir -p /home/${USER}/convoar/dist
78 | COPY --from=builder --chown=${USER}:${USER} $PLACE/convoar/dist /home/${USER}/convoar/dist/
79 |
80 | COPY ./run-convoar.sh /home/convoar
81 |
82 | ENTRYPOINT [ "./run-convoar.sh" ]
83 |
84 |
--------------------------------------------------------------------------------
/docker/run-convoar.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 | # Run convoar in a special target directory
3 | # The idea would be the person running the docker container would
4 | # mount the remote directory in that place.
5 |
6 | for DIR in /home/convoar/oar /oar /tmp/oar ; do
7 | # echo "Checking $DIR"
8 | if [[ -d "$DIR" ]] ; then
9 | echo "Found $DIR"
10 | cd "$DIR"
11 | echo "Doing: /home/convoar/convoar/dist/convoar.exe $@"
12 | mono /home/convoar/convoar/dist/convoar.exe $@
13 | exit $?
14 | fi
15 | done
16 |
--------------------------------------------------------------------------------
/gatherLibs.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | OPENSIMBIN=${OPENSIMBIN:-../opensim/bin}
4 | # It is best to get the libomv dll's that OpenSim was built with
5 | LIBOMVBIN=${LIBOMVBIN:-../opensim/bin}
6 | # LIBOMVBIN=${LIBOMVBIN:-../libopenmetaverse/bin}
7 |
8 | DSTDIR=./bin
9 |
10 | echo "Copying from $OPENSIMBIN to $DSTDIR"
11 |
12 | # Copy the dll file and the PDB file if it exists
13 | function GetLib() {
14 | if [[ -z "$3" ]] ; then
15 | cp "$1/$2" "$DSTDIR"
16 | else
17 | cp "$1/$2" "$3"
18 | fi
19 | pdbfile=$1/${2%.dll}.pdb
20 | if [[ -e "$pdbfile" ]] ; then
21 | cp "$pdbfile" "$DSTDIR"
22 | fi
23 | }
24 |
25 | GetLib "$OPENSIMBIN" "OpenSim.Data.Null.dll"
26 | GetLib "$OPENSIMBIN" "OpenSim.Capabilities.dll"
27 | GetLib "$OPENSIMBIN" "OpenSim.Framework.dll"
28 | GetLib "$OPENSIMBIN" "OpenSim.Framework.Monitoring.dll"
29 | GetLib "$OPENSIMBIN" "OpenSim.Framework.Serialization.dll"
30 | GetLib "$OPENSIMBIN" "OpenSim.Framework.Servers.HttpServer.dll"
31 | GetLib "$OPENSIMBIN" "OpenSim.Services.Interfaces.dll"
32 | GetLib "$OPENSIMBIN" "OpenSim.Services.Connectors.dll"
33 | GetLib "$OPENSIMBIN" "OpenSim.Region.CoreModules.dll"
34 | GetLib "$OPENSIMBIN" "OpenSim.Region.Framework.dll"
35 | GetLib "$OPENSIMBIN" "OpenSim.Region.PhysicsModule.BasicPhysics.dll"
36 | GetLib "$OPENSIMBIN" "OpenSim.Region.PhysicsModules.SharedBase.dll"
37 | GetLib "$OPENSIMBIN" "OpenSim.Tests.Common.dll"
38 |
39 | GetLib "$OPENSIMBIN" "log4net.dll"
40 | GetLib "$OPENSIMBIN" "Nini.dll"
41 | GetLib "$OPENSIMBIN" "nunit.framework.dll"
42 | GetLib "$OPENSIMBIN" "Mono.Addins.dll"
43 | GetLib "$OPENSIMBIN" "SmartThreadPool.dll"
44 | GetLib "$OPENSIMBIN" "zlib.net.dll"
45 | # Following are required for OpenSimulator terrain/baking code.
46 | GetLib "$OPENSIMBIN" "openjpeg-dotnet.dll" "convoar"
47 | GetLib "$OPENSIMBIN" "openjpeg-dotnet-x86_64.dll" "convoar"
48 | GetLib "$OPENSIMBIN" "libopenjpeg-dotnet-2-1.5.0-dotnet-1-x86_64.so" "convoar"
49 |
50 | GetLib "$LIBOMVBIN" "OpenMetaverse.dll"
51 | GetLib "$LIBOMVBIN" "OpenMetaverse.dll.config"
52 | # GetLib "$LIBOMVBIN" "OpenMetaverse.XML"
53 | GetLib "$LIBOMVBIN" "OpenMetaverseTypes.dll"
54 | # GetLib "$LIBOMVBIN" "OpenMetaverseTypes.XML"
55 | GetLib "$LIBOMVBIN" "OpenMetaverse.StructuredData.dll"
56 | # GetLib "$LIBOMVBIN" "OpenMetaverse.StructuredData.XML"
57 | GetLib "$LIBOMVBIN" "OpenMetaverse.Rendering.Meshmerizer.dll"
58 | GetLib "$LIBOMVBIN" "PrimMesher.dll"
59 |
--------------------------------------------------------------------------------
/setupConvoar.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 | # Script run after checkout out Convoar to get the needed other libraries.
3 |
4 | if [[ -z "$OPENSIMBIN" ]] ; then
5 | echo "Will use OpenSimulator binaries supplied in checkouted bin/"
6 | fi
7 |
8 | export TARGET=Release
9 |
10 | export PLACE=$(pwd)
11 |
12 | export CONVOAR_BRANCH=${CONVOAR_BRANCH:-master}
13 | export COMMON_ENTITIES_BRANCH=${COMMON_ENTITIES_BRANCH:-master}
14 | export COMMON_UTIL_BRANCH=${COMMON_UTIL_BRANCH:-main}
15 |
16 | if [[ ! -z "$OPENSIMBIN" ]] ; then
17 | if [[ -z "$LIBOMVBIN" ]] ; then
18 | echo "Assuming libOpenMetaverse binaries are in $OPENSIMBIN"
19 | export LIBOMVBIN="$OPENSIMBIN"
20 | fi
21 | echo "Fetching OpenSimulator binaries from $OPENSIMBIN"
22 | mkdir -p bin
23 | ./gatherLibs.sh
24 | fi
25 |
26 | # Update the version info from the checkout
27 | ./updateVersion.sh
28 |
29 | # Gather all the sources for the tool libraries
30 | mkdir -p addon-modules
31 | cd addon-modules
32 | git clone --depth 1 -b $COMMON_ENTITIES_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonEntitiesCS.git
33 | git clone --depth 1 -b $COMMON_UTIL_BRANCH --single-branch https://github.com/Herbal3d/HerbalCommonUtilCS.git
34 |
--------------------------------------------------------------------------------
/updateVersion.sh:
--------------------------------------------------------------------------------
1 | #! /bin/bash
2 |
3 | BUILDVERSION=${1:-./BuildVersion/BuildVersion.exe}
4 |
5 | $BUILDVERSION --namespace org.herbal3d.convoar \
6 | --verbose \
7 | --version $(cat VERSION) \
8 | --versionFile convoar/VersionInfo.cs \
9 | --assemblyInfoFile convoar/Properties/AssemblyInfo.cs
10 |
--------------------------------------------------------------------------------