Equalizer  1.2.1
hello.cpp
00001 
00002 /* Copyright (c) 2007, Stefan Eilemann <eile@equalizergraphics.com> 
00003  *
00004  * Redistribution and use in source and binary forms, with or without
00005  * modification, are permitted provided that the following conditions are met:
00006  *
00007  * - Redistributions of source code must retain the above copyright notice, this
00008  *   list of conditions and the following disclaimer.
00009  * - Redistributions in binary form must reproduce the above copyright notice,
00010  *   this list of conditions and the following disclaimer in the documentation
00011  *   and/or other materials provided with the distribution.
00012  * - Neither the name of Eyescale Software GmbH nor the names of its
00013  *   contributors may be used to endorse or promote products derived from this
00014  *   software without specific prior written permission.
00015  *
00016  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
00017  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00018  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00019  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
00020  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
00021  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
00022  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
00023  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
00024  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00025  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00026  * POSSIBILITY OF SUCH DAMAGE.
00027  *
00028  * Equalizer 'Hello, World!' example. Shows the minimum Equalizer program,
00029  * rendering spinning quads around the origin.
00030  */
00031 
00032 #include <seq/sequel.h>
00033 #include <stdlib.h>
00034 
00035 namespace eqHello
00036 {
00037 class Renderer : public seq::Renderer
00038 {
00039 public:
00040     Renderer( seq::Application& application ) : seq::Renderer( application ) {}
00041     virtual ~Renderer() {}
00042 
00043 protected:
00044     virtual void draw( co::Object* frameData );
00045 };
00046 
00047 class Application : public seq::Application
00048 {
00049 public:
00050     virtual ~Application() {}
00051     virtual seq::Renderer* createRenderer() { return new Renderer( *this ); }
00052     virtual co::Object * createObject( const uint32_t type )
00053         { EQUNIMPLEMENTED; return 0; }
00054 };
00055 typedef co::base::RefPtr< Application > ApplicationPtr;
00056 }
00057 
00058 int main( const int argc, char** argv )
00059 {
00060     eqHello::ApplicationPtr app = new eqHello::Application;
00061 
00062     if( app->init( argc, argv, 0 ) && app->run( 0 ) && app->exit( ))
00063         return EXIT_SUCCESS;
00064     
00065     return EXIT_FAILURE;
00066 }
00067 
00069 void eqHello::Renderer::draw( co::Object* frameData )
00070 {
00071     applyRenderContext(); // set up OpenGL State
00072 
00073     const float lightPos[] = { 0.0f, 0.0f, 1.0f, 0.0f };
00074     glLightfv( GL_LIGHT0, GL_POSITION, lightPos );
00075 
00076     const float lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f };
00077     glLightfv( GL_LIGHT0, GL_AMBIENT, lightAmbient );
00078 
00079     applyModelMatrix(); // global camera
00080 
00081     // render six axis-aligned colored quads around the origin
00082     for( int i = 0; i < 6; i++ )
00083     {
00084         glColor3f( (i&1) ? 0.5f:1.0f, (i&2) ? 1.0f:0.5f, (i&4) ? 1.0f:0.5f );
00085 
00086         glNormal3f( 0.0f, 0.0f, 1.0f );
00087         glBegin( GL_TRIANGLE_STRIP );
00088             glVertex3f(  .7f,  .7f, -1.0f );
00089             glVertex3f( -.7f,  .7f, -1.0f );
00090             glVertex3f(  .7f, -.7f, -1.0f );
00091             glVertex3f( -.7f, -.7f, -1.0f );
00092         glEnd();
00093 
00094         if( i < 3 )
00095             glRotatef(  90.0f, 0.0f, 1.0f, 0.0f );
00096         else if( i == 3 )
00097             glRotatef(  90.0f, 1.0f, 0.0f, 0.0f );
00098         else
00099             glRotatef( 180.0f, 1.0f, 0.0f, 0.0f );
00100     }
00101 }
Generated on Fri Jun 8 2012 15:44:31 for Equalizer 1.2.1 by  doxygen 1.8.0