Ignore:
Timestamp:
Mar 9, 2012 1:18:24 PM (12 years ago)
Author:
ldelgass
Message:

Don't create array of planes unless PLANE_CMD is defined. Use a separate
texture pointer for legend rendering instead of using plane[0].

Location:
trunk/packages/vizservers/nanovis
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/PlaneRenderer.cpp

    r2822 r2834  
    2020
    2121PlaneRenderer::PlaneRenderer(CGcontext _context, int _width, int _height) :
    22     active_plane(-1),
    23     n_planes(0),
    24     render_width(_width),
    25     render_height(_height),
    26     g_context(_context)
     22    _active_plane(-1),
     23    _n_planes(0),
     24    _render_width(_width),
     25    _render_height(_height),
     26    _g_context(_context)
    2727{
    28     plane.clear();
    29     tf.clear();
     28    _plane.clear();
     29    _tf.clear();
    3030    init_shaders();
    3131}
     
    4040{
    4141    //plane rendering shader
    42     m_fprog = LoadCgSourceProgram(g_context, "one_plane.cg", CG_PROFILE_FP30,
     42    _fprog = LoadCgSourceProgram(_g_context, "one_plane.cg", CG_PROFILE_FP30,
    4343        NULL);
    44     m_data_param = cgGetNamedParameter(m_fprog, "data");
    45     m_tf_param = cgGetNamedParameter(m_fprog, "tf");
    46     m_render_param = cgGetNamedParameter(m_fprog, "render_param");
     44    _data_param = cgGetNamedParameter(_fprog, "data");
     45    _tf_param = cgGetNamedParameter(_fprog, "tf");
     46    _render_param = cgGetNamedParameter(_fprog, "render_param");
    4747}
    4848
     
    5050PlaneRenderer::add_plane(Texture2D* _p, TransferFunction* tfPtr)
    5151{
    52     int ret = n_planes;
     52    int ret = _n_planes;
    5353
    54     plane.push_back(_p);
    55     tf.push_back(tfPtr);
     54    _plane.push_back(_p);
     55    _tf.push_back(tfPtr);
    5656
    5757    if(ret==0)
    58         active_plane = ret;
     58        _active_plane = ret;
    5959
    60     n_planes++;
     60    _n_planes++;
    6161    return ret;
    6262}
     
    6464void
    6565PlaneRenderer::remove_plane(int index) {
    66     std::vector<Texture2D*>::iterator piter = plane.begin()+index;
    67     std::vector<TransferFunction*>::iterator tfiter = tf.begin()+index;
     66    std::vector<Texture2D*>::iterator piter = _plane.begin()+index;
     67    std::vector<TransferFunction*>::iterator tfiter = _tf.begin()+index;
    6868
    69     plane.erase(piter);
    70     tf.erase(tfiter);
     69    _plane.erase(piter);
     70    _tf.erase(tfiter);
    7171
    72     n_planes--;
     72    _n_planes--;
    7373}
    7474
     
    7676PlaneRenderer::render()
    7777{
    78     if (n_planes == 0)
     78    if (_n_planes == 0)
    7979        return;
    8080
     
    8282    glEnable(GL_BLEND);
    8383
    84     glViewport(0, 0, render_width, render_height);
     84    glViewport(0, 0, _render_width, _render_height);
    8585    glMatrixMode(GL_PROJECTION);
    8686    glLoadIdentity();
    87     gluOrtho2D(0, render_width, 0, render_height);
     87    gluOrtho2D(0, _render_width, 0, _render_height);
    8888    glMatrixMode(GL_MODELVIEW);
    8989    glLoadIdentity();
     
    9292
    9393    //if no active plane
    94     if (active_plane == -1)
     94    if (_active_plane == -1)
    9595        return;
    9696
    97     activate_shader(active_plane);
     97    activate_shader(_active_plane);
    9898    glBegin(GL_QUADS);
    9999    glTexCoord2f(0, 0); glVertex2f(0, 0);
    100     glTexCoord2f(1, 0); glVertex2f(render_width, 0);
    101     glTexCoord2f(1, 1); glVertex2f(render_width, render_height);
    102     glTexCoord2f(0, 1); glVertex2f(0, render_height);
     100    glTexCoord2f(1, 0); glVertex2f(_render_width, 0);
     101    glTexCoord2f(1, 1); glVertex2f(_render_width, _render_height);
     102    glTexCoord2f(0, 1); glVertex2f(0, _render_height);
    103103    glEnd();
    104104    deactivate_shader();
     
    109109PlaneRenderer::activate_shader(int index)
    110110{
    111     cgGLSetTextureParameter(m_data_param, plane[index]->id);
    112     cgGLSetTextureParameter(m_tf_param, tf[index]->id());
    113     cgGLEnableTextureParameter(m_data_param);
    114     cgGLEnableTextureParameter(m_tf_param);
     111    cgGLSetTextureParameter(_data_param, _plane[index]->id);
     112    cgGLSetTextureParameter(_tf_param, _tf[index]->id());
     113    cgGLEnableTextureParameter(_data_param);
     114    cgGLEnableTextureParameter(_tf_param);
    115115
    116     cgGLSetParameter4f(m_render_param, 0., 0., 0., 0.);
     116    cgGLSetParameter4f(_render_param, 0., 0., 0., 0.);
    117117
    118     cgGLBindProgram(m_fprog);
     118    cgGLBindProgram(_fprog);
    119119    cgGLEnableProfile(CG_PROFILE_FP30);
    120120}
     
    124124{
    125125    cgGLDisableProfile(CG_PROFILE_FP30);
    126     cgGLDisableTextureParameter(m_data_param);
    127     cgGLDisableTextureParameter(m_tf_param);
     126    cgGLDisableTextureParameter(_data_param);
     127    cgGLDisableTextureParameter(_tf_param);
    128128}
    129129
     
    131131PlaneRenderer::set_active_plane(int index)
    132132{
    133     active_plane = index;
     133    _active_plane = index;
    134134}
    135135
     
    137137PlaneRenderer::set_screen_size(int w, int h)
    138138{
    139     render_width = w;
    140     render_height = h;
     139    _render_width = w;
     140    _render_height = h;
    141141}
  • trunk/packages/vizservers/nanovis/PlaneRenderer.h

    r2822 r2834  
    1414 * ======================================================================
    1515 */
    16 #ifndef _PLANE_RENDERER_H_
    17 #define _PLANE_RENDERER_H_
    18 
    19 #include <GL/glew.h>
    20 #include <Cg/cgGL.h>
     16#ifndef PLANE_RENDERER_H
     17#define PLANE_RENDERER_H
    2118
    2219#include <math.h>
     
    2421#include <assert.h>
    2522#include <float.h>
     23
    2624#include <vector>
     25
     26#include <GL/glew.h>
     27#include <Cg/cgGL.h>
    2728
    2829#include "global.h"
     
    3233class PlaneRenderer
    3334{
    34 private:
    35     std::vector<Texture2D*> plane;      // Array of volumes
    36     std::vector<TransferFunction*> tf; // Array of corresponding transfer functions
    37     int active_plane;           // The active plane, only one is rendered
    38     int n_planes;
    39 
    40     int render_width;   //render size
    41     int render_height; 
    42 
    43     //cg related
    44     CGcontext g_context;        // The Nvidia cg context
    45     CGprogram m_fprog;
    46     CGparameter m_data_param;
    47     CGparameter m_tf_param;
    48     CGparameter m_render_param;
    49 
    50     void init_shaders();
    51     void activate_shader(int plane_index);
    52     void deactivate_shader();
    53 
    5435public:
    5536    PlaneRenderer(CGcontext _context, int width, int height);
     37
    5638    ~PlaneRenderer();
    5739
    5840    int add_plane(Texture2D* _p, TransferFunction* _tf);
     41
    5942    // Add a plane and its transfer function. We require a transfer function
    6043    // when a plane is added.
    6144    void remove_plane(int index);
     45
    6246    void set_active_plane(int index); //set the active plane to be rendered
     47
    6348    void set_screen_size(int w, int h); //change the rendering size
     49
    6450    void render();
     51
     52private:
     53    void init_shaders();
     54
     55    void activate_shader(int plane_index);
     56
     57    void deactivate_shader();
     58
     59    std::vector<Texture2D *> _plane;    // Array of volumes
     60    std::vector<TransferFunction *> _tf; // Array of corresponding transfer functions
     61    int _active_plane;          // The active plane, only one is rendered
     62    int _n_planes;
     63
     64    int _render_width;   //render size
     65    int _render_height; 
     66
     67    //cg related
     68    CGcontext _g_context;       // The Nvidia cg context
     69    CGprogram _fprog;
     70    CGparameter _data_param;
     71    CGparameter _tf_param;
     72    CGparameter _render_param;
    6573};
    6674
  • trunk/packages/vizservers/nanovis/nanovis.cpp

    r2831 r2834  
    121121std::vector<PointSet *> NanoVis::pointSet;
    122122#endif
     123
    123124PlaneRenderer *NanoVis::plane_renderer = NULL;
     125#if PLANE_CMD
    124126// pointers to 2D planes, currently handle up 10
    125127Texture2D *NanoVis::plane[10];
     128#endif
     129Texture2D *NanoVis::legendTexture = NULL;
    126130NvColorTableRenderer *NanoVis::color_table_renderer = NULL;
    127131
     
    523527        data[i] = data[i+256] = (float)(i/255.0);
    524528    }
    525     plane[0] = new Texture2D(256, 2, GL_FLOAT, GL_LINEAR, 1, data);
    526     int index = plane_renderer->add_plane(plane[0], tf);
     529    legendTexture = new Texture2D(256, 2, GL_FLOAT, GL_LINEAR, 1, data);
     530    int index = plane_renderer->add_plane(legendTexture, tf);
    527531    plane_renderer->set_active_plane(index);
    528532
     
    549553
    550554    TRACE("leaving render_legend\n");
    551     delete plane[0];
     555    delete legendTexture;
    552556    return TCL_OK;
    553557}
     
    671675}
    672676
     677#if PROTOTYPE
    673678/*
    674679 * FIXME: This routine is fairly expensive (60000 floating pt divides).
     
    694699    delete[] data;
    695700}
     701#endif
    696702
    697703void NanoVis::initParticle()
  • trunk/packages/vizservers/nanovis/nanovis.h

    r2831 r2834  
    108108
    109109    static VolumeRenderer *vol_renderer;
    110     static PointSetRenderer *pointset_renderer;
    111110#ifndef NEW_FLOW_ENGINE
    112111    static NvParticleRenderer *flowVisRenderer;
     
    117116    static NvLIC *licRenderer;
    118117    static PlaneRenderer *plane_renderer;
     118#if PLANE_CMD
     119    static Texture2D *plane[]; //< Pointers to 2D planes
     120#endif
     121#ifdef USE_POINTSET_RENDERER
     122    static PointSetRenderer *pointset_renderer;
    119123    static std::vector<PointSet *> pointSet;
    120 
    121     /**
    122      *  pointers to 2D planes
    123      */
    124     static Texture2D *plane[];
     124#endif
     125
     126    static Texture2D *legendTexture;
    125127    static NvColorTableRenderer *color_table_renderer;
     128
    126129    static graphics::RenderContext *renderContext;
    127130    static std::vector<HeightMap *> heightMap;
Note: See TracChangeset for help on using the changeset viewer.