Skip to content

Commit ac6c478

Browse files
committed
Docs: New conventions for retrieving renderer information
Add the following conventions for attributes that retrieve information about the renderer: "renderer:name" "renderer:version" "renderer:versionstring" and the following attribute that retrieves an integer frame number: "camera:frame"
1 parent 0d5bc28 commit ac6c478

File tree

5 files changed

+113
-11
lines changed

5 files changed

+113
-11
lines changed

src/doc/languagespec.tex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4966,7 +4966,10 @@ \section{Renderer state and message passing}
49664966
\hline
49674967
{\bf Name} & {\bf Type} & {\bf Description} \\
49684968
\hline
4969-
{\cf "osl:version"} & {\cf int} & Major*10000 + Minor*100 + patch. \\
4969+
{\cf "osl:version"} & {\cf int} & Major*10000 + Minor*100 + patch. \\[1ex]
4970+
{\cf "renderer:name"} & {\cf string} & Name of the renderer. \\
4971+
{\cf "renderer:version"} & {\cf int[4]} & Version of renderer (major, minor, release, patch). \\
4972+
{\cf "renderer:versionstring"} & {\cf string} & Version of renderer as a string (e.g. \qkw{1.2.7.0}).\\[1ex]
49704973
{\cf "shader:shadername"} & {\cf string} & Name of the shader master. \\
49714974
{\cf "shader:layername"} & {\cf string} & Name of the layer instance. \\
49724975
{\cf "shader:groupname"} & {\cf string} & Name of the shader group. \\
@@ -4996,6 +4999,7 @@ \section{Renderer state and message passing}
49964999
{\cf "camera:shutter_open"} & {\cf float} & Shutter open time. \\
49975000
{\cf "camera:shutter_close"} & {\cf float} & Shutter close time. \\
49985001
{\cf "camera:shutter"} & {\cf float[2]} & Shutter open and close times. \\
5002+
{\cf "camera:frame"} & {\cf int} & Frame number within the shot. \\
49995003
{\cf "camera:screen_window"} & {\cf float[4]} & Screen window (xmin, ymin, xmax, ymax). \\
50005004
\hline
50015005
\end{tabular}

src/osltoy/osltoyrenderer.cpp

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ static ustring u_mouse("mouse");
2222
static constexpr TypeDesc TypeFloatArray2 (TypeDesc::FLOAT, 2);
2323
static constexpr TypeDesc TypeFloatArray4 (TypeDesc::FLOAT, 4);
2424
static 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+
148159
bool
149160
OSLToyRenderer::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+
520562
OSL_NAMESPACE_EXIT

src/osltoy/osltoyrenderer.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ class OSLToyRenderer : public RendererServices
3737

3838
void set_resolution (int x, int y) { m_xres = x; m_yres = y; }
3939

40+
void shutter (float open, float close, int framenumber);
41+
4042
void set_time (float t) { m_shaderglobals_template.time = t; }
4143

4244
void set_mouse (int x, int y) { m_mouse_x = x; m_mouse_y = y; }
@@ -88,12 +90,14 @@ class OSLToyRenderer : public RendererServices
8890

8991
// Camera parameters
9092
Matrix44 m_world_to_camera;
91-
ustring m_projection;
92-
float m_fov, m_pixelaspect, m_hither, m_yon;
93-
float m_shutter[2];
94-
float m_screen_window[4];
93+
ustring m_projection {"perspective"};
94+
float m_fov {90}, m_pixelaspect {1.0};
95+
float m_hither {1e-6}, m_yon {1e6};
96+
float m_shutter[2] { 0.0f, 1.0f };
97+
float m_screen_window[4] { -1, 1, -1, 1 };
9598
int m_xres, m_yres;
9699
int m_mouse_x = -1, m_mouse_y = -1;
100+
int m_frame = 0;
97101

98102
// Named transforms
99103
typedef std::map <ustring, std::shared_ptr<Transformation> > TransformMap;
@@ -135,6 +139,8 @@ class OSLToyRenderer : public RendererServices
135139
TypeDesc type, ustring name, void *val);
136140
bool get_camera_screen_window (ShaderGlobals *sg, bool derivs, ustring object,
137141
TypeDesc type, ustring name, void *val);
142+
bool get_camera_frame (ShaderGlobals *sg, bool derivs, ustring object,
143+
TypeDesc type, ustring name, void *val);
138144

139145
};
140146

src/testshade/simplerend.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ static ustring u_s("s"), u_t("t");
5656
static TypeDesc TypeFloatArray2 (TypeDesc::FLOAT, 2);
5757
static TypeDesc TypeFloatArray4 (TypeDesc::FLOAT, 4);
5858
static TypeDesc TypeIntArray2 (TypeDesc::INT, 2);
59+
static TypeDesc TypeIntArray4 (TypeDesc::INT, 4);
5960

6061

