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

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

No need to inline bind/unbind

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