26 if (input.is_single_value()) {
27 result.allocate_single_value();
32 result.allocate_texture(input.domain());
37 input.bind_as_texture(shader,
"input_tx");
38 result.bind_as_image(shader,
"output_img");
42 input.unbind_as_texture();
43 result.unbind_as_image();
52 const Result &input_result,
103 output.set_vector_value(
float4(
float3(input.get_float_value()), 1.0f));
109 output.store_pixel(texel, float4(float3(input.load_pixel(texel).x), 1.0f));
133 output.set_color_value(
float4(
float3(input.get_float_value()), 1.0f));
139 output.store_pixel(texel, float4(float3(input.load_pixel(texel).x), 1.0f));
163 float4 color = input.get_color_value();
164 output.set_float_value((color.x + color.y + color.z) / 3.0f);
170 const float4 color = input.load_pixel(texel);
171 output.store_pixel(texel, float4((color.x + color.y + color.z) / 3.0f));
195 float4 color = input.get_color_value();
196 output.set_vector_value(color);
202 [&](
const int2 texel) { output.store_pixel(texel, input.load_pixel(texel)); });
232 const float4 vector = input.load_pixel(texel);
233 output.store_pixel(texel, float4((vector.x + vector.y + vector.z) / 3.0f));
257 output.set_color_value(
float4(
float3(input.get_vector_value()), 1.0f));
263 output.store_pixel(texel, float4(input.load_pixel(texel).xyz(), 1.0f));
void GPU_shader_bind(GPUShader *shader)
struct GPUShader GPUShader
GPUShader * get_shader(const char *info_name, ResultPrecision precision)
virtual void execute_cpu(const Result &input, Result &output)=0
virtual GPUShader * get_conversion_shader() const =0
virtual void execute_single(const Result &input, Result &output)=0
static SimpleOperation * construct_if_needed(Context &context, const Result &input_result, const InputDescriptor &input_descriptor)
GPUShader * get_conversion_shader() const override
void execute_cpu(const Result &input, Result &output) override
ConvertColorToFloatOperation(Context &context)
void execute_single(const Result &input, Result &output) override
void execute_cpu(const Result &input, Result &output) override
ConvertColorToVectorOperation(Context &context)
void execute_single(const Result &input, Result &output) override
GPUShader * get_conversion_shader() const override
GPUShader * get_conversion_shader() const override
ConvertFloatToColorOperation(Context &context)
void execute_single(const Result &input, Result &output) override
void execute_cpu(const Result &input, Result &output) override
GPUShader * get_conversion_shader() const override
ConvertFloatToVectorOperation(Context &context)
void execute_cpu(const Result &input, Result &output) override
void execute_single(const Result &input, Result &output) override
ConvertVectorToColorOperation(Context &context)
void execute_single(const Result &input, Result &output) override
GPUShader * get_conversion_shader() const override
void execute_cpu(const Result &input, Result &output) override
void execute_cpu(const Result &input, Result &output) override
void execute_single(const Result &input, Result &output) override
GPUShader * get_conversion_shader() const override
ConvertVectorToFloatOperation(Context &context)
Context & context() const
static ResultType type(eGPUTextureFormat format)
void populate_result(Result result)
void declare_input_descriptor(InputDescriptor descriptor)
void parallel_for(const int2 range, FunctionRef< void(int2)> function)
void compute_dispatch_threads_at_least(GPUShader *shader, int2 threads_range, int2 local_size=int2(16))
VecBase< float, 4 > float4
VecBase< float, 3 > float3