Equalizer
1.4.1
|
00001 00002 /* Copyright (c) 2007-2012, 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 }; 00053 typedef lunchbox::RefPtr< Application > ApplicationPtr; 00054 } 00055 00056 int main( const int argc, char** argv ) 00057 { 00058 eqHello::ApplicationPtr app = new eqHello::Application; 00059 00060 if( app->init( argc, argv, 0 ) && app->run( 0 ) && app->exit( )) 00061 return EXIT_SUCCESS; 00062 00063 return EXIT_FAILURE; 00064 } 00065 00067 void eqHello::Renderer::draw( co::Object* frameData ) 00068 { 00069 applyRenderContext(); // set up OpenGL State 00070 00071 const float lightPos[] = { 0.0f, 0.0f, 1.0f, 0.0f }; 00072 glLightfv( GL_LIGHT0, GL_POSITION, lightPos ); 00073 00074 const float lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f }; 00075 glLightfv( GL_LIGHT0, GL_AMBIENT, lightAmbient ); 00076 00077 applyModelMatrix(); // global camera 00078 00079 // render six axis-aligned colored quads around the origin 00080 for( int i = 0; i < 6; i++ ) 00081 { 00082 glColor3f( (i&1) ? 0.5f:1.0f, (i&2) ? 1.0f:0.5f, (i&4) ? 1.0f:0.5f ); 00083 00084 glNormal3f( 0.0f, 0.0f, 1.0f ); 00085 glBegin( GL_TRIANGLE_STRIP ); 00086 glVertex3f( .7f, .7f, -1.0f ); 00087 glVertex3f( -.7f, .7f, -1.0f ); 00088 glVertex3f( .7f, -.7f, -1.0f ); 00089 glVertex3f( -.7f, -.7f, -1.0f ); 00090 glEnd(); 00091 00092 if( i < 3 ) 00093 glRotatef( 90.0f, 0.0f, 1.0f, 0.0f ); 00094 else if( i == 3 ) 00095 glRotatef( 90.0f, 1.0f, 0.0f, 0.0f ); 00096 else 00097 glRotatef( 180.0f, 1.0f, 0.0f, 0.0f ); 00098 } 00099 }