00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #include "ImmediateMode.h"
00018 
00019 using namespace Fluxus;
00020 
00021 ImmediateMode::ImmediateMode()
00022 {
00023 }
00024 
00025 ImmediateMode::~ImmediateMode()
00026 {
00027 }
00028 
00029 void ImmediateMode::Add(Primitive *p, State *s)
00030 {   
00031     IMItem *newitem = new IMItem;
00032     newitem->m_State = *s;
00033     newitem->m_Primitive = p;
00034     m_IMRecord.push_back(newitem);
00035 }
00036 
00037 void ImmediateMode::Render()
00038 {
00039     for(vector<IMItem*>::iterator i=m_IMRecord.begin(); i!=m_IMRecord.end(); ++i)
00040     {
00041         glPushMatrix();
00042         (*i)->m_State.Apply();
00043         
00044         
00045         (*i)->m_Primitive->SetState(&(*i)->m_State);    
00046         (*i)->m_Primitive->Prerender();
00047         (*i)->m_Primitive->Render();
00048         glPopMatrix();
00049     }
00050 }
00051 
00052 void ImmediateMode::Clear()
00053 {
00054     for(vector<IMItem*>::iterator i=m_IMRecord.begin(); i!=m_IMRecord.end(); ++i)
00055     {
00056         delete *i;
00057     }
00058     
00059     m_IMRecord.clear();
00060 }