Class TEffectNode

Unit

Declaration

type TEffectNode = class(TAbstractChildNode)

Description

Shader effect, that can be composed with other effect or standard rendering. See https://castle-engine.io/shaders .

Hierarchy

Overview

Methods

Protected procedure GroupBeforeTraverse(const State: TX3DGraphTraverseState; var WasPointingDeviceSensor: Boolean); override;
Public constructor Create(const AX3DName: String = ''; const ABaseUrl: String = ''); override;
Public procedure CreateNode; override;
Public class function ClassX3DType: String; override;
Public procedure SetParts(const Value: array of TEffectPartNode);
Public procedure SetShaderLibraries(const Value: array of string); overload;
Public procedure SetShaderLibraries(const Value: TCastleStringList); overload;

Properties

Public property FdLanguage: TSFStringEnum read FFdLanguage;
Public property Language: TShaderLanguage read GetLanguage write SetLanguage;
Public property FdEnabled: TSFBool read FFdEnabled;
Public property Enabled: Boolean read GetEnabled write SetEnabled;
Public property FdParts: TMFNode read FFdParts;
Public property FdUniformMissing: TSFStringEnum read FFdUniformMissing;
Public property UniformMissing: TUniformMissing read GetUniformMissing write SetUniformMissing;
Public property FdShaderLibraries: TMFString read FFdShaderLibraries;

Description

Methods

Protected procedure GroupBeforeTraverse(const State: TX3DGraphTraverseState; var WasPointingDeviceSensor: Boolean); override;

This item has no description. Showing description inherited from TX3DNode.GroupBeforeTraverse.

React when this node is processed as an immediate child of a grouping node, within grouping node's BeforeTraverse.

Public constructor Create(const AX3DName: String = ''; const ABaseUrl: String = ''); override;

This item has no description. Showing description inherited from TX3DNode.Create.

Constructor. Initializes various properties:

  • Name, BaseUrl are initialized from given parameters.

  • The Fields, Events lists are filled in every descendant, to have all the fields/events defined by the specification.

  • DefaultContainerField, and other node-specific stuff, is filled in descendants. This is actually implemented in CreateNode, that is called at the end of this constructor.

Public procedure CreateNode; override;

Create node fields and events.

Public class function ClassX3DType: String; override;

This item has no description. Showing description inherited from TX3DNode.ClassX3DType.

Node type name in VRML/X3D, for this class. Normal VRML/X3D node classes should override this to return something non-empty, and then X3DType automatically will return the same value.

Empty for classes that don't have a hardcoded VRML/X3D node name, like a special TX3DUnknownNode. Such special classes should override then X3DType to return actual non-empty name there.

You usually should call X3DType. The only use of this method is that it works on classes (it's "class function"), without needing at actual instance.

Public procedure SetParts(const Value: array of TEffectPartNode);

This item has no description.

Public procedure SetShaderLibraries(const Value: array of string); overload;

Additional libraries of shader code to link with this effect.

Each "shader library" defines a shader code, just like an additional EffectNode. This code can define new GLSL functions to use in your effect code, e.g. position_world_to_eye_space. This code can also use PLUGs just like other effects, so it can influence the rendering and other computations. The engine has (right now hardcoded) logic to provide necessary uniform values for every shader library, so you don't need to do anything additional to make the added code functional.

Right now, only one shader library is allowed: 'castle-shader:/EyeWorldSpace.glsl'. This is linked with both vertex and fragment stages, and exposes new GLSL functions you can use:

vec4 position_world_to_eye_space(vec4 position_world);
vec4 position_eye_to_world_space(vec4 position_eye);

vec3 direction_world_to_eye_space(vec3 direction_world);
vec3 direction_eye_to_world_space(vec3 direction_eye);

See examples/shaders/shader_effects_on_background/ for a demo.

Public procedure SetShaderLibraries(const Value: TCastleStringList); overload;

Additional libraries of shader code to link with this effect.

Each "shader library" defines a shader code, just like an additional EffectNode. This code can define new GLSL functions to use in your effect code, e.g. position_world_to_eye_space. This code can also use PLUGs just like other effects, so it can influence the rendering and other computations. The engine has (right now hardcoded) logic to provide necessary uniform values for every shader library, so you don't need to do anything additional to make the added code functional.

Right now, only one shader library is allowed: 'castle-shader:/EyeWorldSpace.glsl'. This is linked with both vertex and fragment stages, and exposes new GLSL functions you can use:

vec4 position_world_to_eye_space(vec4 position_world);
vec4 position_eye_to_world_space(vec4 position_eye);

vec3 direction_world_to_eye_space(vec3 direction_world);
vec3 direction_eye_to_world_space(vec3 direction_eye);

See examples/shaders/shader_effects_on_background/ for a demo.

Properties

Public property FdLanguage: TSFStringEnum read FFdLanguage;

Internal wrapper for property Language. This wrapper API may change, we advise to access simpler Language instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).

Public property Language: TShaderLanguage read GetLanguage write SetLanguage;

Shading language. Only the GLSL (OpenGL Shading Language) is actually supported. The default value, empty string, is equivalent to GLSL.

Public property FdEnabled: TSFBool read FFdEnabled;

Internal wrapper for property Enabled. This wrapper API may change, we advise to access simpler Enabled instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).

Public property Enabled: Boolean read GetEnabled write SetEnabled;

This item has no description.

Public property FdParts: TMFNode read FFdParts;

Internal wrapper for property Parts. This wrapper API may change, we advise to access simpler Parts instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).

Public property FdUniformMissing: TSFStringEnum read FFdUniformMissing;

Internal wrapper for property UniformMissing. This wrapper API may change, we advise to access simpler UniformMissing instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).

Public property UniformMissing: TUniformMissing read GetUniformMissing write SetUniformMissing;

Should we report a missing uniform value. Setting this to umWarning (default) is useful to spot simple mistakes in naming uniforms. On the other hand, OpenGL aggressively removes unused uniforms from code, and it may cause spurious messages that some uniform is missing – even though the shader is correct, is just doesn't use some uniform value e.g. because no lights are present on the current scene.

Public property FdShaderLibraries: TMFString read FFdShaderLibraries;

Internal wrapper for property ShaderLibraries. This wrapper API may change, we advise to access simpler ShaderLibraries instead, if it is defined (TODO: for now, some field types do not have a simpler counterpart).


Generated by PasDoc 0.16.0-snapshot.