-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathRenderEngine.UploadData.cs
123 lines (93 loc) · 3.87 KB
/
RenderEngine.UploadData.cs
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
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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
Copyright 2014-2024 Robert McNeel and Associates
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
**/
using RhinoCyclesCore.Core;
using System;
namespace RhinoCyclesCore
{
public class UploadProgressEventArgs : EventArgs
{
public float Progress { get; private set; }
public string Message { get; private set; }
public UploadProgressEventArgs(float progress, string message)
{
Progress = progress;
Message = message;
}
}
partial class RenderEngine
{
public event EventHandler<UploadProgressEventArgs> UploadProgress;
/// <summary>
/// Main entry point for uploading data to Cycles.
/// </summary>
protected bool UploadData()
{
RcCore.It.AddLogStringIfVerbose("UploadData entry");
RcCore.It.AddLogStringIfVerbose("UploadData locking UploadDataLock");
// lock the upload data lock so we can upload data, and ensure we
// don't terminate the underlying Cycles session while data is still
// being uploaded.
lock (UploadDataLock)
{
RcCore.It.AddLogStringIfVerbose("UploadData lock acquired, uploading...");
if (ShouldBreak) return false;
Database.UploadDisplayPipelineAttributesChanges();
Database.UploadIntegratorChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.1f, "Start data upload"));
if (ShouldBreak) return false;
Database.UploadClippingPlaneChanges();
// linear workflow & gamma changes
Database.UploadGammaChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.2f, "Linear workflow (gamma changes) uploaded"));
if (ShouldBreak) return false;
// environment changes
Database.UploadEnvironmentChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.3f, "Environments uploaded"));
if (ShouldBreak) return false;
// transforms on objects, no geometry changes
Database.UploadDynamicObjectTransforms();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.4f, "Dynamic object transforms uploaded"));
if (ShouldBreak) return false;
// viewport changes
Database.UploadCameraChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.5f, "Viewport uploaded"));
if (ShouldBreak) return false;
// new shaders we've got
Database.UploadShaderChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.6f, "Shaders uploaded"));
if (ShouldBreak) return false;
// mesh changes (new ones, updated ones)
Database.UploadMeshChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.8f, "Mesh data uploaded"));
if (ShouldBreak) return false;
// light changes
Database.UploadLightChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.7f, "Lights uploaded"));
if (ShouldBreak) return false;
// object changes (new ones, deleted ones)
Database.UploadObjectChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(1.0f, "Object changes uploaded"));
if (ShouldBreak) return false;
// shader changes on objects (replacement)
Database.UploadObjectShaderChanges();
UploadProgress?.Invoke(this, new UploadProgressEventArgs(0.9f, "Shader assignments uploaded"));
if (ShouldBreak) return false;
// done, now clear out our change queue stuff so we're ready for the next time around :)
Database.ResetChangeQueue();
if (ShouldBreak) return false;
RcCore.It.AddLogStringIfVerbose("UploadData exit");
return true;
}
}
}
}