<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>Simple Multitexturing GLSL? [A5]</title>
		<link>http://www.allegro.cc/forums/view/606245</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Sun, 30 Jan 2011 22:24:01 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>So I&#39;ve decided on trying back GLSL, but I&#39;m finding quite a lot of trouble in getting a basic multitexture shader up. I&#39;ve googled for hours, always ending up on the same result. I can&#39;t spot anything else that would be needed on the code, so I would appreciate if someone with more experience could help me. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /></p><p>The expected output is the picture of mysha drawn, with its R color channel replaced by the one in <span class="source-code">op_map.png</span>. Instead, it&#39;s using the R component from the original image, so you can&#39;t spot anything different. It&#39;s as if the two samples pointed to the same texture. <img src="http://www.allegro.cc/forums/smileys/undecided.gif" alt=":-/" /> Switching the bitmaps in the glBindTexture calls produces the same situation, but with op_map instead of mysha. So the first texture is binding well I guess...</p><p>The code is pretty much copy-pasted from various tutorials around, which pretty much say the same on all occasions. I was a bit confused as well since the standard example in the allegro folder was setting the backBuffer sampler to the texture&#39;s ID instead of of a texture unit like GL_TEXTURE0. Which everyone said is a pretty common mistake as well. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" /></p><p>So here&#39;s the code, and I&#39;ve attached the 2 used images(as well as the source).
