<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><p class="" style="box-sizing: border-box; margin: 0px 0px 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">Hi,</p><p class="" style="box-sizing: border-box; margin: 0px 0px 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">I want to ask how to pass uniform and attribute from host to shader by vtk’s python wrapping.</p><p class="" style="box-sizing: border-box; margin: 0px 0px 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">I follow <a href="file:///Users/Quentan/Library/Caches/Marked%202/Watchers/[http://noeskasmit.com/shaders-vtk-cel-shaded-skull-example-100-lines-python-code/](http://noeskasmit.com/shaders-vtk-cel-shaded-skull-example-100-lines-python-code/)" class="" style="box-sizing: border-box; background-color: transparent; color: rgb(65, 131, 196); text-decoration: none;">this instruction</a> to implement <a href="file:///Users/Quentan/Library/Caches/Marked%202/Watchers/[https://www.shadertoy.com/view/XsXGRS](https://www.shadertoy.com/view/XsXGRS)" class="" style="box-sizing: border-box; background-color: transparent; color: rgb(65, 131, 196); text-decoration: none;">this result</a>, but don’t know how to pass uniform variables from host to fragment shader. </p><p class="" style="box-sizing: border-box; margin: 0px 0px 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">Could anybody tell me how to do this?</p><p class="" style="box-sizing: border-box; margin: 0px 0px 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);">Cheers,<br class="" style="box-sizing: border-box;">Quentan</p><hr class="" style="box-sizing: content-box; height: 4px; margin: 16px 0px; overflow: hidden; background-color: rgb(231, 231, 231); border: 0px none; padding: 0px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px;"><ul class="" style="box-sizing: border-box; padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="box-sizing: border-box;">Shader02.py</li></ul><pre class="" style="box-sizing: border-box; overflow: auto; margin-top: 0px; margin-bottom: 16px; line-height: 1.45; padding: 16px; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: normal; tab-size: 4; height: 2266px;"><code class="(null) nix hljs" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; padding: 0.5em; margin: 0px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border: 0px; display: block; overflow-x: auto; line-height: inherit; word-wrap: normal; height: auto;"><span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">import</span> vtk
<span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">import</span> time

<span class="hljs-attr" style="box-sizing: border-box;">timer</span> = [time.clock()]
<span class="hljs-attr" style="box-sizing: border-box;">resolution</span> = [<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">600</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">480</span>]

<span class="hljs-attr" style="box-sizing: border-box;">file</span> = open('Shader02.vert', 'r')
<span class="hljs-attr" style="box-sizing: border-box;">vert</span> = file.read()
file.close()

<span class="hljs-attr" style="box-sizing: border-box;">file</span> = open('Shader02.frag', 'r')
<span class="hljs-attr" style="box-sizing: border-box;">frag</span> = file.read()
file.close()

<span class="hljs-comment" style="box-sizing: border-box; color: rgb(153, 153, 136); font-style: italic;"># Plane. Is there better way to show ShaderToy's effect without use vtkPlaneSource?</span>
<span class="hljs-attr" style="box-sizing: border-box;">plane</span> = vtk.vtkPlaneSource()
plane.SetNormal([<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>])
plane.SetResolution(<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">100</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">100</span>)
plane.SetOrigin(-<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>, -<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0</span>)
plane.SetPoint1(<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>, -<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>)
plane.SetPoint2(-<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0</span>)

<span class="hljs-attr" style="box-sizing: border-box;">mapper</span> = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(plane.GetOutputPort())
<span class="hljs-attr" style="box-sizing: border-box;"><br class=""></span></code><code class="(null) nix hljs" style="box-sizing: border-box; padding: 0.5em; margin: 0px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border: 0px; display: block; overflow-x: auto; line-height: inherit; word-wrap: normal; height: auto;"><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">actor</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetOpacity(</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">1</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">)

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># Handle the rendering and interaction</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">ren</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkRenderer()
</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">renWin</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkRenderWindow()
renWin.AddRenderer(ren)
</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">iren</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(renWin)

