Type Function Library graphics.* Return value none Revision 2017.3060 Keywords shaders, effects, graphics See also Custom Shader Effects (guide) Filters / Generators / Composites (guide) customFilter (sample)
This function allows you to extend Corona and define a custom shader effect. Your custom effect can define either a vertex kernel or a fragment kernel (or both). These kernels are similar to shaders, except that they must define functions with a specific name and which conform to specific function signatures.
See the Custom Shader Effects guide for a detailed explanation of how to write shader code for these kernels.
Custom effects are supported on iOS, Android, macOS desktop, and Win32 desktop. Windows Phone 8 does not support this capability because it only supports precompiled shaders.
graphics.defineEffect( effect )
Table. Table which defines a shader effect — see the next section for details.
The effect table can contain the following properties:
String. The category for the effect. This determines the number of input textures:
"generator" — Assumes 0 input textures."filter" — Assumes 1 input texture."composite" — Assumes 2 input textures.String. The name of the group that the effect belongs to. While built-in effects have no name, custom effects are placed in the "custom" group by default. You can override this default by passing in a different group name.
String. A name which uniquely identifies the effect within a category. This must not conflict with a category property and group property, this determines the full name of the effect that you assign to a Paint object as "<category>.<group>.<name>"
String. The shader code for the fragment kernel. See Fragment Kernels in the Custom Shader Effects guide. Note that this is not required if the vertex property is set.
String. The shader code for the vertex kernel. See Vertex Kernels in the Custom Shader Effects guide. Note that this is not required if the fragment property is set.
Boolean. If the vertex or fragment kernel depends on time (the output varies with time), set this to true. The default false, meaning the kernel does not use time in its calculations.
Table. This allows you to specify named parameters for your effect. You can specify up to four parameters, each of which is a scalar (float). See Effect Parameters in the Custom Shader Effects guide for more information. Note that you can specify either vertexData or uniformData but not both.
Table. This allows you to specify named parameters for your effect. You can specify up to four parameters, each of which can be a different type: scalar (float), vec2 vec3, vec4, mat3, or mat4. See Effect Parameters in the Custom Shader Effects guide for more information. Note that you can specify either vertexData or uniformData but not both.
-- An effect that brightens each pixel
-- Usage: object.fill.effect = "filter.custom.myBrighten"
local kernel = {}
kernel.category = "filter"
kernel.name = "myBrighten"
kernel.fragment =
[[
P_COLOR vec4 FragmentKernel( P_UV vec2 texCoord )
{
P_COLOR float brightness = 0.5;
P_COLOR vec4 texColor = texture2D( CoronaSampler0, texCoord );
// Pre-multiply the alpha to brightness
brightness = brightness * texColor.a;
// Add the brightness
texColor.rgb += brightness;
// Modulate by the display object's combined alpha/tint
return CoronaColorScale( result );
}
]]
graphics.defineEffect( kernel )