<?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>20papercups :: Michael Marner&#039;s Website &#187; Programming</title>
	<atom:link href="http://www.20papercups.net/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.20papercups.net</link>
	<description>The (awesome) website of Michael Marner</description>
	<lastBuildDate>Mon, 24 May 2010 13:29:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>OpenSceneGraph, Dual Screens &amp; TwinView</title>
		<link>http://www.20papercups.net/programming/openscenegraph-dual-screens-twinview/</link>
		<comments>http://www.20papercups.net/programming/openscenegraph-dual-screens-twinview/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 06:07:24 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[dual screen]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[openscenegraph]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=145</guid>
		<description><![CDATA[So some of my work at uni involves programming using OpenSceneGraph. Now, anybody who has used OSG before will know that as powerful as it may be, it is seriously lacking in the documentation department. So, this article describes how to do dual screen graphics on Linux using OpenSceneGraph. First we&#8217;ll look at the X [...]]]></description>
			<content:encoded><![CDATA[<p>So some of my work at uni involves programming using <a title="OpenSceneGraph Website" href="http://www.openscenegraph.org" target="_blank">OpenSceneGraph</a>. Now, anybody who has used OSG before will know that as powerful as it may be, it is seriously lacking in the documentation department. So, this article describes how to do dual screen graphics on Linux using OpenSceneGraph. First we&#8217;ll look at the X Screens approach, which is easier but probably not the best solution. Then we&#8217;ll look at a method that works with a single X screen.<span id="more-145"></span></p>
<h3>Multiple X Screens</h3>
<p>The easiest way to do dual screen output is if you have your X server configured so each output is its own X screen. The first thing you need to do is make sure you have enough screens. Finding this out is easy enough:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> getNumScreens<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
    osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">WindowingSystemInterface</span><span style="color: #000040;">*</span> wsi <span style="color: #000080;">=</span> osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">getWindowingSystemInterface</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">ScreenIdentifier</span> si<span style="color: #008080;">;</span>
    si.<span style="color: #007788;">readDISPLAY</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">return</span> wsi<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>getNumScreens<span style="color: #008000;">&#40;</span>si<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>You should do this before attempting to create your screens to make sure the X server is configured correctly. Otherwise OSG will throw an error when you try and create a graphics context for a screen that doesn&#8217;t exist. Setting up the viewers is fairly straight forward:</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//Create main scene viewer</span>
&nbsp;
ref_ptr<span style="color: #000080;">&lt;</span>osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">CompositeViewer</span><span style="color: #000080;">&gt;</span> compositeViewer <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">CompositeViewer</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// create first view</span>
osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #000040;">*</span> v0 <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
v0<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setUpViewOnSingleScreen<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// add view to the composite viewer</span>
compositeViewer<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>addView<span style="color: #008000;">&#40;</span>v0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">// do the same with the second view</span>
osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #000040;">*</span> v1 <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
v1<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setUpViewOnSingleScreen<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
compositeViewer<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>addView<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>And thats it. You also need to set the scene data for each of your views and a couple of things I&#8217;ve missed, but that is the basic idea. The problem with this method is it creates 2 graphics contexts, which in most cases will cause a performance hit.</p>
<h3>Single X Screen, Single Context</h3>
<p>I looked into this method because I use TwinView on my Linux desktop boxes. Of course, TwinView means that there is only 1 XScreen that spans both monitors. Therefore, the getNumScreens function above will return 1. I have also set up our projector setup to use TwinView, so I don&#8217;t need to have one lot of code for testing on the desktop and then do something completely different when using the projectors. The other benefit of this approach is you only create one graphics context.</p>
<p>First thing we do is get the dimensions of the screen, which will be the combination of both screens.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// get the total resolution of the xscreen</span>
osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">WindowingSystemInterface</span><span style="color: #000040;">*</span> wsi <span style="color: #000080;">=</span> osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">getWindowingSystemInterface</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
<span style="color: #0000ff;">unsigned</span> width, height<span style="color: #008080;">;</span>
wsi<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>getScreenResolution<span style="color: #008000;">&#40;</span>osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">ScreenIdentifier</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #008000;">&#41;</span>, width, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>Once that is done we can create our (single) graphics context.</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">// create a context that spans the entire x screen</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>x <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>y <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>width <span style="color: #000080;">=</span> width<span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>height <span style="color: #000080;">=</span> height<span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>windowDecoration <span style="color: #000080;">=</span> <span style="color: #0000ff;">false</span><span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>doubleBuffer <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>sharedContext <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>
traits<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>overrideRedirect <span style="color: #000080;">=</span> <span style="color: #0000ff;">true</span><span style="color: #008080;">;</span>
osg<span style="color: #008080;">::</span><span style="color: #007788;">ref_ptr</span><span style="color: #000080;">&lt;</span>osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #000080;">&gt;</span> gc <span style="color: #000080;">=</span> osg<span style="color: #008080;">::</span><span style="color: #007788;">GraphicsContext</span><span style="color: #008080;">::</span><span style="color: #007788;">createGraphicsContext</span><span style="color: #008000;">&#40;</span>traits.<span style="color: #007788;">get</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>The important one here is overrideRedirect. Some window managers (I&#8217;m looking at you Gnome) will redirect the position of your graphics context, so it won&#8217;t appear where you want it. The overrideRedirect option is kindof new, it does not exist in the version of OSG shipping with Ubuntu 8.10. Therefore, I am running the latest stable release (2.6) compiled from source.</p>
<p>To get the equivalent of 2 screens to draw on, we create 2 views like before. However, we have to set their viewport manually. Here we just make v0 use the left half of the screen, and v1 use the right half. Easy enough?</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #666666;">//first screen</span>
osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #000040;">*</span> v0 <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
osg<span style="color: #008080;">::</span><span style="color: #007788;">ref_ptr</span><span style="color: #000080;">&lt;</span>osg<span style="color: #008080;">::</span><span style="color: #007788;">Camera</span><span style="color: #000080;">&gt;</span> cam <span style="color: #000080;">=</span> v0<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>getCamera<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cam<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setGraphicsContext<span style="color: #008000;">&#40;</span>gc.<span style="color: #007788;">get</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cam<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setViewport<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">0</span>, <span style="color: #0000dd;">0</span>, width<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span>, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
compositeViewer<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>addView<span style="color: #008000;">&#40;</span>v<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//second screen</span>
osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #000040;">*</span> v1 <span style="color: #000080;">=</span> <span style="color: #0000dd;">new</span> osgViewer<span style="color: #008080;">::</span><span style="color: #007788;">View</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
osg<span style="color: #008080;">::</span><span style="color: #007788;">ref_ptr</span><span style="color: #000080;">&lt;</span>osg<span style="color: #008080;">::</span><span style="color: #007788;">Camera</span><span style="color: #000080;">&gt;</span> cam2 <span style="color: #000080;">=</span> v1<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>getCamera<span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cam2<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setGraphicsContext<span style="color: #008000;">&#40;</span>gc.<span style="color: #007788;">get</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
cam2<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>setViewport<span style="color: #008000;">&#40;</span>width<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span>, <span style="color: #0000dd;">0</span>, width<span style="color: #000040;">/</span><span style="color: #0000dd;">2</span>, height<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
compositeViewer<span style="color: #000040;">-</span><span style="color: #000080;">&gt;</span>addView<span style="color: #008000;">&#40;</span>v1<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>setViewport sets the viewport of the camera. The first 2 parameters are the position in the context&#8217;s window, the next 2 are the dimensions. So, each view gets width/2 for the width, and the second screen&#8217;s position is offset by half the screen width meaning it starts on the second monitor.</p>
<h2>Conclusion</h2>
<p>And there you have it. Two methods for dual screen using OpenSceneGraph. Looking at the code, it is fairly simple. However, after browsing the doxygen docs for OSG it was not at all obvious to me. Of course, the osg-users mailing list was a big help here. In fact, <a href="http://groups.google.com/group/osg-users/browse_thread/thread/684fb727c4ab6ee2/daaa720956ae17e1" target="_blank">here</a> is the thread from the mailing list</p>
<p>Cheers<br />
Michael</p>
<p><center><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/programming/openscenegraph-dual-screens-twinview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java Tutorial 09 &#8211; OpenGL and Java</title>
		<link>http://www.20papercups.net/java-vtm-tutorials/java-vtm09-opengl-and-java/</link>
		<comments>http://www.20papercups.net/java-vtm-tutorials/java-vtm09-opengl-and-java/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 10:51:13 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Java Video Tutorials]]></category>
		<category><![CDATA[3dbuzz]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jogl]]></category>
		<category><![CDATA[opengl]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=100</guid>
		<description><![CDATA[This video looks at how we can use the OpenGL graphics library in our Java programs. This video was an entry in a competition on 3dbuzz.com. As such, it doesn&#8217;t flow on from the previous videos, just consider it a bonus. Note that this video is 1024&#215;768, so hit the full screen button to get [...]]]></description>
			<content:encoded><![CDATA[<p>This video looks at how we can use the OpenGL graphics library in our Java programs. This video was an entry in a competition on <a href="http://www.3dbuzz.com" target="_blank">3dbuzz.com</a>. As such, it doesn&#8217;t flow on from the previous videos, just consider it a bonus.<span id="more-100"></span></p>
<p style="text-align: center;"><img src="http://www.20papercups.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p style="text-align: left;">Note that this video is 1024&#215;768, so hit the full screen button to get more readable detail.</p>
<p style="text-align: left;"><strong>Notes:</strong></p>
<p style="text-align: left;">This video is the property of 3DBuzz Inc. Jason and Zak have kindly given me permission to host it on this website. Because it is not owned by me, I would appreciate it if you did not distribute this video. Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/java-vtm-tutorials/java-vtm09-opengl-and-java/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Java Tutorial 08 &#8211; Intro To Eclipse</title>
		<link>http://www.20papercups.net/java-vtm-tutorials/java-vtm08-intro-to-eclipse/</link>
		<comments>http://www.20papercups.net/java-vtm-tutorials/java-vtm08-intro-to-eclipse/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 01:54:54 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Java Video Tutorials]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=98</guid>
		<description><![CDATA[This video gives an overview of the Eclipse IDE. Eclipse is a feature packed Java development environment that is also free and open source. In this video we see how we create projects in eclipse and run our programs. Note that this video is 1024&#215;768, so hit the full screen button to get more readable [...]]]></description>
			<content:encoded><![CDATA[<p>This video gives an overview of the Eclipse IDE. Eclipse is a feature packed Java development environment that is also free and open source. In this video we see how we create projects in eclipse and run our programs.<span id="more-98"></span></p>
<p style="text-align: center;"><img src="http://www.20papercups.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p style="text-align: left;">Note that this video is 1024&#215;768, so hit the full screen button to get more readable detail.</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p style="text-align: center;">
<p style="text-align: left;"><strong>Notes:</strong></p>
<p style="text-align: left;">You can get Eclipse from http://www.eclipse.org. It is available for pretty much all platforms. If you&#8217;re on Linux it is probably in your distribution&#8217;s repository.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/java-vtm-tutorials/java-vtm08-intro-to-eclipse/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>C++ Video &#8211; 3DBuzz Suppliment</title>
		<link>http://www.20papercups.net/tutorials/c-video-3dbuzz-suppliment/</link>
		<comments>http://www.20papercups.net/tutorials/c-video-3dbuzz-suppliment/#comments</comments>
		<pubDate>Mon, 08 Dec 2008 01:25:16 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[3dbuzz]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.20papercups.net/?p=113</guid>
		<description><![CDATA[This is a very short video explaining a problem that comes up time and time again on 3dbuzz.com. Essentially, why the code for their Hello World example doesn&#8217;t compile. If you have done any C++ coding before, you can safely ignore this video. Note that this video is 1024&#215;768, so hit the full screen button [...]]]></description>
			<content:encoded><![CDATA[<p>This is a very short video explaining a problem that comes up time and time again on <a href="http://www.3dbuzz.com" target="_blank">3dbuzz.com</a>. Essentially, why the code for their Hello World example doesn&#8217;t compile. If you have done any C++ coding before, you can safely ignore this video.<span id="more-113"></span></p>
<p style="text-align: center;"><img src="http://www.20papercups.net/wp-content/plugins/flash-video-player/default_video_player.gif" /></p>
<p style="text-align: left;">Note that this video is 1024&#215;768, so hit the full screen button to get more readable detail.</p>
<p style="text-align: center;"><script type="text/javascript"><!--
google_ad_client = "pub-9376349336558898";
google_ad_slot = "0815367707";
google_ad_width = 468;
google_ad_height = 60;
//--></script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</p>
<p style="text-align: left;"><strong>Notes:</strong></p>
<p style="text-align: left;">The 3DBuzz C++ videos include the following code:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;Hello World&quot;</span> <span style="color: #339933;">&lt;&lt;</span> endl<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This code fails to compile on newer versions of Visual C++ and GCC. All that needs to be done is to specify that main will return an int, and then actually return one:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   <span style="color: #000066;">cout</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #ff0000;">&quot;Hello World&quot;</span> <span style="color: #339933;">&lt;&lt;</span> endl<span style="color: #339933;">;</span>
   <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Of course, whether this actually needed a video is debatable!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.20papercups.net/tutorials/c-video-3dbuzz-suppliment/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
