Routines (alphabetical) > Object Classes > Graphics Object Classes > IDLgrShader::Filter

# IDLgrShader::Filter

The IDLgrShader::Filter function method, implemented only in an IDLgrShader subclass, provides a way to implement a software-based fallback for an image filtering shader program when the graphics card hardware does not support shading language.

This function is only available for shader objects associated with IDLgrImage objects, and is activated only when the required hardware support is not present or when the FORCE_FILTER property of the shader object or IDLgrFilterChain object is set to a non-zero value.

Note: Never call this method directly. It is called automatically in response to changes requiring a re-draw of the scene, including IDLgrShader::SetUniformVariable updates.

This method should not be included in a subclassed shader object attached to texture mapped IDLgrSurface or IDLgrPolygon object (where an image is associated via the TEXTURE_MAP property). A software fallback option is not available in such cases.

## Syntax

Result = Obj->[IDLgrShader subclass::]Filter( Image )

## Return Value

Returns an IDL array containing the resulting filtered image. The array must have the same dimensions and type as the incoming image. If the returned array does not meet these requirements, IDL ignores the array and draws the image with its original data.

This method should apply the desired operation to the image data and return that data as its function return value. IDL clamps the returned image data to the range [0.0, 1.0] and converts this range into the pixel component range appropriate for the device. In most cases, this is [0, 255].

## Arguments

### Image

An array containing the image data. This array is always of type FLOAT and contains RGBA components arranged in PIXEL_INTERLEAVE format, [4, cols, rows].

## Keywords

None.

## Examples

The following code segment shows an implementation of the Filter method in an object, `shader_rgb_doc`, that subclasses from IDLgrShader. Within the method, access the RGBA floating-point, pixel-interleaved data in Image. Alter the intensity of each red, green, and blue channel based on values (s) contained in the uniform variable (scl). Return the filtered image.

Function shader_rgb_doc::Filter, Image

newImage=Image

self->GetUniformVariable, 'scl', s

newImage[0,*,*] *= s[0]

newImage[1,*,*] *= s[1]

newImage[2,*,*] *= s[2]

RETURN, newImage

END

See `shader_rgb_doc__define.pro` for the complete, working example, which is located in the `examples/doc/shaders` subdirectory of the IDL distribution. Run the example by creating an instance of the object at the IDL command prompt using `orgbshader=OBJ_NEW("shader_rgb_doc")` or view the file in an IDL Editor window by entering `shader_rgb_doc__define.pro`.

## Version History

6.4 | Introduced

## See Also

IDLgrShader::SetUniformVariable