comparison engine/core/view/renderers/genericrenderer.cpp @ 32:75b6394ced14

* remove geometric renderer, its not replaced by the more functional generic renderern * add grouing to generic renderer, probably this should be exported to the client in any way
author spq@33b003aa-7bff-0310-803a-e67f0ece8222
date Fri, 11 Jul 2008 15:37:16 +0000
parents 9a9f4447af7c
children 6f1227f4932b
comparison
equal deleted inserted replaced
31:9a9f4447af7c 32:75b6394ced14
285 285
286 GenericRenderer::GenericRenderer(RenderBackend* renderbackend, int position, ImagePool* imagepool, AnimationPool* animpool): 286 GenericRenderer::GenericRenderer(RenderBackend* renderbackend, int position, ImagePool* imagepool, AnimationPool* animpool):
287 RendererBase(renderbackend, position), 287 RendererBase(renderbackend, position),
288 m_imagepool(imagepool), 288 m_imagepool(imagepool),
289 m_animationpool(animpool), 289 m_animationpool(animpool),
290 m_infos() { 290 m_groups() {
291 setEnabled(false); 291 setEnabled(false);
292 } 292 }
293 293
294 GenericRenderer::GenericRenderer(const GenericRenderer& old): 294 GenericRenderer::GenericRenderer(const GenericRenderer& old):
295 RendererBase(old), 295 RendererBase(old),
296 m_imagepool(old.m_imagepool), 296 m_imagepool(old.m_imagepool),
297 m_animationpool(old.m_animationpool), 297 m_animationpool(old.m_animationpool),
298 m_infos() { 298 m_groups() {
299 setEnabled(false); 299 setEnabled(false);
300 } 300 }
301 301
302 RendererBase* GenericRenderer::clone() { 302 RendererBase* GenericRenderer::clone() {
303 return new GenericRenderer(*this); 303 return new GenericRenderer(*this);
304 } 304 }
305 305
306 GenericRenderer::~GenericRenderer() { 306 GenericRenderer::~GenericRenderer() {
307 } 307 }
308 void GenericRenderer::addLine(GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b) { 308 void GenericRenderer::addLine(int group, GenericRendererNode n1, GenericRendererNode n2, uint8_t r, uint8_t g, uint8_t b) {
309 GenericRendererElementInfo* info = new GenericRendererLineInfo(n1, n2, r, g, b); 309 GenericRendererElementInfo* info = new GenericRendererLineInfo(n1, n2, r, g, b);
310 m_infos.push_back(info); 310 m_groups[group].push_back(info);
311 } 311 }
312 void GenericRenderer::addPoint(GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b) { 312 void GenericRenderer::addPoint(int group, GenericRendererNode n, uint8_t r, uint8_t g, uint8_t b) {
313 GenericRendererElementInfo* info = new GenericRendererPointInfo(n, r, g, b); 313 GenericRendererElementInfo* info = new GenericRendererPointInfo(n, r, g, b);
314 m_infos.push_back(info); 314 m_groups[group].push_back(info);
315 } 315 }
316 void GenericRenderer::addQuad(GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b) { 316 void GenericRenderer::addQuad(int group, GenericRendererNode n1, GenericRendererNode n2, GenericRendererNode n3, GenericRendererNode n4, uint8_t r, uint8_t g, uint8_t b) {
317 GenericRendererElementInfo* info = new GenericRendererQuadInfo(n1, n2, n3, n4, r, g, b); 317 GenericRendererElementInfo* info = new GenericRendererQuadInfo(n1, n2, n3, n4, r, g, b);
318 m_infos.push_back(info); 318 m_groups[group].push_back(info);
319 } 319 }
320 void GenericRenderer::addText(GenericRendererNode n, AbstractFont* font, std::string text) { 320 void GenericRenderer::addText(int group, GenericRendererNode n, AbstractFont* font, std::string text) {
321 GenericRendererElementInfo* info = new GenericRendererTextInfo(n, font, text); 321 GenericRendererElementInfo* info = new GenericRendererTextInfo(n, font, text);
322 m_infos.push_back(info); 322 m_groups[group].push_back(info);
323 } 323 }
324 void GenericRenderer::addImage(GenericRendererNode n, int image) { 324 void GenericRenderer::addImage(int group, GenericRendererNode n, int image) {
325 GenericRendererElementInfo* info = new GenericRendererImageInfo(n, image); 325 GenericRendererElementInfo* info = new GenericRendererImageInfo(n, image);
326 m_infos.push_back(info); 326 m_groups[group].push_back(info);
327 } 327 }
328 void GenericRenderer::addAnimation(GenericRendererNode n, int animation) { 328 void GenericRenderer::addAnimation(int group, GenericRendererNode n, int animation) {
329 GenericRendererElementInfo* info = new GenericRendererAnimationInfo(n, animation); 329 GenericRendererElementInfo* info = new GenericRendererAnimationInfo(n, animation);
330 m_infos.push_back(info); 330 m_groups[group].push_back(info);
331 } 331 }
332 void GenericRenderer::removeAll() { 332 void GenericRenderer::removeAll(int group) {
333 std::vector<GenericRendererElementInfo*>::const_iterator info_it = m_infos.begin(); 333 std::vector<GenericRendererElementInfo*>::const_iterator info_it = m_groups[group].begin();
334 for (;info_it != m_infos.end(); ++info_it) { 334 for (;info_it != m_groups[group].end(); ++info_it) {
335 delete *info_it; 335 delete *info_it;
336 } 336 }
337 m_infos.clear(); 337 m_groups[group].clear();
338 m_groups.erase(group);
338 } 339 }
339 340
340 void GenericRenderer::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances) { 341 void GenericRenderer::render(Camera* cam, Layer* layer, std::vector<Instance*>& instances) {
341 std::vector<GenericRendererElementInfo*>::const_iterator info_it = m_infos.begin(); 342 std::map<int, std::vector<GenericRendererElementInfo*> >::iterator group_it = m_groups.begin();
342 for (;info_it != m_infos.end(); ++info_it) { 343 for(; group_it != m_groups.end(); ++group_it) {
343 GenericRendererElementInfo* info = *info_it; 344 std::vector<GenericRendererElementInfo*>::const_iterator info_it = group_it->second.begin();
344 info->render(cam, layer, instances, m_renderbackend, m_imagepool, m_animationpool); 345 for (;info_it != group_it->second.end(); ++info_it) {
346 (*info_it)->render(cam, layer, instances, m_renderbackend, m_imagepool, m_animationpool);
347 }
345 } 348 }
346 } 349 }
347 } 350 }