<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://jogamp.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ewhite</id>
	<title>JogampWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://jogamp.org/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ewhite"/>
	<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Special:Contributions/Ewhite"/>
	<updated>2026-04-21T13:12:28Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=833</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=833"/>
		<updated>2013-01-11T01:37:06Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: /* Creating FBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    // With MSAA:&lt;br /&gt;
    // fbo.reset(gl, width, height, sampleNum, true); // int width, height, sampleNum - size/sampleNum of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA. Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA&lt;br /&gt;
    &lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D); // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // See Notes 1, 2. Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // See Note-3 for use with MSAA. Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);  // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // See Notes 1, 2. Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Note-1: One could also call FBObject.use(gl, ta) w/ TextureAttachment ta instead of FBObject.unbind(gl)/FBObject.syncSamplingSink(gl)&lt;br /&gt;
* Note-2: Calls to FBObject.use(..)/FBObject.unuse() will unbind current buffer&lt;br /&gt;
* Note-3: When using MSAA, you must use fbo.syncSamplingSink(gl) instead of fbo.unbind(gl). Call to syncSamplingSink ensures MSAA buffers are blitted to the FBO sink, can be called by non MSAA as well (NOP). Will always unbind FBO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Demos/Tests===&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/acore/TestFBOMix2DemosES2NEWT.java;hb=HEAD TestFBOMix2DemosES2NEWT.java]&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=832</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=832"/>
		<updated>2013-01-11T01:32:53Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: /* Render from FBO to another FBO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA. Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA&lt;br /&gt;
    &lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D); // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // See Notes 1, 2. Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // See Note-3 for use with MSAA. Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);  // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // See Notes 1, 2. Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Note-1: One could also call FBObject.use(gl, ta) w/ TextureAttachment ta instead of FBObject.unbind(gl)/FBObject.syncSamplingSink(gl)&lt;br /&gt;
* Note-2: Calls to FBObject.use(..)/FBObject.unuse() will unbind current buffer&lt;br /&gt;
* Note-3: When using MSAA, you must use fbo.syncSamplingSink(gl) instead of fbo.unbind(gl). Call to syncSamplingSink ensures MSAA buffers are blitted to the FBO sink, can be called by non MSAA as well (NOP). Will always unbind FBO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Demos/Tests===&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/acore/TestFBOMix2DemosES2NEWT.java;hb=HEAD TestFBOMix2DemosES2NEWT.java]&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=831</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=831"/>
		<updated>2013-01-11T01:30:30Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA. Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA&lt;br /&gt;
    &lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D); // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // See Note-3 for use with MSAA. Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);  // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // See Notes 1, 2. Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Note-1: One could also call FBObject.use(gl, ta) w/ TextureAttachment ta instead of FBObject.unbind(gl)/FBObject.syncSamplingSink(gl)&lt;br /&gt;
* Note-2: Calls to FBObject.use(..)/FBObject.unuse() will unbind current buffer&lt;br /&gt;
* Note-3: When using MSAA, you must use fbo.syncSamplingSink(gl) instead of fbo.unbind(gl). Call to syncSamplingSink ensures MSAA buffers are blitted to the FBO sink, can be called by non MSAA as well (NOP). Will always unbind FBO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Demos/Tests===&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/acore/TestFBOMix2DemosES2NEWT.java;hb=HEAD TestFBOMix2DemosES2NEWT.java]&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=830</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=830"/>
		<updated>2013-01-11T01:29:30Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA. Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl); // See Note-3 for use with MSAA&lt;br /&gt;
    &lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D); // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);  // Should not call this for CORE profiles, i.e. ES2, GL3, ..&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // See Notes 1, 2. Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;br /&gt;
&lt;br /&gt;
===Notes===&lt;br /&gt;
* Note-1: One could also call FBObject.use(gl, ta) w/ TextureAttachment ta instead of FBObject.unbind(gl)/FBObject.syncSamplingSink(gl)&lt;br /&gt;
* Note-2: Calls to FBObject.use(..)/FBObject.unuse() will unbind current buffer&lt;br /&gt;
* Note-3: When using MSAA, you must use fbo.syncSamplingSink(gl) instead of fbo.unbind(gl). Call to syncSamplingSink ensures MSAA buffers are blitted to the FBO sink, can be called by non MSAA as well (NOP). Will always unbind FBO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Demos/Tests===&lt;br /&gt;
&lt;br /&gt;
* [{{SERVER}}/git/?p=jogl.git;a=blob;f=src/test/com/jogamp/opengl/test/junit/jogl/acore/TestFBOMix2DemosES2NEWT.java;hb=HEAD TestFBOMix2DemosES2NEWT.java]&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=827</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=827"/>
		<updated>2013-01-11T00:35:03Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl);&lt;br /&gt;
Note: calls to FBObject.use()/FBObject.unuse() will unbind current buffer&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Demos/Tests===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/JogAmp/jogl/blob/master/src/test/com/jogamp/opengl/test/junit/jogl/acore/TestFBOMix2DemosES2NEWT.java TestFBOMix2DemosES2NEWT.java]&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=826</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=826"/>
		<updated>2013-01-10T23:49:02Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl);&lt;br /&gt;
Note: calls to FBObject.use()/FBObject.unuse() will unbind current buffer&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) source.getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=825</id>
		<title>FBObject</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=FBObject&amp;diff=825"/>
		<updated>2013-01-10T23:33:49Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: Created page with &amp;#039;==FrameBuffer Object (FBO)==      package com.jogamp.opengl;  ===Creating FBO===     final FBObject fbo = new FBObject(); // Create FrameBuffer     final GL2ES2 gl = GLContext.ge…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==FrameBuffer Object (FBO)==&lt;br /&gt;
&lt;br /&gt;
    package com.jogamp.opengl;&lt;br /&gt;
&lt;br /&gt;
===Creating FBO===&lt;br /&gt;
    final FBObject fbo = new FBObject(); // Create FrameBuffer&lt;br /&gt;
    final GL2ES2 gl = GLContext.getCurrentGL().getGL2ES2();&lt;br /&gt;
    fbo.reset(gl, width, height); // int width, height - size of FBO, can be resized with the same call&lt;br /&gt;
    fbo.attachTexture2D(gl, 0, true); // Create GL_TEXTURE_2D texture which can be used as sampler2D at the shader code&lt;br /&gt;
    // Created texture will be bound to FBO&#039;s GL_COLOR_ATTACHMENT0 (see the second parameter 0)&lt;br /&gt;
    fbo.attachRenderbuffer(gl, Attachment.Type.DEPTH, 32); // Create depth buffer (if required)&lt;br /&gt;
    fbo.unbind(gl); // Unbind FrameBuffer (You will probably want to make bind() - render - unbind() loop later on)&lt;br /&gt;
&lt;br /&gt;
===Render to FBO===&lt;br /&gt;
    fbo.bind(gl);&lt;br /&gt;
    // Render scene as usual&lt;br /&gt;
    fbo.unbind(gl);&lt;br /&gt;
Note: calls to FBObject.use()/FBObject.unuse() will unbind current buffer&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to another FBO===&lt;br /&gt;
Imagine we have 2 FBO, source and target. Source FBO must have TextureAttachment (created with attachTexture2D(), for example)&lt;br /&gt;
    FBObject source;&lt;br /&gt;
    FBObject target;&lt;br /&gt;
&lt;br /&gt;
Using low-level texture binding:&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) getSourceFBO().getColorbuffer(0);&lt;br /&gt;
    target.bind(gl); // Starting rendering to target FBO&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can render something using source texture as GL_TEXTURE0&lt;br /&gt;
    // For example, you can enable shader with some filter, which makes use of sampler2D and render a fullscreen quad. &lt;br /&gt;
    target.unbind(gl); // Unbind FBO&lt;br /&gt;
&lt;br /&gt;
===Render from FBO to screen===&lt;br /&gt;
    final TextureAttachment tex0 = (TextureAttachment) getSourceFBO().getColorbuffer(0);&lt;br /&gt;
    gl.glActiveTexture(GL2.GL_TEXTURE0);&lt;br /&gt;
    gl.glEnable(GL2.GL_TEXTURE_2D);&lt;br /&gt;
    gl.glBindTexture(GL2.GL_TEXTURE_2D, tex0.getName()); // Binding source FBO&#039;s TextureAttachment as GL_TEXTURE_2D&lt;br /&gt;
    // Here you can just render a fullscreen quad to show FBO content, or do something more exciting&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=788</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=788"/>
		<updated>2012-10-27T22:15:20Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
=== Camera setup example === &lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
=== Using with shaders example ===&lt;br /&gt;
    GLUniformData pmvMatrixUniform;&lt;br /&gt;
&lt;br /&gt;
init code...&lt;br /&gt;
    PMVMatrix pmvMatrix = ...;&lt;br /&gt;
    state.attachObject(&amp;quot;pmvMatrix&amp;quot;, pmvMatrix);&lt;br /&gt;
    pmvMatrixUniform = new GLUniformData(&amp;quot;pmvMatrix&amp;quot;, 4, 4, pmvMatrix.glGetPMvMatrixf());&lt;br /&gt;
    state.ownUniform(pmvMatrixUniform);&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
display code...&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=787</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=787"/>
		<updated>2012-10-27T22:15:05Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
=== Camera setup example === &lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
=== Using with shaders esample ===&lt;br /&gt;
    GLUniformData pmvMatrixUniform;&lt;br /&gt;
&lt;br /&gt;
init code...&lt;br /&gt;
    PMVMatrix pmvMatrix = ...;&lt;br /&gt;
    state.attachObject(&amp;quot;pmvMatrix&amp;quot;, pmvMatrix);&lt;br /&gt;
    pmvMatrixUniform = new GLUniformData(&amp;quot;pmvMatrix&amp;quot;, 4, 4, pmvMatrix.glGetPMvMatrixf());&lt;br /&gt;
    state.ownUniform(pmvMatrixUniform);&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
display code...&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=786</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=786"/>
		<updated>2012-10-27T22:13:16Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
=== Camera setup esample === &lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
=== Using with shaders esample ===&lt;br /&gt;
    GLUniformData pmvMatrixUniform;&lt;br /&gt;
&lt;br /&gt;
init code...&lt;br /&gt;
    PMVMatrix pmvMatrix = ...;&lt;br /&gt;
    state.attachObject(&amp;quot;pmvMatrix&amp;quot;, pmvMatrix);&lt;br /&gt;
    pmvMatrixUniform = new GLUniformData(&amp;quot;pmvMatrix&amp;quot;, 4, 4, pmvMatrix.glGetPMvMatrixf());&lt;br /&gt;
    state.ownUniform(pmvMatrixUniform);&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
display code...&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=785</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=785"/>
		<updated>2012-10-27T22:12:38Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
Example (for camera):&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
=== Using with shaders ===&lt;br /&gt;
    GLUniformData pmvMatrixUniform;&lt;br /&gt;
&lt;br /&gt;
init code...&lt;br /&gt;
    PMVMatrix pmvMatrix = ...;&lt;br /&gt;
    state.attachObject(&amp;quot;pmvMatrix&amp;quot;, pmvMatrix);&lt;br /&gt;
    pmvMatrixUniform = new GLUniformData(&amp;quot;pmvMatrix&amp;quot;, 4, 4, pmvMatrix.glGetPMvMatrixf());&lt;br /&gt;
    state.ownUniform(pmvMatrixUniform);&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
display code...&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=784</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=784"/>
		<updated>2012-10-27T22:11:58Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
Example (for camera):&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
Using with shaders:&lt;br /&gt;
    GLUniformData pmvMatrixUniform;&lt;br /&gt;
&lt;br /&gt;
init code...&lt;br /&gt;
    PMVMatrix pmvMatrix = ...;&lt;br /&gt;
    state.attachObject(&amp;quot;pmvMatrix&amp;quot;, pmvMatrix);&lt;br /&gt;
    pmvMatrixUniform = new GLUniformData(&amp;quot;pmvMatrix&amp;quot;, 4, 4, pmvMatrix.glGetPMvMatrixf());&lt;br /&gt;
    state.ownUniform(pmvMatrixUniform);&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
display code...&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=783</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=783"/>
		<updated>2012-10-27T22:11:25Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
Example (for camera):&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
Using with shaders:&lt;br /&gt;
    GLUniformData pmvMatrixUniform;&lt;br /&gt;
&lt;br /&gt;
    PMVMatrix pmvMatrix = ...;&lt;br /&gt;
    state.attachObject(&amp;quot;pmvMatrix&amp;quot;, pmvMatrix);&lt;br /&gt;
    pmvMatrixUniform = new GLUniformData(&amp;quot;pmvMatrix&amp;quot;, 4, 4, pmvMatrix.glGetPMvMatrixf());&lt;br /&gt;
    state.ownUniform(pmvMatrixUniform);&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
    state.uniform(gl, pmvMatrixUniform);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=782</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=782"/>
		<updated>2012-10-27T22:03:53Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
&lt;br /&gt;
Example (for camera):&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=781</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=781"/>
		<updated>2012-10-27T22:02:33Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from OpenGL Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
Example:&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=780</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=780"/>
		<updated>2012-10-27T21:57:17Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
Example:&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=779</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=779"/>
		<updated>2012-10-27T21:57:02Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_PROJECTION);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.gluPerspective(fov, aspect, zNear, zFar);&lt;br /&gt;
    pmvMatrix.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);&lt;br /&gt;
    pmvMatrix.glLoadIdentity();&lt;br /&gt;
    pmvMatrix.glRotatef(360 - pitch, 1, 0, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - yaw, 0, 1, 0);&lt;br /&gt;
    pmvMatrix.glRotatef(360 - roll, 0, 0, 1);&lt;br /&gt;
    pmvMatrix.glTranslatef(-position.x, -position.y, -position.z);&lt;br /&gt;
    pmvMatrix.update();&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=778</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=778"/>
		<updated>2012-10-27T21:55:42Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Moving from Fixed Functions =&lt;br /&gt;
&lt;br /&gt;
== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
== immModeSink ==&lt;br /&gt;
&lt;br /&gt;
com.jogamp.opengl.util.ImmModeSink&lt;br /&gt;
&lt;br /&gt;
ImmModeSink can make VBO by using FFP instructions&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=777</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=777"/>
		<updated>2012-10-27T21:53:47Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== pmvMatrix ==&lt;br /&gt;
com.jogamp.opengl.util.PMVMatrix&lt;br /&gt;
&lt;br /&gt;
pmvMatrix can make a matrix by using glTranslate/glRotate etc. FFP instructions.&lt;br /&gt;
== immModeSink ==&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=776</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=776"/>
		<updated>2012-10-27T21:52:01Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== pmvMatrix ==&lt;br /&gt;
== immModeSink ==&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
	<entry>
		<id>https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=775</id>
		<title>Advanced Getting Started</title>
		<link rel="alternate" type="text/html" href="https://jogamp.org/wiki/index.php?title=Advanced_Getting_Started&amp;diff=775"/>
		<updated>2012-10-27T21:51:40Z</updated>

		<summary type="html">&lt;p&gt;Ewhite: Created page with &amp;#039;### pmvMatrix ### immModeSink&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;### pmvMatrix&lt;br /&gt;
### immModeSink&lt;/div&gt;</summary>
		<author><name>Ewhite</name></author>
	</entry>
</feed>