<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Magic &#38; Love Interactive</title>
	<atom:link href="http://www.magicandlove.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.magicandlove.com/blog</link>
	<description>Bryan Chung&#039;s website on digital art, entertainment design and software design</description>
	<lastBuildDate>Tue, 01 May 2012 15:01:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.4</generator>
		<item>
		<title>OpenCL Particles System Example in Processing</title>
		<link>http://www.magicandlove.com/blog/2012/05/01/opencl-particles-system-example-in-processing/</link>
		<comments>http://www.magicandlove.com/blog/2012/05/01/opencl-particles-system-example-in-processing/#comments</comments>
		<pubDate>Tue, 01 May 2012 14:47:48 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[OpenCL]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=1015</guid>
		<description><![CDATA[The second example is adopted from the Million Particles example from the MSAOpenCL library. I developed it with Processing 2.0 alpha version without using the library and the Pointer class. All the memory buffers are standard Java.nio.Buffer. The performance is &#8230; <a href="http://www.magicandlove.com/blog/2012/05/01/opencl-particles-system-example-in-processing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The second example is adopted from the Million Particles example from the <a href="http://www.pixelnerve.com/v/2010/07/29/msaopencl-for-java-and-processing/">MSAOpenCL library</a>. I developed it with Processing 2.0 alpha version without using the library and the Pointer class. All the memory buffers are standard <a href="http://docs.oracle.com/javase/1.4.2/docs/api/java/nio/Buffer.html">Java.nio.Buffer</a>. The performance is very acceptable with one million particles in the ATI Radeon HD 4670 graphics card.<br />
&nbsp;<br />
<iframe width="480" height="360" src="http://www.youtube.com/embed/hOTDfXoYxoc?rel=0" frameborder="0" allowfullscreen></iframe><br />
&nbsp;<br />
The Processing source</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.glu.GLU</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.nio.FloatBuffer</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.nio.ByteBuffer</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.nativelibs4java.opencl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.nativelibs4java.opencl.CLMem.Usage</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> PARTICLES_COUNT <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1000000</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">float</span> halfWidth, halfHeight<span style="color: #339933;">;</span>
&nbsp;
GL2 gl<span style="color: #339933;">;</span>
PGL pgl<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> vbo <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
CLContext context<span style="color: #339933;">;</span>
CLQueue queue<span style="color: #339933;">;</span>
CLKernel kernel<span style="color: #339933;">;</span>
&nbsp;
CLBuffer<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> partMem<span style="color: #339933;">;</span>
FloatBuffer partBuf<span style="color: #339933;">;</span>
&nbsp;
CLBuffer<span style="color: #339933;">&lt;</span>Byte<span style="color: #339933;">&gt;</span> posMem<span style="color: #339933;">;</span>
ByteBuffer partPos<span style="color: #339933;">;</span>
&nbsp;
PVector mousePos<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span>screenWidth, screenHeight, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  randomSeed<span style="color: #009900;">&#40;</span>millis<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  halfWidth <span style="color: #339933;">=</span> width<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
  halfHeight <span style="color: #339933;">=</span> height<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
  mousePos <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PVector<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#40;</span>mouseX<span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> halfWidth, halfHeight <span style="color: #339933;">-</span> <span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#40;</span>mouseY<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  PGraphicsOpenGL pg <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PGraphicsOpenGL<span style="color: #009900;">&#41;</span> g<span style="color: #339933;">;</span>
  pgl <span style="color: #339933;">=</span> pg.<span style="color: #006633;">beginPGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">gl</span>.<span style="color: #006633;">getGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getGL2</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glClearColor</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glClear</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_COLOR_BUFFER_BIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glEnable</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_POINT_SMOOTH</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glPointSize</span><span style="color: #009900;">&#40;</span>2f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  initOpenCL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pg.<span style="color: #006633;">endPGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> initOpenCL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  context <span style="color: #339933;">=</span> JavaCL.<span style="color: #006633;">createContextFromCurrentGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  queue <span style="color: #339933;">=</span> context.<span style="color: #006633;">createDefaultQueue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  partBuf <span style="color: #339933;">=</span> FloatBuffer.<span style="color: #006633;">allocate</span><span style="color: #009900;">&#40;</span>PARTICLES_COUNT <span style="color: #339933;">*</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  partPos <span style="color: #339933;">=</span> ByteBuffer.<span style="color: #006633;">allocateDirect</span><span style="color: #009900;">&#40;</span>PARTICLES_COUNT <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #003399;">Float</span>.<span style="color: #006633;">SIZE</span><span style="color: #339933;">/</span><span style="color: #cc66cc;">8</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">order</span><span style="color: #009900;">&#40;</span>context.<span style="color: #006633;">getByteOrder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  FloatBuffer tmpPos <span style="color: #339933;">=</span> partPos.<span style="color: #006633;">asFloatBuffer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> PARTICLES_COUNT<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
    partBuf.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>0.0f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    partBuf.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>0.0f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    partBuf.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0.2</span>, <span style="color: #cc66cc;">2.0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    partBuf.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>0.0f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    tmpPos.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span>width<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tmpPos.<span style="color: #006633;">put</span><span style="color: #009900;">&#40;</span>random<span style="color: #009900;">&#40;</span>height<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  partBuf.<span style="color: #006633;">rewind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  partPos.<span style="color: #006633;">rewind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glGenBuffers</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, vbo, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, vbo<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glBufferData</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span> partPos.<span style="color: #006633;">capacity</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, partPos, GL2.<span style="color: #006633;">GL_DYNAMIC_COPY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  posMem <span style="color: #339933;">=</span> context.<span style="color: #006633;">createBufferFromGLBuffer</span><span style="color: #009900;">&#40;</span>Usage.<span style="color: #006633;">InputOutput</span>, vbo<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  partMem <span style="color: #339933;">=</span> context.<span style="color: #006633;">createFloatBuffer</span><span style="color: #009900;">&#40;</span>Usage.<span style="color: #006633;">InputOutput</span>, partBuf, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #003399;">String</span> pgmSrc <span style="color: #339933;">=</span> join<span style="color: #009900;">&#40;</span>loadStrings<span style="color: #009900;">&#40;</span>dataPath<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Particle.cl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  CLProgram program <span style="color: #339933;">=</span> context.<span style="color: #006633;">createProgram</span><span style="color: #009900;">&#40;</span>pgmSrc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  kernel <span style="color: #339933;">=</span> program.<span style="color: #006633;">build</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">createKernel</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;updateParticle&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  kernel.<span style="color: #006633;">setArg</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, partMem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  kernel.<span style="color: #006633;">setArg</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, posMem<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  kernel.<span style="color: #006633;">setArg</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">float</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span>
    mousePos.<span style="color: #006633;">x</span>, mousePos.<span style="color: #006633;">y</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glMatrixMode</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_PROJECTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glLoadIdentity</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl.<span style="color: #006633;">glu</span>.<span style="color: #006633;">gluOrtho2D</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>halfWidth <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span>, halfWidth <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, <span style="color: #339933;">-</span>halfHeight <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span>, halfHeight <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glMatrixMode</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_MODELVIEW</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glColor3f</span><span style="color: #009900;">&#40;</span>1.0f, 0.8f, 0.0f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, vbo<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  queue.<span style="color: #006633;">finish</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glEnableClientState</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_VERTEX_ARRAY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glVertexPointer</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>, GL.<span style="color: #006633;">GL_FLOAT</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glDrawArrays</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_POINTS</span>, <span style="color: #cc66cc;">0</span>, PARTICLES_COUNT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glDisableClientState</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_VERTEX_ARRAY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  callKernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> callKernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  mousePos.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#40;</span>mouseX<span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> halfWidth, halfHeight <span style="color: #339933;">-</span> <span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#40;</span>mouseY<span style="color: #009900;">&#41;</span>, 0.0f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  CLEvent kernelCompletion<span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">synchronized</span><span style="color: #009900;">&#40;</span>kernel<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    posMem.<span style="color: #006633;">acquireGLObject</span><span style="color: #009900;">&#40;</span>queue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    kernel.<span style="color: #006633;">setArg</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">float</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span>
      mousePos.<span style="color: #006633;">x</span>, mousePos.<span style="color: #006633;">y</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> globalSizes <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span>
      PARTICLES_COUNT
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    kernelCompletion <span style="color: #339933;">=</span> kernel.<span style="color: #006633;">enqueueNDRange</span><span style="color: #009900;">&#40;</span>queue, globalSizes<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    posMem.<span style="color: #006633;">releaseGLObject</span><span style="color: #009900;">&#40;</span>queue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;<br />
The kernel source</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#define DAMP			0.95f</span>
<span style="color: #339900;">#define CENTER_FORCE		0.005f</span>
<span style="color: #339900;">#define MOUSE_FORCE		200.0f</span>
<span style="color: #339900;">#define MIN_SPEED		0.2f</span>
&nbsp;
<span style="color: #0000ff;">typedef</span> <span style="color: #0000ff;">struct</span><span style="color: #008000;">&#123;</span>
	float2 vel<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">float</span> mass<span style="color: #008080;">;</span>
	<span style="color: #0000ff;">float</span> dummy<span style="color: #008080;">;</span>		
<span style="color: #008000;">&#125;</span> Particle<span style="color: #008080;">;</span>
&nbsp;
__kernel <span style="color: #0000ff;">void</span> updateParticle<span style="color: #008000;">&#40;</span>__global Particle<span style="color: #000040;">*</span> particles, 
	__global float2<span style="color: #000040;">*</span> posBuffer, 
	<span style="color: #0000ff;">const</span> float2 mousePos<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> id <span style="color: #000080;">=</span> get_global_id<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	__global Particle <span style="color: #000040;">*</span>p <span style="color: #000080;">=</span> <span style="color: #000040;">&amp;</span>particles<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
&nbsp;
	float2 diff <span style="color: #000080;">=</span> mousePos <span style="color: #000040;">-</span> posBuffer<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">float</span> invDistSQ <span style="color: #000080;">=</span> <span style="color:#800080;">1.0f</span> <span style="color: #000040;">/</span> dot<span style="color: #008000;">&#40;</span>diff, diff<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	diff <span style="color: #000040;">*</span><span style="color: #000080;">=</span> <span style="color: #008000;">&#40;</span>MOUSE_FORCE <span style="color: #000040;">*</span> invDistSQ<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>vel <span style="color: #000040;">+</span><span style="color: #000080;">=</span> <span style="color: #000040;">-</span>posBuffer<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> CENTER_FORCE <span style="color: #000040;">-</span> diff <span style="color: #000040;">*</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>mass<span style="color: #008080;">;</span>
&nbsp;
	<span style="color: #0000ff;">float</span> speed2 <span style="color: #000080;">=</span> dot<span style="color: #008000;">&#40;</span>p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>vel, p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>vel<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>speed2 <span style="color: #000080;">&lt;</span> MIN_SPEED<span style="color: #008000;">&#41;</span> 
		posBuffer<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> mousePos <span style="color: #000040;">+</span> diff <span style="color: #000040;">*</span> <span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #000040;">+</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>mass<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
	posBuffer<span style="color: #008000;">&#91;</span>id<span style="color: #008000;">&#93;</span> <span style="color: #000040;">+</span><span style="color: #000080;">=</span> p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>vel<span style="color: #008080;">;</span>
	p<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>vel <span style="color: #000040;">*</span><span style="color: #000080;">=</span> DAMP<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/05/01/opencl-particles-system-example-in-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Paintings from the OpenCL Particles System</title>
		<link>http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 15:53:25 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[OpenCL]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=1000</guid>
		<description><![CDATA[This is a number of digital paintings from the OpenCL Processing program in the previous post with slight modifications.]]></description>
			<content:encoded><![CDATA[<p>This is a number of digital paintings from the OpenCL Processing program in the <a href="http://www.magicandlove.com/blog/2012/04/29/opencl-particles-system-with-processing/">previous post</a> with slight modifications.</p>

<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint0543/' title='paint0543'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint0543-150x150.png" class="attachment-thumbnail" alt="paint0543" title="paint0543" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint0800/' title='paint0800'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint0800-150x150.png" class="attachment-thumbnail" alt="paint0800" title="paint0800" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint0953/' title='paint0953'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint0953-150x150.png" class="attachment-thumbnail" alt="paint0953" title="paint0953" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint10582/' title='paint10582'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint10582-150x150.png" class="attachment-thumbnail" alt="paint10582" title="paint10582" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint1838/' title='paint1838'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint1838-150x150.png" class="attachment-thumbnail" alt="paint1838" title="paint1838" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint3760/' title='paint3760'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint3760-150x150.png" class="attachment-thumbnail" alt="paint3760" title="paint3760" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint5344/' title='paint5344'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint5344-150x150.png" class="attachment-thumbnail" alt="paint5344" title="paint5344" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint7430/' title='paint7430'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint7430-150x150.png" class="attachment-thumbnail" alt="paint7430" title="paint7430" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint7884/' title='paint7884'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint7884-150x150.png" class="attachment-thumbnail" alt="paint7884" title="paint7884" /></a>
<a href='http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/paint8369/' title='paint8369'><img width="150" height="150" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/paint8369-150x150.png" class="attachment-thumbnail" alt="paint8369" title="paint8369" /></a>

]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/30/paintings-from-the-opencl-particles-system/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCL Particles System with Processing</title>
		<link>http://www.magicandlove.com/blog/2012/04/29/opencl-particles-system-with-processing/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/29/opencl-particles-system-with-processing/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 14:44:44 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[OpenCL]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=995</guid>
		<description><![CDATA[I ported the particles demo program in JavaCL to Processing 2.0 alpha. It has reasonable performance in my iMac up to 500,000 particles at twenty something frames per second. The video is captured using the QuickTime screen recording. The performance &#8230; <a href="http://www.magicandlove.com/blog/2012/04/29/opencl-particles-system-with-processing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I ported the particles demo program in <a href="http://code.google.com/p/javacl/">JavaCL</a> to Processing 2.0 alpha. It has reasonable performance in my iMac up to 500,000 particles at twenty something frames per second. The video is captured using the QuickTime screen recording. The performance is much slower than the original screen version.<br />
&nbsp;<br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/uWEprPigBNs?rel=0" frameborder="0" allowfullscreen></iframe></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.glu.GLU</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.util.Random</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.nativelibs4java.opencl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.nativelibs4java.opencl.CLMem.Usage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.bridj.Pointer</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">static</span> org.<span style="color: #006633;">bridj</span>.<span style="color: #006633;">Pointer</span>.<span style="color: #339933;">*;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> particlesCount <span style="color: #339933;">=</span> <span style="color: #cc66cc;">200000</span><span style="color: #339933;">;</span>
&nbsp;
GL2 gl<span style="color: #339933;">;</span>
PGL pgl<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> vbo <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
CLContext context<span style="color: #339933;">;</span>
CLQueue queue<span style="color: #339933;">;</span>
&nbsp;
Pointer<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> velocities<span style="color: #339933;">;</span>
CLKernel updateParticleKernel<span style="color: #339933;">;</span>
&nbsp;
CLBuffer<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> massesMem, velocitiesMem<span style="color: #339933;">;</span>
CLBuffer<span style="color: #339933;">&lt;</span>Byte<span style="color: #339933;">&gt;</span> interleavedColorAndPositionsMem<span style="color: #339933;">;</span>
Pointer<span style="color: #339933;">&lt;</span>Byte<span style="color: #339933;">&gt;</span> interleavedColorAndPositionsTemp<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">int</span> elementSize <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">*</span><span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">800</span>, <span style="color: #cc66cc;">600</span>, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  randomSeed<span style="color: #009900;">&#40;</span>millis<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  PGraphicsOpenGL pg <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PGraphicsOpenGL<span style="color: #009900;">&#41;</span> g<span style="color: #339933;">;</span>
  pgl <span style="color: #339933;">=</span> pg.<span style="color: #006633;">beginPGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">gl</span>.<span style="color: #006633;">getGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getGL2</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glClearColor</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glClear</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_COLOR_BUFFER_BIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glEnable</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_BLEND</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glEnable</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_POINT_SMOOTH</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glPointSize</span><span style="color: #009900;">&#40;</span>1f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  initOpenCL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pg.<span style="color: #006633;">endPGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> initOpenCL<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  context <span style="color: #339933;">=</span> JavaCL.<span style="color: #006633;">createContextFromCurrentGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  queue <span style="color: #339933;">=</span> context.<span style="color: #006633;">createDefaultQueue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  Pointer<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> masses <span style="color: #339933;">=</span> allocateFloats<span style="color: #009900;">&#40;</span>particlesCount<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">order</span><span style="color: #009900;">&#40;</span>context.<span style="color: #006633;">getByteOrder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  velocities <span style="color: #339933;">=</span> allocateFloats<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> particlesCount<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">order</span><span style="color: #009900;">&#40;</span>context.<span style="color: #006633;">getByteOrder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  interleavedColorAndPositionsTemp <span style="color: #339933;">=</span> allocateBytes<span style="color: #009900;">&#40;</span>elementSize <span style="color: #339933;">*</span> particlesCount<span style="color: #009900;">&#41;</span>.<span style="color: #006633;">order</span><span style="color: #009900;">&#40;</span>context.<span style="color: #006633;">getByteOrder</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  Pointer<span style="color: #339933;">&lt;</span>Float<span style="color: #339933;">&gt;</span> positionsView <span style="color: #339933;">=</span> interleavedColorAndPositionsTemp.<span style="color: #006633;">as</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Float</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> i <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> particlesCount<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    masses.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>i, 0.5f <span style="color: #339933;">+</span> 0.5f <span style="color: #339933;">*</span> random<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    velocities.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span>, random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">0.5</span>, <span style="color: #cc66cc;">0.5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> 0.2f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    velocities.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">*</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">0.5</span>, <span style="color: #cc66cc;">0.5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> 0.2f<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> colorOffset <span style="color: #339933;">=</span> i <span style="color: #339933;">*</span> elementSize<span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">int</span> posOffset <span style="color: #339933;">=</span> i <span style="color: #339933;">*</span> <span style="color: #009900;">&#40;</span>elementSize <span style="color: #339933;">/</span> <span style="color: #cc66cc;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">byte</span> r <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">220</span>, g <span style="color: #339933;">=</span> r, b <span style="color: #339933;">=</span> r, a <span style="color: #339933;">=</span> r<span style="color: #339933;">;</span>
    interleavedColorAndPositionsTemp.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>colorOffset<span style="color: #339933;">++</span>, r<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    interleavedColorAndPositionsTemp.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>colorOffset<span style="color: #339933;">++</span>, g<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    interleavedColorAndPositionsTemp.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>colorOffset<span style="color: #339933;">++</span>, b<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    interleavedColorAndPositionsTemp.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>colorOffset, a<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066; font-weight: bold;">float</span> x <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">0.5</span>, <span style="color: #cc66cc;">0.5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> width<span style="color: #339933;">/</span><span style="color: #cc66cc;">2.0</span>, 
    y <span style="color: #339933;">=</span> random<span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span><span style="color: #cc66cc;">0.5</span>, <span style="color: #cc66cc;">0.5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> height<span style="color: #339933;">/</span><span style="color: #cc66cc;">2.0</span><span style="color: #339933;">;</span>
    positionsView.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>posOffset, <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span> x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    positionsView.<span style="color: #006633;">set</span><span style="color: #009900;">&#40;</span>posOffset <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#41;</span> y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
  velocitiesMem <span style="color: #339933;">=</span> context.<span style="color: #006633;">createBuffer</span><span style="color: #009900;">&#40;</span>Usage.<span style="color: #006633;">InputOutput</span>, velocities, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  massesMem <span style="color: #339933;">=</span> context.<span style="color: #006633;">createBuffer</span><span style="color: #009900;">&#40;</span>Usage.<span style="color: #006633;">Input</span>, masses, <span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glGenBuffers</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, vbo, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, vbo<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBufferData</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span> interleavedColorAndPositionsTemp.<span style="color: #006633;">getValidBytes</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, interleavedColorAndPositionsTemp.<span style="color: #006633;">getByteBuffer</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, GL2.<span style="color: #006633;">GL_DYNAMIC_COPY</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  interleavedColorAndPositionsMem <span style="color: #339933;">=</span> context.<span style="color: #006633;">createBufferFromGLBuffer</span><span style="color: #009900;">&#40;</span>Usage.<span style="color: #006633;">InputOutput</span>, vbo<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #003399;">String</span> pgmSrc <span style="color: #339933;">=</span> join<span style="color: #009900;">&#40;</span>loadStrings<span style="color: #009900;">&#40;</span>dataPath<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ParticlesDemoProgram.cl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>, <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  CLProgram program <span style="color: #339933;">=</span> context.<span style="color: #006633;">createProgram</span><span style="color: #009900;">&#40;</span>pgmSrc<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  updateParticleKernel <span style="color: #339933;">=</span> program.<span style="color: #006633;">build</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">createKernel</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;updateParticle&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  callKernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  queue.<span style="color: #006633;">finish</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glClear</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_COLOR_BUFFER_BIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBlendFunc</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_SRC_ALPHA</span>, GL.<span style="color: #006633;">GL_SRC_COLOR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glMatrixMode</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_PROJECTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glLoadIdentity</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl.<span style="color: #006633;">glu</span>.<span style="color: #006633;">gluOrtho2D</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>width<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span>, width<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span>, <span style="color: #339933;">-</span>height<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span>, height<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glMatrixMode</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_MODELVIEW</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, vbo<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glInterleavedArrays</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_C4UB_V2F</span>, elementSize, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glDrawArrays</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_POINTS</span>, <span style="color: #cc66cc;">0</span>, particlesCount<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glBindBuffer</span><span style="color: #009900;">&#40;</span>GL2.<span style="color: #006633;">GL_ARRAY_BUFFER</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  callKernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> callKernel<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  CLEvent kernelCompletion<span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">synchronized</span><span style="color: #009900;">&#40;</span>updateParticleKernel<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    interleavedColorAndPositionsMem.<span style="color: #006633;">acquireGLObject</span><span style="color: #009900;">&#40;</span>queue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    updateParticleKernel.<span style="color: #006633;">setArgs</span><span style="color: #009900;">&#40;</span>massesMem, 
    velocitiesMem, 
    interleavedColorAndPositionsMem.<span style="color: #006633;">as</span><span style="color: #009900;">&#40;</span><span style="color: #003399;">Float</span>.<span style="color: #000000; font-weight: bold;">class</span><span style="color: #009900;">&#41;</span>, 
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span>
      mouseX<span style="color: #339933;">-</span>width<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span>, height<span style="color: #339933;">/</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">-</span>mouseY
    <span style="color: #009900;">&#125;</span>
    , 
    <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">float</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span>
      width, height
    <span style="color: #009900;">&#125;</span>
    , 
    <span style="color: #cc66cc;">2.0</span>, 
    <span style="color: #cc66cc;">2.0</span>, 
    <span style="color: #cc66cc;">0.9</span>, 
    <span style="color: #cc66cc;">0.8</span>, 
    <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">byte</span><span style="color: #009900;">&#41;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066; font-weight: bold;">int</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> globalSizes <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#123;</span>
      particlesCount
    <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
    kernelCompletion <span style="color: #339933;">=</span> updateParticleKernel.<span style="color: #006633;">enqueueNDRange</span><span style="color: #009900;">&#40;</span>queue, globalSizes<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    interleavedColorAndPositionsMem.<span style="color: #006633;">releaseGLObject</span><span style="color: #009900;">&#40;</span>queue<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/29/opencl-particles-system-with-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenGL and Processing 2.0</title>
		<link>http://www.magicandlove.com/blog/2012/04/29/opengl-and-processing-2-0/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/29/opengl-and-processing-2-0/#comments</comments>
		<pubDate>Sun, 29 Apr 2012 06:41:50 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=990</guid>
		<description><![CDATA[The existing OpenGL codes for Processing do not work in the 2.0 alpha. Here is an example code segment I modify to use the new PGL class. import processing.opengl.*; import javax.media.opengl.*; &#160; GL2 gl; float t, s, c; &#160; void &#8230; <a href="http://www.magicandlove.com/blog/2012/04/29/opengl-and-processing-2-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The existing OpenGL codes for Processing do not work in the 2.0 alpha. Here is an example code segment I modify to use the new <a href="http://code.google.com/p/processing/source/browse/trunk/processing/java/libraries/opengl/src/processing/opengl/PGL.java">PGL</a> class.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.*</span><span style="color: #339933;">;</span>
&nbsp;
GL2 gl<span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">float</span> t, s, c<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">400</span>, <span style="color: #cc66cc;">400</span>, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  PGraphicsOpenGL pg <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PGraphicsOpenGL<span style="color: #009900;">&#41;</span> g<span style="color: #339933;">;</span>
  PGL pgl <span style="color: #339933;">=</span> pg.<span style="color: #006633;">beginPGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">gl</span>.<span style="color: #006633;">getGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getGL2</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pg.<span style="color: #006633;">endPGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  t <span style="color: #339933;">=</span> 0.0f<span style="color: #339933;">;</span>
  s <span style="color: #339933;">=</span> 0.0f<span style="color: #339933;">;</span>
  c <span style="color: #339933;">=</span> 0.0f<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  t <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">0.01</span><span style="color: #339933;">;</span>
  s <span style="color: #339933;">=</span> sin<span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  c <span style="color: #339933;">=</span> cos<span style="color: #009900;">&#40;</span>t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  gl.<span style="color: #006633;">glClear</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_COLOR_BUFFER_BIT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBegin</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_TRIANGLES</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glColor3f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glVertex3f</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">-</span>c, <span style="color: #339933;">-</span>c, s<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glColor3f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glVertex3f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, c, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glColor3f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glVertex3f</span><span style="color: #009900;">&#40;</span>s, <span style="color: #339933;">-</span>s, c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glEnd</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><img class="alignnone size-full wp-image-992" title="JOGL" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/jogl0408.png" alt="" width="400" height="400" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/29/opengl-and-processing-2-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenCL and Processing</title>
		<link>http://www.magicandlove.com/blog/2012/04/23/opencl-and-processing/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/23/opencl-and-processing/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 06:21:46 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[OpenCL]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=973</guid>
		<description><![CDATA[I have done a number of testings with various Java implementations of OpenCL and Processing. The major Java bindings of OpenCL include JOCL Java OpenCL JavaCL The are two major OpenCL libraries for Processing at the time I do the &#8230; <a href="http://www.magicandlove.com/blog/2012/04/23/opencl-and-processing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I have done a number of testings with various Java implementations of <a href="http://www.khronos.org/opencl/">OpenCL</a> and <a href="http://processing.org">Processing</a>. The major Java bindings of OpenCL include</p>
<ul>
<li><a href="http://www.jocl.org/">JOCL</a></li>
<li><a href="http://jogamp.org/jocl/www/">Java OpenCL</a></li>
<li><a href="http://code.google.com/p/javacl/">JavaCL</a></li>
</ul>
<p>The are two major OpenCL libraries for Processing at the time I do the testing, <a href="http://www.pixelnerve.com/v/2010/07/29/msaopencl-for-java-and-processing/">MSAOpenCL</a> using the JavaCL and <a href="http://code.google.com/p/openclp5/">openclp5</a> using the JOCL. I do not use the Processing libraries and call directly the Java binding codes. Each of the implementation contains a Hello World example kernel that performs calculation across a large array. In my test, I modify the kernel program to do a multiplication between two floating point numbers with an array size of a million cells.</p>
<p>The sample kernel program code is</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">__kernel <span style="color: #0000ff;">void</span> sampleKernel<span style="color: #008000;">&#40;</span>__global <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">float</span> <span style="color: #000040;">*</span>a,
        __global <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">float</span> <span style="color: #000040;">*</span>b,
        __global <span style="color: #0000ff;">float</span> <span style="color: #000040;">*</span>c,
        <span style="color: #0000ff;">int</span> n<span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
	<span style="color: #0000ff;">int</span> gid <span style="color: #000080;">=</span> get_global_id<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
	<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>gid <span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span><span style="color: #000080;">=</span> n<span style="color: #008000;">&#41;</span>
		<span style="color: #0000ff;">return</span><span style="color: #008080;">;</span>
	c<span style="color: #008000;">&#91;</span>gid<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> a<span style="color: #008000;">&#91;</span>gid<span style="color: #008000;">&#93;</span> <span style="color: #000040;">*</span> b<span style="color: #008000;">&#91;</span>gid<span style="color: #008000;">&#93;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>I use a MacBook Pro for the testing. The operating system is OSX Lion. It includes the OpenCL implementation in the default OS. The graphics card is Nvidia GeForce 9400M with 256M graphic memory. The Processing version is alpha build 2.0a5 running in 64-bit mode. Various JAR files have to be copied to the code folder. Here is the summary.</p>
<p>JOCL</p>
<ul>
<li>JOCL-0.1.7.jar</li>
</ul>
<p>Java OpenCL (jogamp)</p>
<ul>
<li>jocl.jar</li>
<li>gluegen-rt.jar</li>
<li>gluegen-rt-natives-macosx-universal.jar</li>
<li>libjocl.dylib</li>
</ul>
<p>JavaCL</p>
<ul>
<li>javacl-1.0.0-RC2-shaded.jar</li>
</ul>
<p>I did ten consecutive runs of each implementation. The final figure is an average of the ten runs. Each measurement is taken just before and after the kernel execution. The first implementation (JOCL) has more fluctuated results. The second implementation has only a single command to invoke the kernel execution and passing back the result. Therefore, it is not easy to single out the execution time of the GPU. The third implementation (JavaCL) is obviously the fastest one and more stable in terms of parallel execution.</p>
<p><em>Performance with one million cells</em></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>Implementation</strong></td>
<td><strong>ms</strong></td>
</tr>
<tr>
<td>JOCL</td>
<td>3.207</td>
</tr>
<tr>
<td>Java OpenCL</td>
<td>17.0008</td>
</tr>
<tr>
<td>JavaCL</td>
<td>2.9865</td>
</tr>
<tr>
<td>CPU</td>
<td>10.952</td>
</tr>
</tbody>
</table>
<p><em>Performance with half a million cells</em></p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td><strong>Implementation</strong></td>
<td><strong>ms</strong></td>
</tr>
<tr>
<td>JOCL</td>
<td>3.9424</td>
</tr>
<tr>
<td>Java OpenCL</td>
<td>8.5672</td>
</tr>
<tr>
<td>JavaCL</td>
<td>2.9354</td>
</tr>
<tr>
<td>CPU</td>
<td>9.2368</td>
</tr>
</tbody>
</table>
<p>The source files of the testings can be downloaded here:</p>
<ul>
<li> <a href="http://www.magicandlove.com/software/JOCL.zip">JOCL version</a></li>
<li> <a href="http://www.magicandlove.com/software/JavaOpenCL.zip">Java OpenCL version</a></li>
<li> <a href="http://www.magicandlove.com/software/Java_CL.zip">JavaCL version</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/23/opencl-and-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More MindWave in Processing</title>
		<link>http://www.magicandlove.com/blog/2012/04/11/more-mindwave-in-processing/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/11/more-mindwave-in-processing/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 14:27:41 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Neurosky MindWave]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=970</guid>
		<description><![CDATA[This is the second test of the Neurosky MindWave brain sensor in Processing. I use the fluid simulation library diewald_fluid with the GLGraphics rendering library, to display the alpha, beta, gamma and theta wave components. &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>This is the second test of the <a href="http://neurosky.com/Products/MindWave.aspx">Neurosky MindWave</a> brain sensor in <a href="http://processing.org">Processing</a>. I use the fluid simulation library <a href="http://thomasdiewald.com/processing/libraries/diewald_fluid/">diewald_fluid</a> with the <a href="http://glgraphics.sourceforge.net/">GLGraphics</a> rendering library, to display the alpha, beta, gamma and theta wave components.<br />
&nbsp;<br />
<iframe width="480" height="360" src="http://www.youtube.com/embed/9PUySOD24Vk?rel=0" frameborder="0" allowfullscreen></iframe><br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/11/more-mindwave-in-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kinect for Windows</title>
		<link>http://www.magicandlove.com/blog/2012/04/10/kinect-for-windows/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/10/kinect-for-windows/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 14:27:00 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Products]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Kinect]]></category>
		<category><![CDATA[TouchDesigner]]></category>
		<category><![CDATA[Unity3D]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=958</guid>
		<description><![CDATA[The new Kinect for Windows is available and will be available in Hong Kong in late May according to the blog description. The commercial SDK is also out now for download. TouchDesigner has a set of new operators for the &#8230; <a href="http://www.magicandlove.com/blog/2012/04/10/kinect-for-windows/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The new <a href="http://www.microsoft.com/en-us/kinectforwindows/">Kinect for Windows</a> is available and will be available in Hong Kong in late May according to the <a href="http://blogs.msdn.com/b/kinectforwindows/archive/2012/03/26/what-s-ahead-a-sneak-peek.aspx">blog description</a>. The <a href="http://www.microsoft.com/en-us/kinectforwindows/develop/overview.aspx">commercial SDK</a> is also out now for download.</p>
<p><img class="alignnone" title="Kinect for Windows" src="http://www.derivative.ca/wiki077/images/c/ce/KinectForWindows.jpg" alt="" width="606" height="341" /></p>
<p><a href="http://www.derivative.ca">TouchDesigner</a> has a set of <a href="http://www.derivative.ca/wiki077/index.php?title=Kinect">new operators</a> for the Kinect for Windows. They are quite easy to integrate with the existing TouchDesigner working environment.</p>
<p><img class="alignnone size-full wp-image-967" title="touch" src="http://www.magicandlove.com/blog/wp-content/uploads/2012/04/touch.png" alt="" width="560" height="406" /></p>
<p><a href="http://www.ucf.edu/">University of Central Florida</a> <a href="http://www.eecs.ucf.edu/isuelab/unity.php">Interactive Systems and User Experience Lab</a> has also released a <a href="https://github.com/adevine1618/KinectSDK-Unity3D_Interface_Plugin">Unity3D plugin</a> with the new Kinect SDK.<br />
&nbsp;<br />
<iframe width="560" height="315" src="http://www.youtube.com/embed/YWRQE06-pz4?rel=0" frameborder="0" allowfullscreen></iframe><br />
&nbsp;<br />
There are also a number of openFrameworks addons for the Kinect for Windows, <a href="https://github.com/simonhr/ofxMSKinect">ofxMSKinect</a> and <a href="https://github.com/sadmb/ofxKinectNui">ofxKinectNui</a>.</p>
<p>For library Cinder, here is the <a href="http://bantherewind.com/kinectsdk-for-cinder">Kinect SDK Block</a>.<br />
<img class="alignnone" title="Library Cinder Kinect" src="http://www.bantherewind.com/uploads/kinectSdkTest_sm.jpg" alt="" width="350" height="198" /></p>
<p>For Flash ActionScript users, the <a href="http://www.as3nui.com/">AIRKinect</a> can be a good choice.<br />
<img class="alignnone" title="AIRKinect" src="http://www.as3nui.com/wp-content/uploads/2012/03/airkinect-2-release.png" alt="" width="164" height="164" /></p>
<p>At the time of writing, I am still waiting for the Java binding and thus the Processing community.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/10/kinect-for-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DirectShow for Processing &#8211; OpenGL</title>
		<link>http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing-opengl/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing-opengl/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 13:56:07 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[DirectShow]]></category>
		<category><![CDATA[OpenGL]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=956</guid>
		<description><![CDATA[I try to work out another version of the DirectShow for Processing classes in the last post. In this version, I write the movie data directly to an OpenGL texture object. Below is the modified version of the DMovie class. &#8230; <a href="http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing-opengl/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I try to work out another version of the DirectShow for Processing classes in the <a href="http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing/">last post</a>. In this version, I write the movie data directly to an OpenGL texture object. Below is the modified version of the DMovie class. The DCapture class can also be modified in the same way.<br />
&nbsp;<br />
<strong>The modified DMovie class</strong></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">de.humatic.dsj.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.sun.opengl.util.texture.*</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> DMovie <span style="color: #000000; font-weight: bold;">implements</span> java.<span style="color: #006633;">beans</span>.<span style="color: #003399;">PropertyChangeListener</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">private</span> DSMovie movie<span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> width, height<span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">public</span> Texture tex<span style="color: #339933;">;</span>
&nbsp;
  DMovie<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> _s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    movie <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DSMovie<span style="color: #009900;">&#40;</span>dataPath<span style="color: #009900;">&#40;</span>_s<span style="color: #009900;">&#41;</span>, DSFiltergraph.<span style="color: #006633;">DD7</span>, <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">setVolume</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">setLoop</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    width <span style="color: #339933;">=</span> movie.<span style="color: #006633;">getDisplaySize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">width</span><span style="color: #339933;">;</span>
    height <span style="color: #339933;">=</span> movie.<span style="color: #006633;">getDisplaySize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">height</span><span style="color: #339933;">;</span>
    tex <span style="color: #339933;">=</span> TextureIO.<span style="color: #006633;">newTexture</span><span style="color: #009900;">&#40;</span>movie.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> updateImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #003399;">BufferedImage</span> bimg <span style="color: #339933;">=</span> movie.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    TextureData td <span style="color: #339933;">=</span> TextureIO.<span style="color: #006633;">newTextureData</span><span style="color: #009900;">&#40;</span>bimg, <span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    tex.<span style="color: #006633;">updateImage</span><span style="color: #009900;">&#40;</span>td<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    movie.<span style="color: #006633;">setLoop</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> play<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    movie.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> propertyChange<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">beans</span>.<span style="color: #003399;">PropertyChangeEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>DSJUtils.<span style="color: #006633;">getEventType</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;<br />
<strong>Sample code that uses the new DMovie class</strong></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.*</span><span style="color: #339933;">;</span>
&nbsp;
DMovie mov<span style="color: #339933;">;</span>
PGraphicsOpenGL pgl<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1280</span>, <span style="color: #cc66cc;">692</span>, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PGraphicsOpenGL<span style="color: #009900;">&#41;</span> g<span style="color: #339933;">;</span>
  GL gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">beginGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DMovie<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hugo.mp4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">loop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">tex</span>.<span style="color: #006633;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl.<span style="color: #006633;">endGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  GL gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">beginGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">updateImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">tex</span>.<span style="color: #006633;">enable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glBegin</span><span style="color: #009900;">&#40;</span>GL.<span style="color: #006633;">GL_QUADS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glTexCoord2f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  gl.<span style="color: #006633;">glVertex2f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glTexCoord2f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  gl.<span style="color: #006633;">glVertex2f</span><span style="color: #009900;">&#40;</span>width, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glTexCoord2f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  gl.<span style="color: #006633;">glVertex2f</span><span style="color: #009900;">&#40;</span>width, height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glTexCoord2f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  gl.<span style="color: #006633;">glVertex2f</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  gl.<span style="color: #006633;">glEnd</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
&nbsp;
  mov.<span style="color: #006633;">tex</span>.<span style="color: #006633;">disable</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl.<span style="color: #006633;">endGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing-opengl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DirectShow for Processing</title>
		<link>http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing/#comments</comments>
		<pubDate>Tue, 10 Apr 2012 13:21:19 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[DirectShow]]></category>
		<category><![CDATA[processing.org]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=952</guid>
		<description><![CDATA[I adopt the DirectShow Java Wrapper to work in Processing with two classes, one for movie playback and one for video capture. At this moment, there are just two Java classes, not an individual library yet. Since it is for &#8230; <a href="http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I adopt the <a href="http://www.humatic.de/htools/dsj.htm">DirectShow Java Wrapper</a> to work in Processing with two classes, one for movie playback and one for video capture. At this moment, there are just two Java classes, not an individual library yet. Since it is for DirectShow, it is of course in Windows platform. You have to package the <strong>dsj.jar</strong> and the <strong>dsj.dll</strong> (32bit or 64bit according to your platform) into your <strong>code</strong> folder.<br />
&nbsp;<br />
<strong>The DMovie class for movie playback</strong></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">de.humatic.dsj.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> DMovie <span style="color: #000000; font-weight: bold;">implements</span> java.<span style="color: #006633;">beans</span>.<span style="color: #003399;">PropertyChangeListener</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">private</span> DSMovie movie<span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> width, height<span style="color: #339933;">;</span>
&nbsp;
  DMovie<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> _s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    movie <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DSMovie<span style="color: #009900;">&#40;</span>dataPath<span style="color: #009900;">&#40;</span>_s<span style="color: #009900;">&#41;</span>, DSFiltergraph.<span style="color: #006633;">DD7</span>, <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">setVolume</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1.0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">setLoop</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    width <span style="color: #339933;">=</span> movie.<span style="color: #006633;">getDisplaySize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">width</span><span style="color: #339933;">;</span>
    height <span style="color: #339933;">=</span> movie.<span style="color: #006633;">getDisplaySize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">height</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> PImage updateImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    PImage img <span style="color: #339933;">=</span> createImage<span style="color: #009900;">&#40;</span>width, height, RGB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">BufferedImage</span> bimg <span style="color: #339933;">=</span> movie.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    bimg.<span style="color: #006633;">getRGB</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, img.<span style="color: #006633;">width</span>, img.<span style="color: #006633;">height</span>, img.<span style="color: #006633;">pixels</span>, <span style="color: #cc66cc;">0</span>, img.<span style="color: #006633;">width</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    img.<span style="color: #006633;">updatePixels</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">return</span> img<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    movie.<span style="color: #006633;">setLoop</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    movie.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> play<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    movie.<span style="color: #006633;">play</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> propertyChange<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">beans</span>.<span style="color: #003399;">PropertyChangeEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>DSJUtils.<span style="color: #006633;">getEventType</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;<br />
<strong>Sample code that uses the DMovie class</strong></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">DMovie mov<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1280</span>, <span style="color: #cc66cc;">692</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DMovie<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hugo.mp4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">loop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  frameRate<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">25</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  image<span style="color: #009900;">&#40;</span>mov.<span style="color: #006633;">updateImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;<br />
<strong>The DCapture class that performs video capture with the available webcam</strong></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">de.humatic.dsj.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.image.BufferedImage</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> DCapture <span style="color: #000000; font-weight: bold;">implements</span> java.<span style="color: #006633;">beans</span>.<span style="color: #003399;">PropertyChangeListener</span> <span style="color: #009900;">&#123;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">private</span> DSCapture capture<span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> width, height<span style="color: #339933;">;</span>
&nbsp;
  DCapture<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    DSFilterInfo<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> dsi <span style="color: #339933;">=</span> DSCapture.<span style="color: #006633;">queryDevices</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    capture <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DSCapture<span style="color: #009900;">&#40;</span>DSFiltergraph.<span style="color: #006633;">DD7</span>, dsi<span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span>, <span style="color: #000066; font-weight: bold;">false</span>, 
    DSFilterInfo.<span style="color: #006633;">doNotRender</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    width <span style="color: #339933;">=</span> capture.<span style="color: #006633;">getDisplaySize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">width</span><span style="color: #339933;">;</span>
    height <span style="color: #339933;">=</span> capture.<span style="color: #006633;">getDisplaySize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">height</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> PImage updateImage<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    PImage img <span style="color: #339933;">=</span> createImage<span style="color: #009900;">&#40;</span>width, height, RGB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #003399;">BufferedImage</span> bimg <span style="color: #339933;">=</span> capture.<span style="color: #006633;">getImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    bimg.<span style="color: #006633;">getRGB</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, img.<span style="color: #006633;">width</span>, img.<span style="color: #006633;">height</span>, img.<span style="color: #006633;">pixels</span>, <span style="color: #cc66cc;">0</span>, img.<span style="color: #006633;">width</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    img.<span style="color: #006633;">updatePixels</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">return</span> img<span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> propertyChange<span style="color: #009900;">&#40;</span>java.<span style="color: #006633;">beans</span>.<span style="color: #003399;">PropertyChangeEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>DSJUtils.<span style="color: #006633;">getEventType</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Sample code that uses the DCapture class</strong></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">DCapture cap<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">640</span>, <span style="color: #cc66cc;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  cap <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DCapture<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  image<span style="color: #009900;">&#40;</span>cap.<span style="color: #006633;">updateImage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, cap.<span style="color: #006633;">width</span>, cap.<span style="color: #006633;">height</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/10/directshow-for-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Video Playback Performance &#8211; Processing</title>
		<link>http://www.magicandlove.com/blog/2012/04/06/video-playback-performance-processing/</link>
		<comments>http://www.magicandlove.com/blog/2012/04/06/video-playback-performance-processing/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 13:47:27 +0000</pubDate>
		<dc:creator>bryan</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[processing.org]]></category>
		<category><![CDATA[video playback]]></category>

		<guid isPermaLink="false">http://www.magicandlove.com/blog/?p=936</guid>
		<description><![CDATA[I try out different video playback mechanism in the Processing to compare their performance. The digital video is the one I used in the last post. It is the trailer of the film Hugo. The details are: 1280 x 692 &#8230; <a href="http://www.magicandlove.com/blog/2012/04/06/video-playback-performance-processing/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I try out different video playback mechanism in the <a href="http://www.processing.org">Processing</a> to compare their performance. The digital video is the one I used in the last post. It is the <a href="http://www.youtube.com/watch?v=ENCvYCRkepY">trailer of the film Hugo</a>. The details are: 1280 x 692 H.264 AAC, bitrate 2,093.</p>
<p>The computer I am using is iMac 3.06 GHz Intel Core 2 Duo, 4 GB RAM, ATI Radeon HD 4670 256 MB graphic card. Processing is the latest 1.5.1 version.</p>
<p>For the video playback classes, I tested the default <a href="http://processing.org/reference/libraries/video/index.html">QuickTime Video</a> library, a <a href="http://danieloberhoff.de/processing/FasterMovie.pde">FasterMovie</a> class, the <a href="http://gsvideo.sourceforge.net/">GSVideo</a> library, and the <a href="http://www.mat.ucsb.edu/~a.forbes/PROCESSING/jmcvideo/jmcvideo.html">JMCVideo</a> library with JavaFX 1.2 SDK.</p>
<p>To render the video, I start with the standard <a href="http://processing.org/reference/image_.html">image()</a> function, and proceed to test with various OpenGL texturing methods, including the <a href="http://glgraphics.sourceforge.net/">GLGraphics</a> library.</p>
<p>Again, I sample the CPU and Memory usage with the Activity Monitor from the Mac OSX utilities, in an interval of 30 seconds. The results are the average of 5 samples.</p>
<p><strong>Performance with 2D image function</strong></p>
<table border="0" cellspacing="0" cellpadding="1">
<tbody>
<tr>
<td></td>
<td>CPU (%)</td>
<td>Memory (Mb)</td>
</tr>
<tr>
<td>QuickTime</td>
<td>175</td>
<td>221</td>
</tr>
<tr>
<td>FasterMovie</td>
<td>137</td>
<td>275</td>
</tr>
<tr>
<td>GSVideo</td>
<td>151</td>
<td>118</td>
</tr>
<tr>
<td>JMCVideo</td>
<td>147</td>
<td>87</td>
</tr>
</tbody>
</table>
<p>The OpenGL and QuickTime video libraries have problem working together. The program stops at the size() statement. I have to either put the first video related command before the size() or a dummy line</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">println<span style="color: #009900;">&#40;</span>Capture.<span style="color: #006633;">list</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1280</span>, <span style="color: #cc66cc;">692</span>, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>The second batch of tests use the standard OpenGL vertex and texture functions.</p>
<p><strong>Performance with OpenGL texture and vertex functions</strong></p>
<table border="0" cellspacing="0" cellpadding="1">
<tbody>
<tr>
<td></td>
<td>CPU (%)</td>
<td>Memory (Mb)</td>
</tr>
<tr>
<td>QuickTime</td>
<td>158</td>
<td>430</td>
</tr>
<tr>
<td>FasterMovie</td>
<td>143</td>
<td>610</td>
</tr>
<tr>
<td>GSVideo</td>
<td>147</td>
<td>315</td>
</tr>
<tr>
<td>JMCVideo</td>
<td>142</td>
<td>397</td>
</tr>
</tbody>
</table>
<p>The third batch of tests involve custom arrangement in OpenGL. Both GSVideo and JMCVideo come with their own functions to write directly to OpenGL texture. For the FasterMovie test, I combine it with the pixel buffer object I have shown in my <a href="http://www.magicandlove.com/blog/2012/03/26/pixel-buffer-object-in-processing/">previous post</a>.<br />
&nbsp;<br />
<strong>Performance with custom OpenGL texture method</strong></p>
<table border="0" cellpadding="1" cellspacing="0">
<tr>
<td>&nbsp;</td>
<td>CPU (%)</td>
<td>Memory (Mb)</td>
</tr>
<tr>
<td>FasterMovie+PBO</td>
<td>69</td>
<td>275</td>
</tr>
<tr>
<td>GSVideo+GLGraphics</td>
<td>58</td>
<td>120</td>
</tr>
<tr>
<td>JMCVideo+OpenGL</td>
<td>57</td>
<td>91</td>
</tr>
</table>
<p>&nbsp;<br />
Sample code for GSVideo and GLGraphics (from <a href="http://codeanticode.wordpress.com/">codeanticode</a>)</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">codeanticode.glgraphics.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">codeanticode.gsvideo.*</span><span style="color: #339933;">;</span>
&nbsp;
GSMovie mov<span style="color: #339933;">;</span>
GLTexture tex<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1280</span>, <span style="color: #cc66cc;">692</span>, GLConstants.<span style="color: #006633;">GLGRAPHICS</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
  mov <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> GSMovie<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Hugo.mp4&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  tex <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> GLTexture<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">setPixelDest</span><span style="color: #009900;">&#40;</span>tex<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  mov.<span style="color: #006633;">loop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>tex.<span style="color: #006633;">putPixelsIntoTexture</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> 
  <span style="color: #009900;">&#123;</span>
    image<span style="color: #009900;">&#40;</span>tex, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> movieEvent<span style="color: #009900;">&#40;</span>GSMovie _m<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  _m.<span style="color: #006633;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&nbsp;<br />
Sample code for JMCVideo (from <a href="http://www.mat.ucsb.edu/a.forbes/blog/">Angus Forbes</a>)</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">jmcvideo.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">processing.opengl.*</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.media.opengl.*</span><span style="color: #339933;">;</span> 
&nbsp;
JMCMovieGL mov<span style="color: #339933;">;</span>
PGraphicsOpenGL pgl<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
  size<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1280</span>, <span style="color: #cc66cc;">692</span>, OPENGL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  background<span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> JMCMovieGL<span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">this</span>, <span style="color: #0000ff;">&quot;Hugo.mp4&quot;</span>, ARGB<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  mov.<span style="color: #006633;">loop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  pgl <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>PGraphicsOpenGL<span style="color: #009900;">&#41;</span> g<span style="color: #339933;">;</span>
  GL gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">beginGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  gl.<span style="color: #006633;">glViewport</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, width, height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl.<span style="color: #006633;">endGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
  GL gl <span style="color: #339933;">=</span> pgl.<span style="color: #006633;">beginGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  mov.<span style="color: #006633;">image</span><span style="color: #009900;">&#40;</span>gl, <span style="color: #cc66cc;">0</span>, <span style="color: #cc66cc;">0</span>, width, height<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  pgl.<span style="color: #006633;">endGL</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.magicandlove.com/blog/2012/04/06/video-playback-performance-processing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

