Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #include "renderable.h"
00035
00036
00037 namespace glut {
00038
00039
00040
00041 Renderable::~Renderable(void) throw() { }
00042 RenderQueue::~RenderQueue(void) throw() { }
00043
00044
00045
00046
00047
00048
00049
00050
00051 class RQImpl : public RenderQueue {
00052 public:
00053
00054 RQImpl(void) throw();
00055 ~RQImpl(void) throw();
00056
00057
00058 void initialize(IN int nSlots);
00059
00060
00061 poly_request_t * grabRequestSlot(void) throw();
00062 poly_request_t * popRequest(void) throw();
00063
00064 private:
00065
00066 int m_nMax;
00067 int m_nCurr;
00068 poly_request_t * m_polys;
00069 };
00070
00071
00072
00073 RQImpl::RQImpl
00074 (
00075 void
00076 )
00077 throw()
00078 {
00079 m_nMax = 0;
00080 m_nCurr = 0;
00081 m_polys = NULL;
00082 }
00083
00084
00085
00086 RQImpl::~RQImpl
00087 (
00088 void
00089 )
00090 throw()
00091 {
00092 if (m_polys) {
00093 delete[] m_polys;
00094 }
00095 }
00096
00097
00098
00099 void
00100 RQImpl::initialize
00101 (
00102 IN int nSlots
00103 )
00104 {
00105 ASSERT(nSlots > 0, "bad slot count: %d", nSlots);
00106
00107 m_nMax = nSlots;
00108 m_nCurr = 0;
00109
00110 ASSERT(!m_polys, "already have polygon array?");
00111 m_polys = new poly_request_t[m_nMax];
00112 ASSERT(m_polys, "out of memory");
00113 }
00114
00115
00116
00117 poly_request_t *
00118 RQImpl::grabRequestSlot
00119 (
00120 void
00121 )
00122 throw()
00123 {
00124 ASSERT(m_polys, "null");
00125 ASSERT(m_nMax > 0, "Bad max size: %d", m_nMax);
00126 ASSERT(m_nCurr >= 0 && m_nCurr <= m_nMax, "Bad current size: %d",
00127 m_nCurr);
00128 if (m_nCurr >= m_nMax) {
00129 return NULL;
00130 }
00131
00132
00133 poly_request_t * ptr = m_polys + m_nCurr;
00134 ++m_nCurr;
00135 ptr->clear();
00136 return ptr;
00137 }
00138
00139
00140
00141 poly_request_t *
00142 RQImpl::popRequest
00143 (
00144 void
00145 )
00146 throw()
00147 {
00148 ASSERT(m_polys, "null");
00149 ASSERT(m_nMax > 0, "Bad max size: %d", m_nMax);
00150 ASSERT(m_nCurr >= 0 && m_nCurr <= m_nMax, "Bad current size: %d",
00151 m_nCurr);
00152 if (m_nCurr < 1) {
00153 return NULL;
00154 }
00155
00156 --m_nCurr;
00157 return m_polys + m_nCurr;
00158 }
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168 bool
00169 Renderable::isAnimateable
00170 (
00171 void
00172 )
00173 const
00174 throw()
00175 {
00176 return false;
00177 }
00178
00179
00180
00181 void
00182 Renderable::getAnimationState
00183 (
00184 OUT std::string& state
00185 )
00186 {
00187 state.clear();
00188 }
00189
00190
00191
00192 bool
00193 Renderable::setAnimationState
00194 (
00195 IN const char * state
00196 )
00197 {
00198 ASSERT(state, "null");
00199
00200 return false;
00201 }
00202
00203
00204
00205 void
00206 Renderable::getAnimationVerbs
00207 (
00208 OUT VecString& verbs
00209 )
00210 {
00211 verbs.clear();
00212 }
00213
00214
00215
00216 bool
00217 Renderable::setAnimation
00218 (
00219 IN const char * verb
00220 )
00221 {
00222 return false;
00223 }
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233 smart_ptr<RenderQueue>
00234 RenderQueue::create
00235 (
00236 IN int nSlots
00237 )
00238 {
00239 ASSERT(nSlots > 0, "Bad queue slot count: %d", nSlots);
00240
00241 smart_ptr<RQImpl> local = new RQImpl;
00242 ASSERT(local, "out of memory");
00243
00244 local->initialize(nSlots);
00245
00246 return local;
00247 }
00248
00249
00250
00251 };
00252