source: trunk/packages/vizservers/nanovis/NvZincBlendeVolumeShader.cpp @ 2953

Last change on this file since 2953 was 2953, checked in by ldelgass, 12 years ago

Remove unused global origin, make default transfer function a bit more
sensible (used to have full opacity at 0). Fix HeightMap? dtor to use delete[]
instead of free() on array allocated with new[]. Document data response in
protocol.

  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
1/* -*- mode: c++; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
3#include <GL/glew.h>
4#include <Cg/cgGL.h>
5
6#include "NvZincBlendeVolumeShader.h"
7
8NvZincBlendeVolumeShader::NvZincBlendeVolumeShader()
9{
10    init();
11}
12
13NvZincBlendeVolumeShader::~NvZincBlendeVolumeShader()
14{
15}
16
17void NvZincBlendeVolumeShader::init()
18{
19    loadFragmentProgram("zincblende_volume.cg", "main");
20    _tfParam = getNamedParameterFromFP("tf");
21    _volumeAParam = getNamedParameterFromFP("volumeA");
22    _volumeBParam = getNamedParameterFromFP("volumeB");
23    _cellSizeParam = getNamedParameterFromFP("cellSize");
24    _mviParam = getNamedParameterFromFP("modelViewInv");
25    _renderParam = getNamedParameterFromFP("renderParameters");
26    _optionOneVolumeParam = getNamedParameterFromFP("options");
27}
28
29void NvZincBlendeVolumeShader::bind(unsigned int tfID, Volume *volume, int sliceMode)
30{
31    ZincBlendeVolume *vol = (ZincBlendeVolume *)volume;
32    cgGLSetStateMatrixParameter(_mviParam, CG_GL_MODELVIEW_MATRIX,
33                                CG_GL_MATRIX_INVERSE);
34    cgGLSetTextureParameter(_tfParam, tfID);
35    cgGLSetParameter4f(_cellSizeParam,
36                       vol->cellSize.x,
37                       vol->cellSize.y,
38                       vol->cellSize.z, 0.);
39
40    if (!sliceMode) {
41        cgGLSetParameter4f(_renderParam,
42                           vol->numSlices(),
43                           vol->opacityScale(),
44                           vol->diffuse(),
45                           vol->specular());
46    } else {
47        cgGLSetParameter4f(_renderParam,
48                           0.,
49                           vol->opacityScale(),
50                           vol->diffuse(),
51                           vol->specular());
52    }
53
54    cgGLSetParameter4f(_optionOneVolumeParam,
55                       0.0f,
56                       volume->isosurface(),
57                       0.0f,
58                       0.0f);
59
60    cgGLSetTextureParameter(_volumeAParam, vol->zincblendeTex[0]->id());
61    cgGLSetTextureParameter(_volumeBParam, vol->zincblendeTex[1]->id());
62    cgGLEnableTextureParameter(_volumeAParam);
63    cgGLEnableTextureParameter(_volumeBParam);
64
65    NvShader::bind();
66}
67
68void NvZincBlendeVolumeShader::unbind()
69{
70    cgGLDisableTextureParameter(_volumeAParam);
71    cgGLDisableTextureParameter(_volumeBParam);
72    cgGLDisableTextureParameter(_tfParam);
73
74    NvShader::unbind();
75}
Note: See TracBrowser for help on using the repository browser.