<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>&#39;wrap&#39; a texture (in the shader I&#39;d think)</title>
		<link>http://www.allegro.cc/forums/view/618083</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 08 Apr 2020 15:01:45 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>The following code gives an updated bmp to my program except where the wave &quot;runs out of space&quot; and it does not fill the other side of the target. So previously written portions remain there (i.e. stripes).</p><div class="source-code snippet"><div class="inner"><pre>      <a href="http://www.allegro.cc/manual/al_set_target_bitmap"><span class="a">al_set_target_bitmap</span></a><span class="k2">(</span>bmp<span class="k2">)</span><span class="k2">;</span>
      al_use_shader<span class="k2">(</span>waves<span class="k2">)</span><span class="k2">;</span>
      al_set_shader_sampler<span class="k2">(</span><span class="s">"tex"</span>, wtr, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
      al_set_shader_float<span class="k2">(</span><span class="s">"tx"</span> , tx<span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>wtr, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
      al_use_shader<span class="k2">(</span>NULL<span class="k2">)</span><span class="k2">;</span>

      <a href="http://www.allegro.cc/manual/al_set_target_backbuffer"><span class="a">al_set_target_backbuffer</span></a><span class="k2">(</span>display<span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/al_clear_to_color"><span class="a">al_clear_to_color</span></a><span class="k2">(</span><a href="http://www.allegro.cc/manual/al_map_rgb"><span class="a">al_map_rgb</span></a><span class="k2">(</span><span class="n">215</span>, <span class="n">255</span>, <span class="n">255</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
      <a href="http://www.allegro.cc/manual/al_draw_bitmap"><span class="a">al_draw_bitmap</span></a><span class="k2">(</span>bmp, <span class="n">0</span>, <span class="n">0</span>, <span class="n">0</span><span class="k2">)</span><span class="k2">;</span>
etc..
</pre></div></div><p>

</p><div class="source-code snippet"><div class="inner"><pre><span class="c">// Vertex</span>
varying vec2 v_texCoord<span class="k2">;</span>

<span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="k2">{</span>
    v_texCoord <span class="k3">=</span> gl_MultiTexCoord0<span class="k2">;</span>
    gl_Position <span class="k3">=</span> gl_ModelViewProjectionMatrix <span class="k3">*</span> gl_Vertex<span class="k2">;</span>
<span class="k2">}</span>
</pre></div></div><p>

</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="c">//Fragment</span>
<span class="number">  2</span>varying vec2 v_texCoord<span class="k2">;</span>
<span class="number">  3</span>uniform sampler2D tex<span class="k2">;</span>    <span class="c">// used texture unit</span>
<span class="number">  4</span>uniform <span class="k1">float</span> tx<span class="k2">;</span>            <span class="c">// x wave's phase</span>
<span class="number">  5</span>
<span class="number">  6</span>vec2 SineWave<span class="k2">(</span> vec2 p <span class="k2">)</span>
<span class="number">  7</span><span class="k2">{</span>
<span class="number">  8</span>    <span class="k1">float</span> x <span class="k3">=</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_728.html" target="_blank">sin</a><span class="k2">(</span> <span class="k2">(</span>p.y <span class="k3">-</span> tx<span class="k2">)</span><span class="k3">/</span><span class="n">256</span>  <span class="k3">*</span> <span class="n">6</span>.<span class="n">28318</span><span class="k2">)</span> <span class="k3">*</span> <span class="n">0</span>.<span class="n">05</span><span class="k2">;</span>
<span class="number">  9</span>    <span class="k1">return</span> vec2<span class="k2">(</span>p.x<span class="k3">+</span>x, p.y<span class="k2">)</span><span class="k2">;</span>
<span class="number"> 10</span><span class="k2">}</span>
<span class="number"> 11</span>
<span class="number"> 12</span><span class="k1">void</span> main<span class="k2">(</span><span class="k2">)</span>
<span class="number"> 13</span><span class="k2">{</span>
<span class="number"> 14</span>    gl_FragColor <span class="k3">=</span> texture2D<span class="k2">(</span>tex,SineWave<span class="k2">(</span>v_texCoord<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
<span class="number"> 15</span><span class="k2">}</span>
</div></div><p>

I don&#39;t know what to do about this.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A. van Patmos)</author>
		<pubDate>Tue, 31 Mar 2020 23:02:32 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">return</span> vec2<span class="k2">(</span><a href="http://www.delorie.com/djgpp/doc/libc/libc_332.html" target="_blank">fmod</a><span class="k2">(</span>p.x<span class="k3">+</span>x , <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span>, p.y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 31 Mar 2020 23:57:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks, it gives &quot;no matching overloaded function found&quot; which I can fix by using this
</p><div class="source-code snippet"><div class="inner"><pre>rx <span class="k3">=</span> <span class="k2">(</span>p.x<span class="k3">+</span>x<span class="k2">)</span> <span class="k3">-</span> <span class="n">1</span>.<span class="n">0f</span> <span class="k3">*</span> <a href="http://www.delorie.com/djgpp/doc/libc/libc_330.html" target="_blank">floor</a><span class="k2">(</span><span class="k2">(</span>p.x<span class="k3">+</span>x<span class="k2">)</span> <span class="k3">/</span> <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">;</span>
<span class="k1">return</span> vec2<span class="k2">(</span>rx, p.y<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

What do I need for fmod? Should it run through a C preprocessor?<br />(Sorry this is not in the right forum.)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A. van Patmos)</author>
		<pubDate>Wed, 01 Apr 2020 03:27:36 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p><span class="source-code">mod</span> in GLSL is equivalent to C&#39;s <span class="source-code"><a href="http://www.delorie.com/djgpp/doc/libc/libc_332.html" target="_blank">fmod</a></span>. Does that resolve your issue?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (SiegeLord)</author>
		<pubDate>Sun, 05 Apr 2020 01:45:19 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>It does thanks,
</p><div class="source-code snippet"><div class="inner"><pre><span class="k1">return</span> vec2<span class="k2">(</span>mod<span class="k2">(</span>p.x<span class="k3">+</span>x , <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span>, mod<span class="k2">(</span>p.y<span class="k3">+</span>y , <span class="n">1</span>.<span class="n">0f</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
I send an offset (p.x = p.x + delta_x) with every shader call. Can older GLSL versions (like 2.1) have such a &#39;counter&#39; running inside them?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A. van Patmos)</author>
		<pubDate>Mon, 06 Apr 2020 15:00:21 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Shouldn&#39;t this just be a texture wrapping mode change? That&#39;s going to be far more efficient than using the mod() function.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bob)</author>
		<pubDate>Tue, 07 Apr 2020 12:49:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I searched for that before asking, &quot;texture wrapping mode&quot; like e.g. GL_REPEAT right?<br /><a href="https://learnopengl.com/Getting-started/Textures">https://learnopengl.com/Getting-started/Textures</a> says that&#39;s repeating a texture within a bitmap I understand.<br />I&#39;m looking for Doom&#39;s Wall of Faces: <a href="https://www.youtube.com/watch?v=xhs0Gk7E-U8">https://www.youtube.com/watch?v=xhs0Gk7E-U8</a>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (A. van Patmos)</author>
		<pubDate>Tue, 07 Apr 2020 16:11:52 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title">Uncle Bob said:</div><div class="quote"><p>
Shouldn&#39;t this just be a texture wrapping mode change? That&#39;s going to be far more efficient than using the mod() function.
</p></div></div><p>
Bob, how do you do that with a sub texture without the use of mod? Say, in the case of a sprite atlas?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Edgar Reynaldo)</author>
		<pubDate>Tue, 07 Apr 2020 22:09:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah I use mod in my game for maps because all the map tiles are on the same texture. RuneScape does the same thing for its giant texture atlases.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Wed, 08 Apr 2020 04:00:31 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yes, fixed-function texture wrapping (like GL_REPEAT) doesn&#39;t work for atlases. It wasn&#39;t clear from the OP that atlases were involved.</p><p>FWIW, texture arrays are preferred if you can fit your atlas as equally-sized textures.</p><p>Using mod() has some edge cases that need to be handled: large coordinates, negative coordinates, correct padding for anisotropic filters, ... which you don&#39;t need to think about with the HW-provided features.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bob)</author>
		<pubDate>Wed, 08 Apr 2020 08:44:28 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Yeah, my solution for those problems is don&#39;t worry about it. <img src="http://www.allegro.cc/forums/smileys/grin.gif" alt=";D" /> Haha.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Wed, 08 Apr 2020 15:01:45 +0000</pubDate>
	</item>
</rss>
