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

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

Assume baseline requirement of NV40 GPU, which translates to Cg profiles vp40
and fp40, which in turn require NV_vertex_program3 and NV_fragment_program2
assembly shader extensions. Add explicit check for these extensions.

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