26 const int tile_number,
27 const bool is_preview_render)
37 assert(b_image->source != IMA_SRC_SEQUENCE);
41 this->b_iuser.tile = tile_number;
48 bool is_float =
false;
94 const size_t num_pixels = ((size_t)metadata.
width) * metadata.
height;
95 const int out_channels = metadata.
channels;
96 const int in_channels = ibuf->
channels;
99 if (in_pixels && out_channels == in_channels) {
101 memcpy(out_pixels, in_pixels, num_pixels * out_channels *
sizeof(
float));
103 else if (in_pixels && out_channels == 4) {
105 float *out_pixel = out_pixels;
106 const float *in_pixel = in_pixels;
107 for (
size_t i = 0;
i < num_pixels;
i++) {
108 out_pixel[0] = in_pixel[0];
109 out_pixel[1] = (in_channels >= 2) ? in_pixel[1] : 0.0f;
110 out_pixel[2] = (in_channels >= 3) ? in_pixel[2] : 0.0f;
111 out_pixel[3] = (in_channels >= 4) ? in_pixel[3] : 1.0f;
112 out_pixel += out_channels;
113 in_pixel += in_channels;
118 if (out_channels == 1) {
119 std::fill(out_pixels, out_pixels + num_pixels, 0.0f);
122 std::fill((
float4 *)out_pixels,
123 (
float4 *)out_pixels + num_pixels,
132 const bool associate_alpha)
137 const size_t num_pixels = ((size_t)metadata.
width) * metadata.
height;
138 const int out_channels = metadata.
channels;
139 const int in_channels = 4;
144 const uchar *in_pixel = in_pixels;
145 half *out_pixel = out_pixels;
146 if (associate_alpha && out_channels == in_channels) {
147 for (
size_t i = 0;
i < num_pixels;
i++, in_pixel += in_channels, out_pixel += out_channels) {
156 for (
size_t i = 0;
i < num_pixels;
i++) {
157 for (
int c = 0; c < out_channels; c++, in_pixel++, out_pixel++) {
165 if (out_channels == 1) {
169 std::fill((
half4 *)out_pixels,
170 (
half4 *)out_pixels + num_pixels,
179 const bool associate_alpha)
181 const size_t num_pixels = ((size_t)metadata.
width) * metadata.
height;
182 const int out_channels = metadata.
channels;
183 const int in_channels = 4;
188 memcpy(out_pixels, in_pixels, num_pixels * in_channels *
sizeof(
unsigned char));
190 if (associate_alpha && out_channels == in_channels) {
192 unsigned char *out_pixel = (
unsigned char *)out_pixels;
193 for (
size_t i = 0;
i < num_pixels;
i++, out_pixel += 4) {
194 out_pixel[0] = (out_pixel[0] * out_pixel[3]) / 255;
195 out_pixel[1] = (out_pixel[1] * out_pixel[3]) / 255;
196 out_pixel[2] = (out_pixel[2] * out_pixel[3]) / 255;
202 if (out_channels == 1) {
203 std::fill(out_pixels, out_pixels + num_pixels, 0.0f);
215 const bool associate_alpha)
221 const bool mismatch = (ibuf ==
nullptr || ibuf->
x != metadata.
width ||
266 BL::ShaderNodeTexPointDensity
b_node)
309 return BL::ShaderNodeTexPointDensity(
b_node).name();
ImBuf * BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **r_lock)
void BKE_image_release_ibuf(Image *ima, ImBuf *ibuf, void *lock)
void BKE_image_free_buffers_ex(Image *image, bool do_lock)
bool BKE_image_has_loaded_ibuf(Image *image)
static void load_half_pixels(const ImBuf *ibuf, const ImageMetaData &metadata, half *out_pixels, const bool associate_alpha)
static void load_byte_pixels(const ImBuf *ibuf, const ImageMetaData &metadata, uchar *out_pixels, const bool associate_alpha)
static void load_float_pixels(const ImBuf *ibuf, const ImageMetaData &metadata, float *out_pixels)
bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override
bool load_pixels(const ImageMetaData &metadata, void *pixels, const size_t pixels_size, const bool associate_alpha) override
bool equals(const ImageLoader &other) const override
BlenderImageLoader(::Image *b_image, ::ImageUser *b_iuser, const int frame, const int tile_number, const bool is_preview_render)
int get_tile_number() const override
string name() const override
bool equals(const ImageLoader &other) const override
BL::ShaderNodeTexPointDensity b_node
BlenderPointDensityLoader(BL::Depsgraph depsgraph, BL::ShaderNodeTexPointDensity b_node)
string name() const override
BL::Depsgraph b_depsgraph
bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override
bool load_pixels(const ImageMetaData &metadata, void *pixels, const size_t pixels_size, const bool associate_alpha) override
void builtin_images_load()
unique_ptr< Session > session
void device_load_builtin(Device *device, Scene *scene, Progress &progress)
float util_image_cast_to_float(T value)
#define CCL_NAMESPACE_END
VecBase< float, 4 > float4
float length(VecOp< float, D >) RET
ccl_device_inline half float_to_half_image(const float f)
ccl_device_inline half4 float4_to_half4_display(const float4 f)
ImBufFloatBuffer float_buffer
ImBufByteBuffer byte_buffer