6162
void register_closures(OSL::ShadingSystem* shadingsys) {
@@ -126,6 +127,7 @@ SimpleRenderer::SimpleRenderer ()
126127
Matrix44 M; M.makeIdentity();
127128
camera_params (M, u_perspective, 90.0f,
128129
0.1f, 1000.0f, 256, 256);
130+
shutter (0.0f, 1.0f/48, 0);
129131

130132
// Set up getters
131133
m_attr_getters[ustring("osl:version")] = &SimpleRenderer::get_osl_version;
@@ -140,6 +142,7 @@ SimpleRenderer::SimpleRenderer ()
140142
m_attr_getters[ustring("camera:shutter")] = &SimpleRenderer::get_camera_shutter;
141143
m_attr_getters[ustring("camera:shutter_open")] = &SimpleRenderer::get_camera_shutter_open;
142144
m_attr_getters[ustring("camera:shutter_close")] = &SimpleRenderer::get_camera_shutter_close;
145+
m_attr_getters[ustring("camera:frame")] = &SimpleRenderer::get_camera_frame;
143146
}
144147

145148

@@ -216,6 +219,16 @@ SimpleRenderer::camera_params (const Matrix44 &world_to_camera,
216219

217220

218221

222+
void
223+
SimpleRenderer::shutter (float open, float close, int framenumber)
224+
{
225+
m_shutter[0] = open;
226+
m_shutter[1] = close;
227+
m_frame = framenumber;
228+
}
229+
230+
231+
219232
bool
220233
SimpleRenderer::get_matrix (ShaderGlobals* /*sg*/, Matrix44 &result,
221234
TransformationPtr xform,
@@ -342,6 +355,25 @@ SimpleRenderer::get_array_attribute (ShaderGlobals *sg, bool derivatives, ustrin
342355
TypeDesc type, ustring name,
343356
int index, void *val)
344357
{
358+
if (OIIO::Strutil::starts_with (name, "renderer:")) {
359+
if (name == "renderer:name" && type == OIIO::TypeString) {
360+
*(ustring *)val = ustring("OSL testshade");
361+
return true;
362+
}
363+
if (name == "renderer:version" && type == TypeIntArray4) {
364+
int *ival = (int *)val;
365+
ival[0] = OSL_VERSION_MAJOR;
366+
ival[1] = OSL_VERSION_MINOR;
367+
ival[2] = OSL_VERSION_PATCH;
368+
ival[3] = 0;
369+
return true;
370+
}
371+
if (name == "renderer:versionstring" && type == OIIO::TypeString) {
372+
*(ustring *)val = ustring(OSL_LIBRARY_VERSION_STRING);
373+
return true;
374+
}
375+
}
376+
345377
AttrGetterMap::const_iterator g = m_attr_getters.find (name);
346378
if (g != m_attr_getters.end()) {
347379
AttrGetter getter = g->second;
@@ -592,4 +624,16 @@ SimpleRenderer::add_output (string_view varname, string_view filename,
592624

593625

594626

627+
bool
628+
SimpleRenderer::get_camera_frame (ShaderGlobals *sg, bool derivs, ustring object,
629+
TypeDesc type, ustring name, void *val)
630+
{
631+
if (type == TypeDesc::TypeInt) {
632+
((int *)val)[0] = m_frame;
633+
return true;
634+
}
635+
return false;
636+
}
637+
638+
595639
OSL_NAMESPACE_EXIT

src/testshade/simplerend.h

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,18 +109,22 @@ class SimpleRenderer : public RendererServices
109109
ShadingSystem *shadingsys = nullptr;
110110
OIIO::ParamValueList options;
111111

112+
void shutter (float open, float close, int framenumber);
113+
112114
protected:
113115
// Camera parameters
114116
Matrix44 m_world_to_camera;
115-
ustring m_projection;
116-
float m_fov, m_pixelaspect, m_hither, m_yon;
117-
float m_shutter[2];
118-
float m_screen_window[4];
117+
ustring m_projection {"perspective"};
118+
float m_fov {90}, m_pixelaspect {1.0};
119+
float m_hither {1e-6}, m_yon {1e6};
120+
float m_shutter[2] { 0.0f, 1.0f };
121+
float m_screen_window[4] { -1, 1, -1, 1 };
119122
int m_xres, m_yres;
120123
std::vector<ShaderGroupRef> m_shaders;
121124
std::vector<ustring> m_outputvars;
122125
std::vector<std::shared_ptr<OIIO::ImageBuf>> m_outputbufs;
123126
std::unique_ptr<OIIO::ErrorHandler> m_errhandler { new OIIO::ErrorHandler };
127+
int m_frame = 0;
124128

125129
// Named transforms
126130
typedef std::map <ustring, std::shared_ptr<Transformation> > TransformMap;
@@ -162,6 +166,8 @@ class SimpleRenderer : public RendererServices
162166
TypeDesc type, ustring name, void *val);
163167
bool get_camera_screen_window (ShaderGlobals *sg, bool derivs, ustring object,
164168
TypeDesc type, ustring name, void *val);
169+
bool get_camera_frame (ShaderGlobals *sg, bool derivs, ustring object,
170+
TypeDesc type, ustring name, void *val);
165171

166172
};
167173

0 commit comments

Comments
 (0)