@@ -22,7 +22,7 @@ static ustring u_mouse("mouse");
2222static constexpr TypeDesc TypeFloatArray2 (TypeDesc::FLOAT, 2 );
2323static constexpr TypeDesc TypeFloatArray4 (TypeDesc::FLOAT, 4 );
2424static constexpr TypeDesc TypeIntArray2 (TypeDesc::INT, 2 );
25-
25+ static constexpr TypeDesc TypeIntArray4 (TypeDesc::INT, 4 );
2626
2727
2828
@@ -38,6 +38,7 @@ OSLToyRenderer::OSLToyRenderer ()
3838 Matrix44 M; M.makeIdentity ();
3939 camera_params (M, u_perspective, 90 .0f ,
4040 0 .1f , 1000 .0f , 256 , 256 );
41+ shutter (0 .0f , 1 .0f /48 , 0 );
4142
4243 // Set up getters
4344 m_attr_getters[ustring (" osl:version" )] = &OSLToyRenderer::get_osl_version;
@@ -52,6 +53,7 @@ OSLToyRenderer::OSLToyRenderer ()
5253 m_attr_getters[ustring (" camera:shutter" )] = &OSLToyRenderer::get_camera_shutter;
5354 m_attr_getters[ustring (" camera:shutter_open" )] = &OSLToyRenderer::get_camera_shutter_open;
5455 m_attr_getters[ustring (" camera:shutter_close" )] = &OSLToyRenderer::get_camera_shutter_close;
56+ m_attr_getters[ustring (" camera:frame" )] = &OSLToyRenderer::get_camera_frame;
5557
5658 // Set up default shaderglobals
5759 ShaderGlobals &sg (m_shaderglobals_template);
@@ -133,7 +135,6 @@ OSLToyRenderer::camera_params (const Matrix44 &world_to_camera,
133135 m_pixelaspect = 1 .0f ; // hard-coded
134136 m_hither = hither;
135137 m_yon = yon;
136- m_shutter[0 ] = 0 .0f ; m_shutter[1 ] = 1 .0f ; // hard-coded
137138 float frame_aspect = float (xres)/float (yres) * m_pixelaspect;
138139 m_screen_window[0 ] = -frame_aspect;
139140 m_screen_window[1 ] = -1 .0f ;
@@ -145,6 +146,16 @@ OSLToyRenderer::camera_params (const Matrix44 &world_to_camera,
145146
146147
147148
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+
148159bool
149160OSLToyRenderer::get_matrix (ShaderGlobals* /* sg*/ , Matrix44 &result,
150161 TransformationPtr xform,
@@ -271,6 +282,25 @@ OSLToyRenderer::get_array_attribute (ShaderGlobals *sg, bool derivatives, ustrin
271282 TypeDesc type, ustring name,
272283 int index, void *val)
273284{
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+
274304 AttrGetterMap::const_iterator g = m_attr_getters.find (name);
275305 if (g != m_attr_getters.end ()) {
276306 AttrGetter getter = g->second ;
@@ -517,4 +547,16 @@ OSLToyRenderer::get_camera_screen_window (ShaderGlobals* /*sg*/, bool derivs, us
517547}
518548
519549
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+
520562OSL_NAMESPACE_EXIT
0 commit comments