Equalizer
1.2.1
|
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 }