@@ -54,47 +54,45 @@ __global__ void interleave_and_cast_kernel(const uint32_t num_pixels, bool has_a
54
54
*((uint64_t *)&out[i*4 ]) = *((uint64_t *)&rgba_out[0 ]);
55
55
}
56
56
57
- void save_exr (const float * data, int width, int height, int nChannels , int channelStride , const char * outfilename) {
57
+ void save_exr (const float * data, int width, int height, int n_channels , int channel_stride , const char * outfilename) {
58
58
EXRHeader header;
59
59
InitEXRHeader (&header);
60
60
61
61
EXRImage image;
62
62
InitEXRImage (&image);
63
63
64
- image.num_channels = nChannels ;
64
+ image.num_channels = n_channels ;
65
65
66
- std::vector<std::vector<float >> images (nChannels );
67
- std::vector<float *> image_ptr (nChannels );
68
- for (int i = 0 ; i < nChannels ; ++i) {
66
+ std::vector<std::vector<float >> images (n_channels );
67
+ std::vector<float *> image_ptr (n_channels );
68
+ for (int i = 0 ; i < n_channels ; ++i) {
69
69
images[i].resize (width * height);
70
70
}
71
71
72
- for (int i = 0 ; i < nChannels ; ++i) {
73
- image_ptr[i] = images[nChannels - i - 1 ].data ();
72
+ for (int i = 0 ; i < n_channels ; ++i) {
73
+ image_ptr[i] = images[n_channels - i - 1 ].data ();
74
74
}
75
75
76
76
for (size_t i = 0 ; i < (size_t )width * height; i++) {
77
- for (int c = 0 ; c < nChannels ; ++c) {
78
- images[c][i] = data[channelStride*i+ c];
77
+ for (int c = 0 ; c < n_channels ; ++c) {
78
+ images[c][i] = data[channel_stride * i + c];
79
79
}
80
80
}
81
81
82
82
image.images = (unsigned char **)image_ptr.data ();
83
83
image.width = width;
84
84
image.height = height;
85
85
86
- header.num_channels = nChannels ;
86
+ header.num_channels = n_channels ;
87
87
header.channels = (EXRChannelInfo *)malloc (sizeof (EXRChannelInfo) * header.num_channels );
88
+
88
89
// Must be (A)BGR order, since most of EXR viewers expect this channel order.
89
- strncpy (header.channels [0 ].name , " B" , 255 ); header.channels [0 ].name [strlen (" B" )] = ' \0 ' ;
90
- if (nChannels > 1 ) {
91
- strncpy (header.channels [1 ].name , " G" , 255 ); header.channels [1 ].name [strlen (" G" )] = ' \0 ' ;
92
- }
93
- if (nChannels > 2 ) {
94
- strncpy (header.channels [2 ].name , " R" , 255 ); header.channels [2 ].name [strlen (" R" )] = ' \0 ' ;
95
- }
96
- if (nChannels > 3 ) {
97
- strncpy (header.channels [3 ].name , " A" , 255 ); header.channels [3 ].name [strlen (" A" )] = ' \0 ' ;
90
+ const char * channel_names[] = {
91
+ " R" , " G" , " B" , " A"
92
+ };
93
+
94
+ for (size_t i = 0 ; i < n_channels; ++i) {
95
+ strncpy (header.channels [i].name , channel_names[n_channels - i - 1 ], 255 );
98
96
}
99
97
100
98
header.pixel_types = (int *)malloc (sizeof (int ) * header.num_channels );
0 commit comments