Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/graphics/render2D/render_2d.cc @ 5317

Last change on this file since 5317 was 5317, checked in by bensch, 19 years ago

orxonox/trunk: Shaders are now NOT renderen in 2D-mode.
After 2D-mode is left, the Shader will be reactivated

File size: 3.3 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11   ### File Specific:
12   main-programmer: ...
13   co-programmer: ...
14*/
15
16//#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_WORLD_ENTITY
17
18#include "render_2d.h"
19
20#include "graphics_engine.h"
21#include "class_list.h"
22#include "list.h"
23#include "element_2d.h"
24
25#include "shader.h"
26
27#include <math.h>
28
29using namespace std;
30
31
32
33/**
34 * standard constructor
35 */
36Render2D::Render2D ()
37{
38   this->setClassID(CL_RENDER_2D, "Render2D");
39   this->setName("Render2D");
40
41   for (int i = 0; i < E2D_LAYER_COUNT; i++)
42     this->element2DList[i] = new tList<Element2D>;
43}
44
45/**
46 *  the singleton reference to this class
47 */
48Render2D* Render2D::singletonRef = NULL;
49
50/**
51 * standard deconstructor
52 */
53Render2D::~Render2D ()
54{
55  delete NullElement2D::getInstance();
56
57  for (int i = 0; i < E2D_LAYER_COUNT; i++)
58    delete this->element2DList[i];
59
60  Render2D::singletonRef = NULL;
61}
62
63
64/**
65 * registers a 2D-element to the 2D-Renderer
66 * @param element2D the element to registers
67 *
68 * do not use this function by yourself, because this is used by Element2D's constructor
69 */
70void Render2D::registerElement2D(Element2D* element2D)
71{
72  this->element2DList[(int)log2(E2D_DEFAULT_LAYER)]->add(element2D);
73}
74
75/**
76 * unregisters a 2D-element from the 2D-Renderer
77 * @param element2D The element to unregister
78 *
79 * do not use this function by yourself, because this is used by Element2D's destructor
80 */
81void Render2D::unregisterElement2D(Element2D* element2D)
82{
83  this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
84}
85
86
87/**
88 * moves an 2D-Element to another Layer
89 * @param element2D the Element to move
90 * @param to which layer to move it to.
91 */
92void Render2D::moveToLayer(Element2D* element2D, E2D_LAYER to)
93{
94  if (element2D->getLayer() != to)
95  {
96    this->element2DList[(int)log2(element2D->getLayer())]->remove(element2D);
97    this->element2DList[(int)log2(to)]->add(element2D);
98  }
99}
100
101
102/**
103 * ticks all the 2d-elements
104 * @param dt the timestep since last dt
105 */
106void Render2D::tick(float dt)
107{
108  for (int i = 0; i < E2D_LAYER_COUNT; i++)
109  {
110    tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
111    Element2D* elem = iterator->firstElement();
112    while (elem != NULL)
113    {
114      if (elem->isActive())
115        elem->tick(dt);
116      elem = iterator->nextElement();
117    }
118    delete iterator;
119  }
120}
121
122/**
123 * renders all the Elements of the Render2D-engine
124 * @param layer the Layer to draw
125 */
126void Render2D::draw(unsigned int layer) const
127{
128  Shader::suspendShader();
129
130  GraphicsEngine::enter2DMode();
131
132  int drawLayer = 1;
133
134  for (int i = 0; i < E2D_LAYER_COUNT; i++)
135  {
136    if (layer & drawLayer && this->element2DList[i]->getSize() > 0)
137    {
138      tIterator<Element2D>* iterator = this->element2DList[i]->getIterator();
139      Element2D* elem = iterator->firstElement();
140      while (elem != NULL)
141      {
142        if (elem->isVisible())
143          elem->draw();
144        elem = iterator->nextElement();
145      }
146      delete iterator;
147    }
148    drawLayer << 1;
149  }
150  GraphicsEngine::leave2DMode();
151
152  Shader::restoreShader();
153}
Note: See TracBrowser for help on using the repository browser.