<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.mxwendler.net/index.php?action=history&amp;feed=atom&amp;title=FXPack_Shader_Reference</id>
	<title>FXPack Shader Reference - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.mxwendler.net/index.php?action=history&amp;feed=atom&amp;title=FXPack_Shader_Reference"/>
	<link rel="alternate" type="text/html" href="https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;action=history"/>
	<updated>2026-08-09T07:55:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.3</generator>
	<entry>
		<id>https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;diff=6133&amp;oldid=prev</id>
		<title>Admin: Escape angle-bracket placeholders in code lines (fixes stray HTML &lt;b&gt; bolding rest of page)</title>
		<link rel="alternate" type="text/html" href="https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;diff=6133&amp;oldid=prev"/>
		<updated>2026-08-08T14:39:54Z</updated>

		<summary type="html">&lt;p&gt;Escape angle-bracket placeholders in code lines (fixes stray HTML &amp;lt;b&amp;gt; bolding rest of page)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:39, 8 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l163&quot;&gt;Line 163:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 163:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; uniform with six underscores becomes an operator-facing, automatable slider:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; uniform with six underscores becomes an operator-facing, automatable slider:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  uniform float mxw_vertslider_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;Label&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;lo&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;hi&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;default&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_mxw;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  uniform float mxw_vertslider_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;Label&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;lo&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;hi&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;default&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_mxw;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;vertslider&amp;lt;/code&amp;gt; — the widget type (currently the only slider type)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;lt;code&amp;gt;vertslider&amp;lt;/code&amp;gt; — the widget type (currently the only slider type)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l193&quot;&gt;Line 193:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 193:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &amp;lt;code&amp;gt;vec4&amp;lt;/code&amp;gt; uniform with seven underscores becomes a color picker (RGBA):&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &amp;lt;code&amp;gt;vec4&amp;lt;/code&amp;gt; uniform with seven underscores becomes a color picker (RGBA):&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  uniform vec4 mxw_colorcontrol_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;Label&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;r&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;g&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;b&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;lt;&lt;/del&gt;a&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;gt;&lt;/del&gt;_mxw;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;  uniform vec4 mxw_colorcontrol_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;Label&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;r&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;g&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;b&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;lt;&lt;/ins&gt;a&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&amp;amp;gt;&lt;/ins&gt;_mxw;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Each component is an encoded number in 0…1. Example — a tint control defaulting to opaque dark blue:&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Each component is an encoded number in 0…1. Example — a tint control defaulting to opaque dark blue:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;diff=6132&amp;oldid=prev</id>
		<title>Admin: Remove internal source-code reference (bot)</title>
		<link rel="alternate" type="text/html" href="https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;diff=6132&amp;oldid=prev"/>
		<updated>2026-08-08T14:37:41Z</updated>

		<summary type="html">&lt;p&gt;Remove internal source-code reference (bot)&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:37, 8 August 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{TOCright}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{TOCright}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This is the normative reference for MXWendler&#039;s FXPack shader interface — the exact tables and naming rules the loader implements &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(see &amp;lt;code&amp;gt;mxw_effect.cpp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mxw_effectbase::setSource()&amp;lt;/code&amp;gt;)&lt;/del&gt;. For a step-by-step, task-oriented guide (minimal shader, worked example, packaging, writing effects with Claude) see [[Writing FXPack Shaders]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This is the normative reference for MXWendler&#039;s FXPack shader interface — the exact tables and naming rules the &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;effect &lt;/ins&gt;loader implements. For a step-by-step, task-oriented guide (minimal shader, worked example, packaging, writing effects with Claude) see [[Writing FXPack Shaders]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;See also: [[Effects]] · [[Tutorial Coupling Video with Effects and Audio Signals]]&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;See also: [[Effects]] · [[Tutorial Coupling Video with Effects and Audio Signals]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;diff=6125&amp;oldid=prev</id>
		<title>Admin: Create FXPack Shader Reference (split from howto); no inline bold (bot)</title>
		<link rel="alternate" type="text/html" href="https://wiki.mxwendler.net/index.php?title=FXPack_Shader_Reference&amp;diff=6125&amp;oldid=prev"/>
		<updated>2026-08-08T14:31:17Z</updated>

		<summary type="html">&lt;p&gt;Create FXPack Shader Reference (split from howto); no inline bold (bot)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{TOCright}}&lt;br /&gt;
