/[gzz]/gzz/gfx/librenderables/Renderables.hxx
ViewVC logotype

Diff of /gzz/gfx/librenderables/Renderables.hxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.17 by tjl, Tue Oct 1 17:05:32 2002 UTC revision 1.18 by humppake, Wed Oct 2 11:43:44 2002 UTC
# Line 93  namespace Renderables { Line 93  namespace Renderables {
93      const int RENDERABLE0 = 0x0800000;      const int RENDERABLE0 = 0x0800000;
94      const int RENDERABLE1 = 0x1000000;      const int RENDERABLE1 = 0x1000000;
95      const int RENDERABLE2 = 0x2000000;      const int RENDERABLE2 = 0x2000000;
96        const int RENDERABLE3 = 0x3000000;
97      const int RMASK = 0xf800000;      const int RMASK = 0xf800000;
98    
99      class ShaderRect {      class ShaderRect {
# Line 144  namespace Renderables { Line 145  namespace Renderables {
145          virtual void render(Coords::CoordSys &c1, Coords::CoordSys &c2) \          virtual void render(Coords::CoordSys &c1, Coords::CoordSys &c2) \
146              { renderImpl(c1, c2); } \              { renderImpl(c1, c2); } \
147                    
148        /** An OpenGL thing which starts in one coordinate
149         * system and ends in another. Used for connections.
150         * The third coordinate system is used for leaving
151         * unnecessary stuff without rendering.
152         */
153        struct Renderable3 {
154            virtual ~Renderable3() { }
155            virtual void render(Coords::CoordSys &c1, Coords::CoordSys &c2,
156                                Coords::CoordSys &c3) = 0;
157        };
158    
159    #define IMPLEMENTRENDER3 \
160            virtual void render(Coords::CoordSys &c1, Coords::CoordSys &c2, \
161                                Coords::CoordSys &c3) \
162                { renderImpl(c1, c2, c3); } \
163    
164    
165      using std::vector;      using std::vector;
# Line 151  namespace Renderables { Line 167  namespace Renderables {
167      class Renderer {      class Renderer {
168          Coords::CoordSet coordset;          Coords::CoordSet coordset;
169      public:      public:
170          // TODO: RENDERABLE3 setPoints()
171          void setPoints( int ninds,          void setPoints( int ninds,
172                                   int *inds1, float *points1,                                   int *inds1, float *points1,
173                                   int *interpinds,                                   int *interpinds,
# Line 167  namespace Renderables { Line 184  namespace Renderables {
184          void renderScene(int *codes,          void renderScene(int *codes,
185                                  ObjectStorer<Renderable0> &r0s,                                  ObjectStorer<Renderable0> &r0s,
186                                  ObjectStorer<Renderable1> &r1s,                                  ObjectStorer<Renderable1> &r1s,
187                                  ObjectStorer<Renderable2> &r2s) {                                  ObjectStorer<Renderable2> &r2s,
188                                    ObjectStorer<Renderable3> &r3s) {
189              int i=0;              int i=0;
190              if(dbg) std::cout << "renderScene\n";              if(dbg) std::cout << "renderScene\n";
191              while(codes[i] != 0) {              while(codes[i] != 0) {
192                  if(dbg) std::cout << "Rendercode "<<i<<" "<<codes[i]<<"\n";                  if(dbg) std::cout << "Rendercode "<<i<<" "<<codes[i]<<"\n";
193                  // cout << "Code: "<<codes[i]<<"\n";                  // cout << "Code: "<<codes[i]<<"\n";
194                  int code = codes[i] & ~RMASK;                  int code = codes[i] & ~RMASK;
195                  if(codes[i] & RENDERABLE0) {                  if((codes[i] & RMASK) == RENDERABLE0) {
196                      if(dbg) std::cout << "rend0 "<<r0s[code]<<"\n";                      if(dbg) std::cout << "rend0 "<<r0s[code]<<"\n";
197                      r0s[code]->render();                      r0s[code]->render();
198                      i += 1;                      i += 1;
199                  }                  }
200                  else if(codes[i] & RENDERABLE1) {                  else if((codes[i] & RMASK) ==  RENDERABLE1) {
201                      Coords::CoordSys *cs1 = coordset.get(codes[i+1]);                      Coords::CoordSys *cs1 = coordset.get(codes[i+1]);
202                      if(dbg) std::cout << "rend1 "<<r1s[code]<<": "<<codes[i+1]<<" "<<cs1<<"\n";                      if(dbg) std::cout << "rend1 "<<r1s[code]<<": "<<codes[i+1]<<" "<<cs1<<"\n";
203                      if(cs1)                      if(cs1)
204                          r1s[code]->render(*cs1);                          r1s[code]->render(*cs1);
205                      i += 2;                      i += 2;
206                  }                  }
207                  else if(codes[i] & RENDERABLE2) {                  else if((codes[i] & RMASK) == RENDERABLE2) {
208                      Coords::CoordSys *cs1 = coordset.get(codes[i+1]);                      Coords::CoordSys *cs1 = coordset.get(codes[i+1]);
209                      Coords::CoordSys *cs2 = coordset.get(codes[i+2]);                      Coords::CoordSys *cs2 = coordset.get(codes[i+2]);
210                      if(dbg) std::cout << "rend2 "<<r2s[code]<<": "                      if(dbg) std::cout << "rend2 "<<r2s[code]<<": "
# Line 195  namespace Renderables { Line 213  namespace Renderables {
213                          r2s[code]->render(*cs1, *cs2);                          r2s[code]->render(*cs1, *cs2);
214                      i += 3;                      i += 3;
215                  }                  }
216                    else if((codes[i] & RMASK) == RENDERABLE3) {
217                        Coords::CoordSys *cs1 = coordset.get(codes[i+1]);
218                        Coords::CoordSys *cs2 = coordset.get(codes[i+2]);
219                        Coords::CoordSys *cs3 = coordset.get(codes[i+3]);
220                        if(dbg) std::cout << "rend3 "<<r3s[code]<<": "
221                                          <<codes[i+1]<<" "<<cs1<<" "<<codes[i+2]<<" "<<cs2<<" "
222                                          <<cs3<<" "<<codes[i+3]<<"\n";
223                        if(cs1 && cs2 && cs3)
224                            r3s[code]->render(*cs1, *cs2, *cs3);
225                        i += 4;
226                    }
227                  else {                  else {
228                      // We have a problem                      // We have a problem
229                      cout << "HELP!\n";                      cout << "HELP!\n";
# Line 209  namespace Renderables { Line 238  namespace Renderables {
238  }  }
239    
240    
241    
242    
243    
244    
245    
246    
247    
248    
249    
250    
251    
252    
253    
254    
255    
256    
257    
258    
259    
260    
261    
262    

Legend:
Removed from v.1.17  
changed lines
  Added in v.1.18

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26