</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">resolutionUniform</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkUniformVariables()
resolutionUniform.SetUniformi('iResolution', </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">2</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, resolution)

</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">timeUniform</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkUniformVariables()
timeUniform.SetUniformf('iGlobalTime', </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">1</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, timer)

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># Now let's get down to shader-business...</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># First we make a ShaderProgram2 and set it up on a date with the RenderWindow</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">pgm</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkShaderProgram2()
pgm.SetContext(renWin)

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># For both the vertex and fragment shader, we need to make a Shader2</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># Also set them up with the RenderWindow, by asking the ShaderProgram2 for</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># an introduction</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">shaderv</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkShader2()
shaderv.SetType(vtk.VTK_SHADER_TYPE_VERTEX)
shaderv.SetSourceCode(vert)
shaderv.SetContext(pgm.GetContext())

</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">shaderf</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = vtk.vtkShader2()
shaderf.SetType(vtk.VTK_SHADER_TYPE_FRAGMENT)
shaderf.SetSourceCode(frag)
shaderf.SetContext(pgm.GetContext())
shaderf.SetUniformVariables(resolutionUniform)  </font><span class="" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; font-style: italic;"># is this correct?</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># print shaderf.GetUniformVariables()</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
shaderf.SetUniformVariables(timeUniform)
</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># print shaderf.GetUniformVariables()</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># Now we add the shaders to the program</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
pgm.GetShaders().AddItem(shaderv)
pgm.GetShaders().AddItem(shaderf)

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># And tell the actor property that it should totally use this cool program</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-attr" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">openGLproperty</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class=""> = actor.GetProperty()
openGLproperty.SetPropProgram(pgm)
openGLproperty.ShadingOn()

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># openGLproperty.AddShaderVariable('iGlobalTime', 1, timer)  # is this correct?</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># openGLproperty.AddShaderVariable('iResolution', 2, resolution)</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">

</font><span class="hljs-comment" style="color: rgb(153, 153, 136); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box; font-style: italic;"># Add the actor and set a nice bg color</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">
ren.AddActor(actor)
ren.SetBackground(</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0.3</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0.4</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">)
ren.SetBackground2(</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0.1</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0.2</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">)
ren.SetGradientBackground(</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">1</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">)
renWin.SetSize(resolution)

iren.Initialize()
ren.GetActiveCamera().SetPosition(</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, -</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">1</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">)
ren.GetActiveCamera().SetViewUp(</font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">0</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">, </font><span class="hljs-number" style="color: rgb(0, 128, 128); font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; box-sizing: border-box;">1</span><font color="#333333" face="Consolas, Liberation Mono, Menlo, Courier, monospace" size="3" class="">)
ren.ResetCamera()
renWin.Render()
iren.Start()
</font></code></pre><ul class="" style="box-sizing: border-box; padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="box-sizing: border-box;">Shader02.vert</li></ul><pre class="" style="box-sizing: border-box; overflow: auto; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; margin-bottom: 16px; line-height: 1.45; padding: 16px; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: normal; tab-size: 4; color: rgb(51, 51, 51); height: 106px;"><code class="(null) hljs glsl" style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; padding: 0.5em; margin: 0px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border: 0px; display: block; overflow-x: auto; line-height: inherit; word-wrap: normal; height: auto;"><span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">void</span> propFuncVS(<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">void</span>) {
  <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">gl_Position</span> = <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec4</span>((<span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">gl_Vertex</span>.xy), <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0.0</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.0</span>);
}</code></pre><ul class="" style="box-sizing: border-box; padding: 0px 0px 0px 2em; margin-top: 0px; margin-bottom: 16px; color: rgb(51, 51, 51); font-family: helvetica, arial, freesans, clean, sans-serif; font-size: 16px; background-color: rgb(255, 255, 255);"><li class="" style="box-sizing: border-box;">Shader02.frag</li></ul><pre class="" style="box-sizing: border-box; overflow: auto; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.600000381469727px; margin-top: 0px; line-height: 1.45; padding: 16px; background-color: rgb(248, 248, 248); border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-wrap: normal; tab-size: 4; color: rgb(51, 51, 51); height: 1386px; margin-bottom: 0px !important;"><code class="(null) hljs glsl" style="box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; padding: 0.5em; margin: 0px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; border: 0px; display: block; overflow-x: auto; line-height: inherit; word-wrap: normal; height: auto;"><span class="hljs-comment" style="box-sizing: border-box; color: rgb(153, 153, 136); font-style: italic;">// ShaderToy: The Blob</span>
<span class="hljs-comment" style="box-sizing: border-box; color: rgb(153, 153, 136); font-style: italic;">// <a href="https://www.shadertoy.com/view/XsXGRS" class="">https://www.shadertoy.com/view/XsXGRS</a></span>

<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">uniform</span> <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> iGlobalTime;  <span class="" style="color: rgb(153, 153, 136); font-style: italic;">// not work. uniform or varying?</span>
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">uniform</span> <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span> iResolution;
<span class="hljs-comment" style="box-sizing: border-box; color: rgb(153, 153, 136); font-style: italic;">// float iGlobalTime = 1.0;</span>
<span class="hljs-comment" style="box-sizing: border-box; color: rgb(153, 153, 136); font-style: italic;">// vec2 iResolution = vec2(600, 480);  // This works, but not from host</span>

<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#ifdef GL_ES</span>
<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">precision</span> <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">highp</span> <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span>;
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#endif</span>

<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#define AA 4.</span>

<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#define CI vec3(.3,.5,.6)</span>
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#define CO vec3(.2)</span>
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#define CM vec3(.0)</span>
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#define CE vec3(.8,.7,.5)</span>

<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> metaball(<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span> p, <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> r)
{
    <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">return</span> r / <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">dot</span>(p, p);
}

<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec3</span> samplef(<span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">in</span> <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span> uv)
{
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#if 1</span>
    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> t0 = <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">sin</span>(iGlobalTime * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.9</span>) * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.46</span>;
    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> t1 = <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">sin</span>(iGlobalTime * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">2.4</span>) * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.49</span>;
    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> t2 = <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">cos</span>(iGlobalTime * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.4</span>) * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.57</span>;

    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> r = metaball(uv + <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span>(t0, t2), <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.33</span>) *
             metaball(uv - <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span>(t0, t1), <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.27</span>) *
             metaball(uv + <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span>(t1, t2), <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.59</span>);

<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#else</span>
  <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> r = <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">length</span>(uv);  <span class="" style="color: rgb(153, 153, 136); font-style: italic;">// test for time-independent</span>

<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#endif</span>
    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec3</span> c = (r > <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.4</span> && r < <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.7</span>)
             ? (<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec3</span>(<span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">step</span>(<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.1</span>, r*r*r)) * CE)
             : (r < <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.9</span> ? (r < <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">.7</span> ? CO: CM) : CI);

    <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">return</span> c;
}

<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">void</span> propFuncFS(<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">void</span>)
{
    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span> uv = (<span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">gl_FragCoord</span>.xy / iResolution.xy * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">2.</span> - <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.</span>)
            * <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span>(iResolution.x / iResolution.y, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>) * <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.25</span>;

    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec3</span> col = <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec3</span>(<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0</span>);

<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#ifdef AA</span>
    <span class="hljs-comment" style="box-sizing: border-box; color: rgb(153, 153, 136); font-style: italic;">// Antialiasing via supersampling</span>
    <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> e = <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.</span> / <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">min</span>(iResolution.y , iResolution.x);
    <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">for</span> (<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> i = -AA; i < AA; ++i) {
        <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">for</span> (<span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">float</span> j = -AA; j < AA; ++j) {
              col += samplef(uv + <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec2</span>(i, j) * (e/AA)) / (<span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">4.</span>*AA*AA);
        }
    }
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#else</span>
    col += <span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold;">sample</span>(uv);
<span class="hljs-meta" style="box-sizing: border-box; color: rgb(153, 153, 153); font-weight: bold;">#endif /* AA */</span>

    <span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">gl_FragColor</span> = <span class="hljs-type" style="box-sizing: border-box; color: rgb(68, 85, 136); font-weight: bold;">vec4</span>(<span class="hljs-built_in" style="box-sizing: border-box; color: rgb(0, 134, 179);">clamp</span>(col, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">0.</span>, <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1.</span>), <span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 128, 128);">1</span>);
}</code></pre><div class=""><br class=""></div></body></html>