</p><div class="source-code"><div class="toolbar"><span class="button numbers"><b>#</b></span><span class="button select">Select</span><span class="button expand">Expand</span></div><div class="inner"><span class="number">   1</span><span class="p">#include &lt;allegro5/allegro.h&gt;</span>
<span class="number">   2</span><span class="p">#include &lt;allegro5/allegro_opengl.h&gt;</span>
<span class="number">   3</span><span class="p">#include &lt;allegro5/allegro_image.h&gt;</span>
<span class="number">   4</span><span class="p">#include &lt;stdio.h&gt;</span>
<span class="number">   5</span>
<span class="number">   6</span>
<span class="number">   7</span>GLhandleARB tinter<span class="k2">;</span>
<span class="number">   8</span>GLhandleARB tinter_shader<span class="k2">;</span>
<span class="number">   9</span>
<span class="number">  10</span>
<span class="number">  11</span>
<span class="number">  12</span><span class="k1">void</span> abort_example<span class="k2">(</span><span class="k1">char</span> <span class="k1">const</span> <span class="k3">*</span>format, ...<span class="k2">)</span>
<span class="number">  13</span><span class="k2">{</span>
<span class="number">  14</span>   <span class="k1">char</span> str<span class="k2">[</span><span class="n">1024</span><span class="k2">]</span><span class="k2">;</span>
<span class="number">  15</span>   va_list args<span class="k2">;</span>
<span class="number">  16</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  17</span>
<span class="number">  18</span>   va_start<span class="k2">(</span>args, format<span class="k2">)</span><span class="k2">;</span>
<span class="number">  19</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_855.html" target="_blank">vsnprintf</a><span class="k2">(</span>str, <span class="k1">sizeof</span> str, format, args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  20</span>   va_end<span class="k2">(</span>args<span class="k2">)</span><span class="k2">;</span>
<span class="number">  21</span>
<span class="number">  22</span>   display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_is_system_installed"><span class="a">al_is_system_installed</span></a><span class="k2">(</span><span class="k2">)</span> ? <a href="http://www.allegro.cc/manual/al_get_current_display"><span class="a">al_get_current_display</span></a><span class="k2">(</span><span class="k2">)</span> <span class="k2">:</span> NULL<span class="k2">;</span>
<span class="number">  23</span>   <a href="http://www.allegro.cc/manual/al_show_native_message_box"><span class="a">al_show_native_message_box</span></a><span class="k2">(</span>display, <span class="s">"Error"</span>, <span class="s">"Cannot run example"</span>, str, NULL, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  24</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  25</span><span class="k2">}</span>
<span class="number">  26</span>
<span class="number">  27</span>
<span class="number">  28</span><span class="k1">int</span> main<span class="k2">(</span><span class="k1">void</span><span class="k2">)</span>
<span class="number">  29</span><span class="k2">{</span>
<span class="number">  30</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_DISPLAY"><span class="a">ALLEGRO_DISPLAY</span></a> <span class="k3">*</span>display<span class="k2">;</span>
<span class="number">  31</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>mysha<span class="k2">;</span>
<span class="number">  32</span>   <a href="http://www.allegro.cc/manual/ALLEGRO_BITMAP"><span class="a">ALLEGRO_BITMAP</span></a> <span class="k3">*</span>op_map<span class="k2">;</span>
<span class="number">  33</span>
<span class="number">  34</span>   <span class="k1">const</span> <span class="k1">char</span> <span class="k3">*</span>tinter_shader_src<span class="k2">[</span><span class="k2">]</span> <span class="k3">=</span> <span class="k2">{</span>
<span class="number">  35</span>      <span class="s">"uniform sampler2D base;"</span>,
<span class="number">  36</span>      <span class="s">"uniform sampler2D op_map;"</span>,
<span class="number">  37</span>      <span class="s">"void main() {"</span>,
<span class="number">  38</span>      <span class="s">"  vec4 color;"</span>,
<span class="number">  39</span>      <span class="s">"  vec4 color_map;"</span>,
<span class="number">  40</span>      <span class="s">"  color = texture2D(base, gl_TexCoord[0].st);"</span>,
<span class="number">  41</span>      <span class="s">"  color_map = texture2D(op_map, gl_TexCoord[0].st);"</span>,
<span class="number">  42</span>      <span class="s">" color.r = color_map.r;"</span>,
<span class="number">  43</span>      <span class="s">"  gl_FragColor = color;"</span>,
<span class="number">  44</span>      <span class="s">"}"</span>
<span class="number">  45</span>   <span class="k2">}</span><span class="k2">;</span>
<span class="number">  46</span>   <span class="k1">const</span> <span class="k1">int</span> TINTER_LEN <span class="k3">=</span> <span class="n">10</span><span class="k2">;</span>
<span class="number">  47</span>   GLint loc<span class="k2">;</span>
<span class="number">  48</span>
<span class="number">  49</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_init"><span class="a">al_init</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  50</span>      abort_example<span class="k2">(</span><span class="s">"Could not init Allegro\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  51</span>   <span class="k2">}</span>
<span class="number">  52</span>
<span class="number">  53</span>   <a href="http://www.allegro.cc/manual/al_install_keyboard"><span class="a">al_install_keyboard</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  54</span>   <a href="http://www.allegro.cc/manual/al_init_image_addon"><span class="a">al_init_image_addon</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  55</span>
<span class="number">  56</span>   <a href="http://www.allegro.cc/manual/al_set_new_display_flags"><span class="a">al_set_new_display_flags</span></a><span class="k2">(</span>ALLEGRO_OPENGL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  57</span>   display <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_create_display"><span class="a">al_create_display</span></a><span class="k2">(</span><span class="n">320</span>, <span class="n">200</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  58</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>display<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  59</span>      abort_example<span class="k2">(</span><span class="s">"Error creating display\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  60</span>   <span class="k2">}</span>
<span class="number">  61</span>
<span class="number">  62</span>   mysha <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"mysha.pcx"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  63</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>mysha<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  64</span>      abort_example<span class="k2">(</span><span class="s">"Could not load image.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  65</span>   <span class="k2">}</span>
<span class="number">  66</span>
<span class="number">  67</span>   op_map <span class="k3">=</span> <a href="http://www.allegro.cc/manual/al_load_bitmap"><span class="a">al_load_bitmap</span></a><span class="k2">(</span><span class="s">"op_map.png"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  68</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span>op_map<span class="k2">)</span> <span class="k2">{</span>
<span class="number">  69</span>      abort_example<span class="k2">(</span><span class="s">"Could not load image.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  70</span>   <span class="k2">}</span>
<span class="number">  71</span>
<span class="number">  72</span>
<span class="number">  73</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_have_opengl_extension"><span class="a">al_have_opengl_extension</span></a><span class="k2">(</span><span class="s">"GL_EXT_framebuffer_object"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  74</span>      abort_example<span class="k2">(</span><span class="s">"GL_EXT_framebuffer_object not supported.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  75</span>   <span class="k2">}</span>
<span class="number">  76</span>
<span class="number">  77</span>   <span class="c">// Check for shader support</span>
<span class="number">  78</span>   <span class="k1">if</span> <span class="k2">(</span><span class="k3">!</span><a href="http://www.allegro.cc/manual/al_have_opengl_extension"><span class="a">al_have_opengl_extension</span></a><span class="k2">(</span><span class="s">"GL_ARB_fragment_shader"</span><span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number">  79</span>      abort_example<span class="k2">(</span><span class="s">"Fragment shaders not supported.\n"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  80</span>   <span class="k2">}</span>
<span class="number">  81</span>
<span class="number">  82</span>   tinter_shader <span class="k3">=</span> glCreateShaderObjectARB<span class="k2">(</span>GL_FRAGMENT_SHADER_ARB<span class="k2">)</span><span class="k2">;</span>
<span class="number">  83</span>
<span class="number">  84</span>   glShaderSourceARB<span class="k2">(</span>tinter_shader, TINTER_LEN, tinter_shader_src, NULL<span class="k2">)</span><span class="k2">;</span>
<span class="number">  85</span>   glCompileShaderARB<span class="k2">(</span>tinter_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number">  86</span>   tinter <span class="k3">=</span> glCreateProgramObjectARB<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  87</span>   glAttachObjectARB<span class="k2">(</span>tinter, tinter_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number">  88</span>   glLinkProgramARB<span class="k2">(</span>tinter<span class="k2">)</span><span class="k2">;</span>
<span class="number">  89</span>
<span class="number">  90</span>   glUseProgramObjectARB<span class="k2">(</span>tinter<span class="k2">)</span><span class="k2">;</span>
<span class="number">  91</span>    <span class="c">// Assign base sample to first texture unit</span>
<span class="number">  92</span>   loc <span class="k3">=</span> glGetUniformLocationARB<span class="k2">(</span>tinter, <span class="s">"base"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  93</span>   glUniform1iARB<span class="k2">(</span>loc, GL_TEXTURE0<span class="k2">)</span><span class="k2">;</span>
<span class="number">  94</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d\n"</span>, loc<span class="k2">)</span><span class="k2">;</span>
<span class="number">  95</span>
<span class="number">  96</span>    <span class="c">// Assign opacity map sample to second texture unit</span>
<span class="number">  97</span>   loc <span class="k3">=</span> glGetUniformLocationARB<span class="k2">(</span>tinter, <span class="s">"op_map"</span><span class="k2">)</span><span class="k2">;</span>
<span class="number">  98</span>   glUniform1iARB<span class="k2">(</span>loc, GL_TEXTURE1<span class="k2">)</span><span class="k2">;</span>
<span class="number">  99</span>   <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%d\n"</span>, loc<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 100</span>   glUseProgramObjectARB<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 101</span>
<span class="number"> 102</span>   <span class="k1">while</span> <span class="k2">(</span><span class="n">1</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 103</span>      <a href="http://www.allegro.cc/manual/ALLEGRO_KEYBOARD_STATE"><span class="a">ALLEGRO_KEYBOARD_STATE</span></a> state<span class="k2">;</span>
<span class="number"> 104</span>      <a href="http://www.allegro.cc/manual/al_get_keyboard_state"><span class="a">al_get_keyboard_state</span></a><span class="k2">(</span><span class="k3">&amp;</span>state<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 105</span>      <span class="k1">if</span> <span class="k2">(</span><a href="http://www.allegro.cc/manual/al_key_down"><span class="a">al_key_down</span></a><span class="k2">(</span><span class="k3">&amp;</span>state, ALLEGRO_KEY_ESCAPE<span class="k2">)</span><span class="k2">)</span> <span class="k2">{</span>
<span class="number"> 106</span>         <span class="k1">break</span><span class="k2">;</span>
<span class="number"> 107</span>      <span class="k2">}</span>
<span class="number"> 108</span>
<span class="number"> 109</span>      glUseProgramObjectARB<span class="k2">(</span>tinter<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 110</span>
<span class="number"> 111</span>      glActiveTexture<span class="k2">(</span>GL_TEXTURE0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 112</span>      glBindTexture<span class="k2">(</span>GL_TEXTURE_2D, <a href="http://www.allegro.cc/manual/al_get_opengl_texture"><span class="a">al_get_opengl_texture</span></a><span class="k2">(</span>mysha<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 113</span>
<span class="number"> 114</span>      glActiveTexture<span class="k2">(</span>GL_TEXTURE1<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 115</span>      glBindTexture<span class="k2">(</span>GL_TEXTURE_2D, <a href="http://www.allegro.cc/manual/al_get_opengl_texture"><span class="a">al_get_opengl_texture</span></a><span class="k2">(</span>op_map<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 116</span>
<span class="number"> 117</span>      glBegin<span class="k2">(</span>GL_QUADS<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 118</span>
<span class="number"> 119</span>      <span class="k1">float</span> sx, sy, fx, fy<span class="k2">;</span>
<span class="number"> 120</span>      sx <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span> sy <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 121</span>      fx <span class="k3">=</span> <span class="n">320</span><span class="k2">;</span> fy <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>
<span class="number"> 122</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE0, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 123</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE1, <span class="n">0</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 124</span>      glVertex3f<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 125</span>
<span class="number"> 126</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE0, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 127</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE1, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 128</span>      glVertex3f<span class="k2">(</span><span class="n">0</span>.<span class="n">0</span>, fy, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 129</span>
<span class="number"> 130</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE0, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 131</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE1, <span class="n">1</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 132</span>      glVertex3f<span class="k2">(</span>fx, fy, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 133</span>
<span class="number"> 134</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE0, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 135</span>      glMultiTexCoord2f<span class="k2">(</span>GL_TEXTURE1, <span class="n">1</span>.<span class="n">0</span>, <span class="n">1</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 136</span>      glVertex3f<span class="k2">(</span>fx, <span class="n">0</span>.<span class="n">0</span>, <span class="n">0</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 137</span>      glEnd<span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 138</span>
<span class="number"> 139</span>      glActiveTexture<span class="k2">(</span>GL_TEXTURE0<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 140</span>
<span class="number"> 141</span>      glUseProgramObjectARB<span class="k2">(</span><span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 142</span>      <a href="http://www.allegro.cc/manual/al_flip_display"><span class="a">al_flip_display</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 143</span>      <a href="http://www.allegro.cc/manual/al_rest"><span class="a">al_rest</span></a><span class="k2">(</span><span class="n">0</span>.<span class="n">001</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 144</span>   <span class="k2">}</span>
<span class="number"> 145</span>
<span class="number"> 146</span>   glDetachObjectARB<span class="k2">(</span>tinter, tinter_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 147</span>   glDeleteObjectARB<span class="k2">(</span>tinter_shader<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 148</span>
<span class="number"> 149</span>   <a href="http://www.allegro.cc/manual/al_uninstall_system"><span class="a">al_uninstall_system</span></a><span class="k2">(</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 150</span>
<span class="number"> 151</span>   <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span>
<span class="number"> 152</span><span class="k2">}</span>
<span class="number"> 153</span>
<span class="number"> 154</span><span class="c">/* vim: set sts=3 sw=3 et: */</span>
</div></div><p>
And a <a href="http://www.allegro.cc/files/attachment/603266">clicky</a> for the attachment.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Sun, 30 Jan 2011 21:41:18 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/606245/901124#target">Dario ff</a> said:</div><div class="quote"><p><span class="source-code">glUniform1iARB<span class="k2">(</span>loc, GL_TEXTURE0<span class="k2">)</span><span class="k2">;</span></span></p></div></div><p>
The sampler uniform doesn&#39;t take the GL_TEXTUREx define as a value - it takes the actual number of the texture unit the texture is bound to (in this case, 0).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (gnolam)</author>
		<pubDate>Sun, 30 Jan 2011 22:12:11 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks, it works with that. <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" /> I wonder why every tutorial I was reading was actually doing it wrong? I will blame gamedev.net for this one. <img src="http://www.allegro.cc/forums/smileys/tongue.gif" alt=":P" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Dario ff)</author>
		<pubDate>Sun, 30 Jan 2011 22:24:01 +0000</pubDate>
	</item>
</rss>