This is the normative reference for MXWendler&amp;#039;s FXPack shader interface — the exact tables and naming rules the loader implements (see &amp;lt;code&amp;gt;mxw_effect.cpp&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;mxw_effectbase::setSource()&amp;lt;/code&amp;gt;). For a step-by-step, task-oriented guide (minimal shader, worked example, packaging, writing effects with Claude) see [[Writing FXPack Shaders]].&lt;br /&gt;
&lt;br /&gt;
See also: [[Effects]] · [[Tutorial Coupling Video with Effects and Audio Signals]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Overview==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
An FXPack is MXWendler&amp;#039;s shader-effect container format: a plain ZIP archive with the extension &amp;lt;code&amp;gt;.fxpack&amp;lt;/code&amp;gt; that bundles one or more GLSL shader stages together with any auxiliary textures and a readme. Dropping an &amp;lt;code&amp;gt;.fxpack&amp;lt;/code&amp;gt; file into the &amp;lt;code&amp;gt;effects/&amp;lt;/code&amp;gt; folder makes a new effect available in Preload Preview, the Live Editor and on the Render Output — no recompilation of MXWendler is required.&lt;br /&gt;
&lt;br /&gt;
The interface works by naming convention: MXWendler scans your shader source for &amp;lt;code&amp;gt;uniform&amp;lt;/code&amp;gt; declarations whose names start with &amp;lt;code&amp;gt;mxw_&amp;lt;/code&amp;gt; and contain &amp;lt;code&amp;gt;_mxw&amp;lt;/code&amp;gt;. Those are recognised automatically and are either fed a live engine value every frame (time, resolution, input frames …) or turned into a UI control (a slider or a color picker) that the operator can automate. Every other uniform is a normal private uniform you set yourself inside the shader.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Package structure==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
An &amp;lt;code&amp;gt;.fxpack&amp;lt;/code&amp;gt; is a ZIP file with this internal layout:&lt;br /&gt;
&lt;br /&gt;
 MyEffect.fxpack            (a ZIP archive)&lt;br /&gt;
 ├── effects/&lt;br /&gt;
 │     └── MyEffect.mxf     ← fragment shader (required)&lt;br /&gt;
 │     └── MyEffect.mxv     ← vertex shader        (optional)&lt;br /&gt;
 │     └── MyEffect.mxg     ← geometry shader      (optional)&lt;br /&gt;
 │     └── MyEffect.mxtc    ← tessellation control (optional)&lt;br /&gt;
 │     └── MyEffect.mxte    ← tessellation eval    (optional)&lt;br /&gt;
 ├── textures/&lt;br /&gt;
 │     └── myLookup.bmp     ← auxiliary textures   (optional)&lt;br /&gt;
 └── readme.txt             ← human description    (recommended)&lt;br /&gt;
&lt;br /&gt;
Notes:&lt;br /&gt;
* The effect name shown in the MXWendler UI is taken from the &amp;lt;code&amp;gt;.fxpack&amp;lt;/code&amp;gt; file name, not from the file inside.&lt;br /&gt;
* Inside &amp;lt;code&amp;gt;effects/&amp;lt;/code&amp;gt; the loader picks the first file matching each stage extension, so the base name is free — but matching it to the pack name keeps things tidy.&lt;br /&gt;
* At most one file per shader stage. A minimal effect is just a single &amp;lt;code&amp;gt;.mxf&amp;lt;/code&amp;gt; fragment shader.&lt;br /&gt;
* Auxiliary textures live in a &amp;lt;code&amp;gt;textures/&amp;lt;/code&amp;gt; sub-folder and are wired up through sampler uniforms (see [[#Auxiliary textures|Auxiliary textures]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Shader stages and file extensions==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Each GLSL pipeline stage is a separate file, identified by extension:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Extension !! Stage !! Required&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.mxv&amp;lt;/code&amp;gt; || Vertex shader || no&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.mxf&amp;lt;/code&amp;gt; || Fragment shader || yes (the workhorse)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.mxg&amp;lt;/code&amp;gt; || Geometry shader || no&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.mxtc&amp;lt;/code&amp;gt; || Tessellation control shader || no&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.mxte&amp;lt;/code&amp;gt; || Tessellation evaluation shader || no&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Most effects are pure image processing and only need the fragment shader. If a tessellation stage is present, MXWendler switches the geometry to &amp;lt;code&amp;gt;GL_PATCHES&amp;lt;/code&amp;gt; automatically.&lt;br /&gt;
&lt;br /&gt;
Target GLSL version is 120 (&amp;lt;code&amp;gt;#version 120&amp;lt;/code&amp;gt;) for maximum cross-platform / macOS compatibility. Higher versions work on desktop GL but may be skipped on older macOS.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==The interface: mxw_..._mxw uniforms==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
The loader tokenises your source, strips comments, and inspects every &amp;lt;code&amp;gt;uniform&amp;lt;/code&amp;gt; declaration. A uniform participates in the MXWendler interface only if its name starts with &amp;lt;code&amp;gt;mxw_&amp;lt;/code&amp;gt; and contains &amp;lt;code&amp;gt;_mxw&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Which kind of interface a uniform becomes is decided by its GLSL type and by how many underscores its name contains:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Underscore count !! Meaning&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sampler2D&amp;lt;/code&amp;gt; || – || Input texture (video frame, feedback, or aux image)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || 2 || A live engine value (time, resolution …)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; || 6 || A slider UI control&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;vec4&amp;lt;/code&amp;gt; || 7 || A color picker UI control&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
;Number encoding&lt;br /&gt;
Because GLSL identifiers cannot contain &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;, numeric values baked into uniform names are encoded:&lt;br /&gt;
* &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; stands for the decimal point → &amp;lt;code&amp;gt;0x5&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;0.5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;100x0&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;100.0&amp;lt;/code&amp;gt;&lt;br /&gt;
* a leading &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; means negative → &amp;lt;code&amp;gt;n0x5&amp;lt;/code&amp;gt; = &amp;lt;code&amp;gt;-0.5&amp;lt;/code&amp;gt; (slider ranges only)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Live engine values (global uniforms)==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Declare a &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; uniform named &amp;lt;code&amp;gt;mxw_&amp;lt;value&amp;gt;_mxw&amp;lt;/code&amp;gt; and MXWendler updates it every frame:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Uniform !! Value supplied each frame&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_millis_mxw&amp;lt;/code&amp;gt; || Wall-clock time in milliseconds — use for animation&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_maxU_mxw&amp;lt;/code&amp;gt; || Input texture width in pixels&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_maxV_mxw&amp;lt;/code&amp;gt; || Input texture height in pixels&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_reciprocalU_mxw&amp;lt;/code&amp;gt; || 1 / width (multiply texcoords by this to normalise to 0..1)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_reciprocalV_mxw&amp;lt;/code&amp;gt; || 1 / height&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_viewportsizeX_mxw&amp;lt;/code&amp;gt; || Render viewport width in pixels&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_viewportsizeY_mxw&amp;lt;/code&amp;gt; || Render viewport height in pixels&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_footagesizeX_mxw&amp;lt;/code&amp;gt; || Source footage width in pixels&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_footagesizeY_mxw&amp;lt;/code&amp;gt; || Source footage height in pixels&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_footageframelength_mxw&amp;lt;/code&amp;gt; || Number of frames in the source footage&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_framenumber_mxw&amp;lt;/code&amp;gt; || Current footage frame number&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_framecounterenvironment_mxw&amp;lt;/code&amp;gt; || Global engine frame counter&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_outputLuminance1x1_mxw&amp;lt;/code&amp;gt; || Average luminance of the output (1×1 reduction)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Declaring an unknown &amp;lt;code&amp;gt;mxw_..._mxw&amp;lt;/code&amp;gt; float with two underscores is an error and the shader will fail to load.&lt;br /&gt;
&lt;br /&gt;
;Coordinate system — important&lt;br /&gt;
MXWendler binds video frames as rectangle textures, so &amp;lt;code&amp;gt;gl_TexCoord[0].xy&amp;lt;/code&amp;gt; arrives in pixels (0…width, 0…height), not normalised 0…1. Use the reciprocal/max uniforms to convert. The standard helpers used throughout the stock effects are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;glsl&amp;quot;&amp;gt;&lt;br /&gt;
uniform float mxw_reciprocalU_mxw;&lt;br /&gt;
uniform float mxw_reciprocalV_mxw;&lt;br /&gt;
uniform float mxw_maxU_mxw;&lt;br /&gt;
uniform float mxw_maxV_mxw;&lt;br /&gt;
&lt;br /&gt;
// pixel coords -&amp;gt; 0..1&lt;br /&gt;
vec2 normalizedTc(vec2 tc) {&lt;br /&gt;
    return tc * vec2(mxw_reciprocalU_mxw, mxw_reciprocalV_mxw);&lt;br /&gt;
}&lt;br /&gt;
// 0..1 -&amp;gt; pixel coords (needed before texture2D lookups)&lt;br /&gt;
vec2 unNormalizedTc(vec2 tc) {&lt;br /&gt;
    return tc * vec2(mxw_maxU_mxw, mxw_maxV_mxw);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Input textures (samplers)==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Video input arrives through &amp;lt;code&amp;gt;sampler2D&amp;lt;/code&amp;gt; uniforms. The name selects &amp;#039;&amp;#039;which&amp;#039;&amp;#039; frame:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Uniform pattern !! Delivers&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_tex_plus_0_mxw&amp;lt;/code&amp;gt; || The current input frame (the normal case)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_tex_plus_N_mxw&amp;lt;/code&amp;gt; || The frame N steps in the future (look-ahead)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_tex_minus_N_mxw&amp;lt;/code&amp;gt; || The frame N steps in the past — enables trails / motion blur / temporal feedback&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_tex_render_prefinalfx_minus_N_mxw&amp;lt;/code&amp;gt; || Feedback of the render output (before final FX), N frames back&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;mxw_accum_buffer_N_mxw&amp;lt;/code&amp;gt; || Multi-Render-Target accumulation buffer N (advanced ping-pong)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Sample any of them with &amp;lt;code&amp;gt;texture2D(sampler, pixelCoords)&amp;lt;/code&amp;gt; where the coordinates are in &amp;#039;&amp;#039;pixels&amp;#039;&amp;#039; (use &amp;lt;code&amp;gt;unNormalizedTc()&amp;lt;/code&amp;gt; if you computed a 0..1 coordinate). Requesting past/future frames (&amp;lt;code&amp;gt;minus&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;plus&amp;lt;/code&amp;gt; with N&amp;amp;gt;0) tells the engine to keep a rolling history of frames for this effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==UI controls==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
===Sliders===&lt;br /&gt;
A &amp;lt;code&amp;gt;float&amp;lt;/code&amp;gt; uniform with six underscores becomes an operator-facing, automatable slider:&lt;br /&gt;
&lt;br /&gt;
 uniform float mxw_vertslider_&amp;lt;Label&amp;gt;_&amp;lt;lo&amp;gt;_&amp;lt;hi&amp;gt;_&amp;lt;default&amp;gt;_mxw;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;vertslider&amp;lt;/code&amp;gt; — the widget type (currently the only slider type)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;Label&amp;amp;gt;&amp;lt;/code&amp;gt; — a single-token name shown in the UI (no spaces/underscores; use CamelCase)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;lo&amp;amp;gt; &amp;amp;lt;hi&amp;amp;gt;&amp;lt;/code&amp;gt; — slider range (encoded numbers, may be negative with &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;)&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;default&amp;amp;gt;&amp;lt;/code&amp;gt; — start value&lt;br /&gt;
&lt;br /&gt;
Example — a &amp;quot;Resolution&amp;quot; knob from 0.1 to 10.0 starting at 0.5:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;glsl&amp;quot;&amp;gt;&lt;br /&gt;
uniform float mxw_vertslider_Resolution_0x1_10x0_0x5_mxw;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;The Master convention&lt;br /&gt;
By convention almost every stock effect exposes a Master slider (0…1, default 1) and uses it to cross-fade between the untouched input and the processed result, so the effect can be dialled in smoothly and automated:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;glsl&amp;quot;&amp;gt;&lt;br /&gt;
uniform float mxw_vertslider_Master_0x0_1x0_1x0_mxw;&lt;br /&gt;
...&lt;br /&gt;
gl_FragColor = mix(&lt;br /&gt;
    texture2D(mxw_tex_plus_0_mxw, gl_TexCoord[0].xy),  // original&lt;br /&gt;
    processedColor,                                    // your result&lt;br /&gt;
    mxw_vertslider_Master_0x0_1x0_1x0_mxw);            // dry/wet&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Following this convention is strongly recommended — it makes your effect behave like the built-ins.&lt;br /&gt;
&lt;br /&gt;
===Color pickers===&lt;br /&gt;
A &amp;lt;code&amp;gt;vec4&amp;lt;/code&amp;gt; uniform with seven underscores becomes a color picker (RGBA):&lt;br /&gt;
&lt;br /&gt;
 uniform vec4 mxw_colorcontrol_&amp;lt;Label&amp;gt;_&amp;lt;r&amp;gt;_&amp;lt;g&amp;gt;_&amp;lt;b&amp;gt;_&amp;lt;a&amp;gt;_mxw;&lt;br /&gt;
&lt;br /&gt;
Each component is an encoded number in 0…1. Example — a tint control defaulting to opaque dark blue:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;glsl&amp;quot;&amp;gt;&lt;br /&gt;
uniform vec4 mxw_colorcontrol_Tint_0x0_0x1_0x25_1x0_mxw;  // rgba = (0.0, 0.1, 0.25, 1.0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Auxiliary textures==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
To ship a fixed lookup image (gradient, mask, logo, LUT strip …) with your effect, place the file in the &amp;lt;code&amp;gt;textures/&amp;lt;/code&amp;gt; folder of the ZIP and reference it with a sampler whose name encodes the file name. The last underscore before &amp;lt;code&amp;gt;_mxw&amp;lt;/code&amp;gt; separates the extension:&lt;br /&gt;
&lt;br /&gt;
 textures/myGradient.bmp   ⇄   uniform sampler2D mxw_tex_myGradient_bmp_mxw;&lt;br /&gt;
 textures/mixred.bmp       ⇄   uniform sampler2D mxw_tex_mixred_bmp_mxw;&lt;br /&gt;
&lt;br /&gt;
Rules:&lt;br /&gt;
* Pattern: &amp;lt;code&amp;gt;mxw_tex_&amp;amp;lt;basename&amp;amp;gt;_&amp;amp;lt;ext&amp;amp;gt;_mxw&amp;lt;/code&amp;gt; maps to &amp;lt;code&amp;gt;textures/&amp;amp;lt;basename&amp;amp;gt;.&amp;amp;lt;ext&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* The base name must not start with &amp;lt;code&amp;gt;plus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;minus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;render&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;accum&amp;lt;/code&amp;gt; — those prefixes are reserved for the frame samplers above.&lt;br /&gt;
* A missing texture file makes the effect fail to load.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;noprint&amp;quot;&amp;gt;&lt;br /&gt;
==Rules and gotchas==&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
* Interface uniforms are matched by name, so spelling and underscore count matter. A slider needs exactly 6 underscores; a color picker exactly 7; a live value exactly 2.&lt;br /&gt;
* Labels are single tokens — no spaces or underscores inside &amp;lt;code&amp;gt;&amp;amp;lt;Label&amp;amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Encode decimals with &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; and negatives with a leading &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;-0.5&amp;lt;/code&amp;gt; → &amp;lt;code&amp;gt;n0x5&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Do not declare the same interface uniform in two stages of one effect (e.g. &amp;lt;code&amp;gt;mxw_millis_mxw&amp;lt;/code&amp;gt; in both the vertex and fragment shader). Declare it in one stage and pass the value on — this is also faster.&lt;br /&gt;
* Commented-out uniforms are ignored (comments are stripped before scanning), so you can safely park declarations behind &amp;lt;code&amp;gt;//&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;/* */&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Texture coordinates are in pixels, not 0..1 — normalise with &amp;lt;code&amp;gt;mxw_reciprocalU/V_mxw&amp;lt;/code&amp;gt; and un-normalise before every &amp;lt;code&amp;gt;texture2D&amp;lt;/code&amp;gt; lookup.&lt;br /&gt;
* Target &amp;lt;code&amp;gt;#version 120&amp;lt;/code&amp;gt; for portability.&lt;br /&gt;
&lt;br /&gt;
[[Category:Effects]]&lt;br /&gt;
[[Category:Reference]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>