@@ -22,7 +22,7 @@ static ustring u_mouse("mouse");
22
22
static constexpr TypeDesc TypeFloatArray2 (TypeDesc::FLOAT, 2 );
23
23
static constexpr TypeDesc TypeFloatArray4 (TypeDesc::FLOAT, 4 );
24
24
static constexpr TypeDesc TypeIntArray2 (TypeDesc::INT, 2 );
25
-
25
+ static constexpr TypeDesc TypeIntArray4 (TypeDesc::INT, 4 );
26
26
27
27
28
28
@@ -38,6 +38,7 @@ OSLToyRenderer::OSLToyRenderer ()
38
38
Matrix44 M; M.makeIdentity ();
39
39
camera_params (M, u_perspective, 90 .0f ,
40
40
0 .1f , 1000 .0f , 256 , 256 );
41
+ shutter (0 .0f , 1 .0f /48 , 0 );
41
42
42
43
// Set up getters
43
44
m_attr_getters[ustring (" osl:version" )] = &OSLToyRenderer::get_osl_version;
@@ -52,6 +53,7 @@ OSLToyRenderer::OSLToyRenderer ()
52
53
m_attr_getters[ustring (" camera:shutter" )] = &OSLToyRenderer::get_camera_shutter;
53
54
m_attr_getters[ustring (" camera:shutter_open" )] = &OSLToyRenderer::get_camera_shutter_open;
54
55
m_attr_getters[ustring (" camera:shutter_close" )] = &OSLToyRenderer::get_camera_shutter_close;
56
+ m_attr_getters[ustring (" camera:frame" )] = &OSLToyRenderer::get_camera_frame;
55
57
56
58
// Set up default shaderglobals
57
59
ShaderGlobals &sg (m_shaderglobals_template);
@@ -133,7 +135,6 @@ OSLToyRenderer::camera_params (const Matrix44 &world_to_camera,
133
135
m_pixelaspect = 1 .0f ; // hard-coded
134
136
m_hither = hither;
135
137
m_yon = yon;
136
- m_shutter[0 ] = 0 .0f ; m_shutter[1 ] = 1 .0f ; // hard-coded
137
138
float frame_aspect = float (xres)/float (yres) * m_pixelaspect;
138
139
m_screen_window[0 ] = -frame_aspect;
139
140
m_screen_window[1 ] = -1 .0f ;
@@ -145,6 +146,16 @@ OSLToyRenderer::camera_params (const Matrix44 &world_to_camera,
145
146
146
147
147
148
149
+ void
150
+ OSLToyRenderer::shutter (float open, float close, int framenumber)
151
+ {
152
+ m_shutter[0 ] = open;
153
+ m_shutter[1 ] = close;
154
+ m_frame = framenumber;
155
+ }
156
+
157
+
158
+
148
159
bool
149
160
OSLToyRenderer::get_matrix (ShaderGlobals* /* sg*/ , Matrix44 &result,
150
161
TransformationPtr xform,
@@ -271,6 +282,25 @@ OSLToyRenderer::get_array_attribute (ShaderGlobals *sg, bool derivatives, ustrin
271
282
TypeDesc type, ustring name,
272
283
int index, void *val)
273
284
{
285
+ if (OIIO::Strutil::starts_with (name, " renderer:" )) {
286
+ if (name == " renderer:name" && type == OIIO::TypeString) {
287
+ *(ustring *)val = ustring (" OSL testrender" );
288
+ return true ;
289
+ }
290
+ if (name == " renderer:version" && type == TypeIntArray4) {
291
+ int *ival = (int *)val;
292
+ ival[0 ] = OSL_VERSION_MAJOR;
293
+ ival[1 ] = OSL_VERSION_MINOR;
294
+ ival[2 ] = OSL_VERSION_PATCH;
295
+ ival[3 ] = 0 ;
296
+ return true ;
297
+ }
298
+ if (name == " renderer:versionstring" && type == OIIO::TypeString) {
299
+ *(ustring *)val = ustring (OSL_LIBRARY_VERSION_STRING);
300
+ return true ;
301
+ }
302
+ }
303
+
274
304
AttrGetterMap::const_iterator g = m_attr_getters.find (name);
275
305
if (g != m_attr_getters.end ()) {
276
306
AttrGetter getter = g->second ;
@@ -517,4 +547,16 @@ OSLToyRenderer::get_camera_screen_window (ShaderGlobals* /*sg*/, bool derivs, us
517
547
}
518
548
519
549
550
+ bool
551
+ OSLToyRenderer::get_camera_frame (ShaderGlobals *sg, bool derivs, ustring object,
552
+ TypeDesc type, ustring name, void *val)
553
+ {
554
+ if (type == TypeDesc::TypeInt) {
555
+ ((int *)val)[0 ] = m_frame;
556
+ return true ;
557
+ }
558
+ return false ;
559
+ }
560
+
561
+
520
562
OSL_NAMESPACE_EXIT
0 commit comments