Subversion Repositories gelsvn

Rev

Rev 399 | Blame | Last modification | View Log | RSS feed

/*
 *  ManifoldRenderer.h
 *  GEL
 *
 *  Created by J. Andreas Bærentzen on 20/09/08.
 *  Copyright 2008 __MyCompanyName__. All rights reserved.
 *
 */
#ifndef __MESHEDIT_RENDERER_H__
#define __MESHEDIT_RENDERER_H__

#include <GL/glew.h>
#include "harmonics.h"
#include <GLGraphics/draw.h>
#include <GLGraphics/IDBufferWireFrameRenderer.h>

class ManifoldRenderer
        {
        protected:
                GLuint display_list;
        public:
                ManifoldRenderer(): display_list(glGenLists(1)) {}
                virtual ~ManifoldRenderer()
                {
                        glDeleteLists(display_list, 1);
                }
                virtual void draw()
                {
                        glCallList(display_list);
                }
        };

class NormalRenderer: public ManifoldRenderer
        {
        public:
                NormalRenderer(HMesh::Manifold& m, bool flat)
                {
                        glNewList(display_list,GL_COMPILE);
                        GLGraphics::draw(m,flat);
                        glEndList();
                }
        };

class WireframeRenderer: public ManifoldRenderer
        {
                GLGraphics::IDBufferWireframeRenderer* idbuff_renderer;
                
                int maximum_face_valency(HMesh::Manifold& m);
                
        public:
                ~WireframeRenderer()
                {
                        delete idbuff_renderer;
                }
                
                WireframeRenderer(HMesh::Manifold& m, bool flat);
                
                void draw();
        };


class HarmonicsRenderer: public ManifoldRenderer
        {
                
        public:
                HarmonicsRenderer(Harmonics* h)
                {
                        glNewList(display_list,GL_COMPILE);
                        if(h) h->draw();
                        glEndList();
                }
        };



class SimpleShaderRenderer: public ManifoldRenderer
        {
                GLuint prog,vs,fs;
        public:
                SimpleShaderRenderer(HMesh::Manifold& m, const std::string& vss, const std::string& fss);
                ~SimpleShaderRenderer()
                {
                        glDeleteProgram(prog);
                        glDeleteShader(vs);
                        glDeleteShader(fs);
                }
                virtual void draw();
        
        };

class ReflectionLineRenderer: public SimpleShaderRenderer
        {
                const static std::string vss;
                const static std::string fss;
        public:
                ReflectionLineRenderer(HMesh::Manifold& m):
                        SimpleShaderRenderer(m, vss, fss) {}
                
        };

class IsophoteLineRenderer: public SimpleShaderRenderer
        {
                const static std::string vss;
                const static std::string fss;
        public:
                IsophoteLineRenderer(HMesh::Manifold& m):
                SimpleShaderRenderer(m, vss, fss) {}
                
        };

class MetallicRenderer: public SimpleShaderRenderer
        {
                const static std::string vss;
                const static std::string fss;
        public:
                MetallicRenderer(HMesh::Manifold& m):
                SimpleShaderRenderer(m, vss, fss) {}
                
        };

class GlazedRenderer: public SimpleShaderRenderer
        {
                const static std::string vss;
                const static std::string fss;
        public:
                GlazedRenderer(HMesh::Manifold& m):
                SimpleShaderRenderer(m, vss, fss) {}
                
        };



#endif

Generated by GNU Enscript 1.6.6.