30 const Result &input_result,
37 &context.get_scene().view_settings, &context.get_scene().display_settings);
40 for (const int64_t y : sub_y_range) {
41 for (const int64_t x : IndexRange(preview_size.x)) {
42 const int2 coordinates = int2((float2(x, y) / float2(preview_size)) * float2(input_size));
43 float4 color = input_result.load_pixel_generic_type(coordinates);
44 if (input_result.type() == ResultType::Float) {
45 color = float4(float3(color.x), 1.0f);
47 IMB_colormanagement_processor_apply_v4(color_processor, color);
49 const int64_t index = (y * preview_size.x + x) * 4;
50 rgba_float_to_uchar(preview->ibuf->byte_buffer.data + index, color);
59 const Result &input_result,
64 gpu::Shader *shader = context.get_shader(
"compositor_compute_preview");
89 float *preview_pixels =
static_cast<float *
>(
94 &context.get_scene().view_settings, &context.get_scene().display_settings);
97 for (const int64_t y : sub_y_range) {
98 for (const int64_t x : IndexRange(preview_size.x)) {
99 const int64_t index = (y * preview_size.x + x) * 4;
100 IMB_colormanagement_processor_apply_v4(color_processor, preview_pixels + index);
101 rgba_float_to_uchar(preview->ibuf->byte_buffer.data + index, preview_pixels + index);
115 const int greater_dimension_size = 128;
117 return int2(greater_dimension_size,
int(greater_dimension_size * (
float(
size.y) /
size.x)));
119 return int2(
int(greater_dimension_size * (
float(
size.x) /
size.y)), greater_dimension_size);
126 &node.context()->derived_tree().root_context().btree());
131 root_tree->
runtime->previews, node.instance_key(), preview_size.x, preview_size.y,
true);
133 if (context.use_gpu()) {
void GPU_shader_bind(blender::gpu::Shader *shader, const blender::gpu::shader::SpecializationConstants *constants_state=nullptr)
@ GPU_BARRIER_TEXTURE_FETCH
void GPU_memory_barrier(GPUBarrier barrier)
void GPU_texture_swizzle_set(blender::gpu::Texture *texture, const char swizzle[4])
void * GPU_texture_read(blender::gpu::Texture *texture, eGPUDataFormat data_format, int mip_level)
ColormanageProcessor * IMB_colormanagement_display_processor_new(const ColorManagedViewSettings *view_settings, const ColorManagedDisplaySettings *display_settings, const ColorManagedDisplaySpace display_space=DISPLAY_SPACE_DRAW, const bool inverse=false)
void IMB_colormanagement_processor_free(ColormanageProcessor *cm_processor)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void allocate_texture(const Domain domain, const bool from_pool=true, const std::optional< ResultStorageType > storage_type=std::nullopt)
void unbind_as_texture() const
static ResultType type(blender::gpu::TextureFormat format)
void bind_as_texture(gpu::Shader *shader, const char *texture_name) const
const Domain & domain() const
void unbind_as_image() const
void bind_as_image(gpu::Shader *shader, const char *image_name, bool read=false) const
void MEM_freeN(void *vmemh)
bNodePreview * node_preview_verify(Map< bNodeInstanceKey, bNodePreview > &previews, bNodeInstanceKey key, int xsize, int ysize, bool create)
static void compute_preview_cpu(Context &context, const Result &input_result, bke::bNodePreview *preview)
void compute_dispatch_threads_at_least(gpu::Shader *shader, int2 threads_range, int2 local_size=int2(16))
static void compute_preview_gpu(Context &context, const Result &input_result, bke::bNodePreview *preview)
static int2 compute_preview_size(int2 size)
void compute_preview(Context &context, const nodes::DNode &node, const Result &input_result)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
VecBase< int32_t, 2 > int2
bNodeTreeRuntimeHandle * runtime