Package Jitter Tools

jit.gl.tf

Manage transform feedback on geometric meshes

Description

The jit.gl.tf object binds to a jit.gl.mesh object, takes input from jit.gl.buffer objects, and uses a shader program defined in a jit.gl.shader object to apply a transform feedback effect on the mesh geometry.

Discussion

Transform feedback is an advanced rendering technique that allows you to capture the state of a shader into a buffer after processing the vertex portion of the transform, then resubmit it to be processed multiple times. This is especially useful for creating GPU based particle systems or for any vertex process that requires multiple stages or prior-state awareness.

To add buffers to the transform feedback process, you need to create both a jit.gl.tf object and one or more jit.gl.buffer objects. The jit.gl.tf object must include an argument for the total number of buffers (inputs) and for each jit.gl.buffer you must specify the buffer type and outname attributes. The type in each jit.gl.buffer must match one of the internal buffers of jit.gl.mesh ( position , normal , color , vertex_attr , etc.) and will override the default buffer to use as directed in the shader. The outname can be any symbol, but is used by the shader to perform the feedback operation in GPU memory, so make sure that it matches the out name in the shader. So if you have a setup like this: then in your shader params declaration you need something like:


			<param name="position" type="vec3" state="POSITION" /> 
<param name="velocity" type="vec3" state="NORMAL" />
		 
and in the program body you would declare both the in AND out names like this:

			in vec3 position; 
in vec3 velocity;
out vec3 Position1;
out vec3 Velocity1;
		 
Once your system is setup you must start the transform feedback via the jit.gl.tf enable attribute.

The following example patches demonstrate transform feedback:

basic locomotion - Basic locomotion
curl noise - Curl noise
flock - Flocking behavior
galaxy chickens - Vector field simulation
oil water - Oil and water interaction
particles billboard - Billboarded particle
particles fx - Particle effects
particles simple - Simple particle system
sculpt - Sculpting effect
strange attractors - Strange attractors simulation
vecfield 2tex - Vector field with two textures

Arguments

numbuffers[int]
optional

The number of inlets to create. Each inlet can bind to a jit.gl.buffer. The maximum is 8, although the actual maximum number of feedback buffers is hardware dependent, usually 4.

Attributes

bufnames[8 symbols]

Currently read only. Displays the list of buffers bound to the jit.gl.tf object. Order of buffers reflects bound inlets from left to right.

enable[int]

Enables transform feedback when set to 1. When disabled, the bound input buffer is passed in its intial state.

It is recommended to disable this before modifying input buffers and reenable it after making changes. Changing input buffer state while enabled may result in unexpected behavior.

initcount[int]

The initial number of primitives that will be passed to the transform feedback stage. Useful for particle simulations when used in conjunction with geometry shaders to create emitters. If set to 0, the entire buffer is passed on enable.

name[symbol]
read-only

The read only name of the jit.gl.tf object. This name is used internally to handle the feedback bindings.

numbuffers[int]

Set as an argument after the jit.gl.tf object name, reports the number of buffer inlets.

shader[symbol]

The name of the jit.gl.shader object for the jit.gl.tf object to bind to.

texture[32 symbols]

The name of the texture or textures bound to the transform feedback shader process (default = none).

Common Box Attributes

Below is a list of attributes shared by all objects. If you want to change one of these attributes for an object based on the object box, you need to place the word sendbox in front of the attribute name, or use the object's Inspector.

annotation[symbol]

Sets the text that will be displayed in the Clue window when the user moves the mouse over the object.

background[int]: 0

Adds or removes the object from the patcher's background layer. background 1 adds the object to the background layer, background 0 removes it. Objects in the background layer are shown behind all objects in the default foreground layer.

color[4 floats]

Sets the color for the object box outline.

fontface[int]

Sets the type style used by the object. The options are:

plain
bold
italic
bold italic Possible values:

0 = 'regular'
1 = 'bold'
2 = 'italic'
3 = 'bold italic'

fontname[symbol]

Sets the object's font.

fontsize[float]

Sets the object's font size (in points). Possible values:

'8'
'9'
'10'
'11'
'12'
'13'
'14'
'16'
'18'
'20'
'24'
'30'
'36'
'48'
'64'
'72'

hidden[int]: 0

Toggles whether an object is hidden when the patcher is locked.

hint[symbol]

Sets the text that will be displayed in as a pop-up hint when the user moves the mouse over the object in a locked patcher.

ignoreclick[int]: 0

Toggles whether an object ignores mouse clicks in a locked patcher.

jspainterfile[symbol]

You can override the default appearance of a user interface object by assigning a JavaScript file with code for painting the object. The file must be in the search path.

patching_rect[4 floats]: 0. 0. 100. 0.

Sets the position and size of the object in the patcher window.

position[2 floats]
write-only

Sets the object's x and y position in both patching and presentation modes (if the object belongs to its patcher's presentation), leaving its size unchanged.

presentation[int]: 0

Sets whether an object belongs to the patcher's presentation.

presentation_rect[4 floats]: 0. 0. 0. 0.

Sets the x and y position and width and height of the object in the patcher's presentation, leaving its patching position unchanged.

rect[4 floats]
write-only

Sets the x and y position and width and height of the object in both patching and presentation modes (if the object belongs to its patcher's presentation).

size[2 floats]
write-only

Sets the object's width and height in both patching and presentation modes (if the object belongs to its patcher's presentation), leaving its position unchanged.

textcolor[4 floats]

Sets the color for the object's text in RGBA format.

textjustification[int]

Sets the justification for the object's text. Possible values:

0 = 'left'
1 = 'center'
2 = 'right'

valuepopup[int]: 0

For objects with single values, enabling valuepopup will display the object's current value in a popup caption when the mouse is over the object or it is being changed with the mouse.

valuepopuplabel[int]: 0

Sets the source of a text label shown in a value popup caption. Possible values:

0 = 'None'
1 = 'Hint'
2 = 'Scripting Name'
3 = 'Parameter Long Name'
4 = 'Parameter Short Name'

varname[symbol]

Sets the patcher's scripting name, which can be used to address the object by name in pattr, scripting messages to thispatcher, and the js object.

Messages

jit_gl_buffer

Binds the named jit.gl.buffer object to the inlet. Note that the incoming buffer must have the outname attribute set in order to reference it in the corresponding jit.gl.shader. The jit.gl.buffer object outlet is pre-formatted with this message prefix, so connecting them automatically binds the incoming buffer.

See Also

Name Description
jit.gl.buffer
jit.gl.mesh Generate GL geometry from matrices
jit.gl.shader Manage a GL shader