Ignore:
Timestamp:
Feb 13, 2008 7:38:58 PM (12 years ago)
Author:
vrinside
Message:

Adding Volume animation

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/vizservers/nanovis/Texture3D.cpp

    r418 r884  
    5252}
    5353
    54 GLuint Texture3D::initialize(float *data)
     54void Texture3D::update(float* data)
    5555{
    5656        //load texture with 16 bit half floating point precision if card is 6 series NV40
     
    5959        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    6060
    61         glGenTextures(1, &id);
    6261        glBindTexture(GL_TEXTURE_3D, id);
    6362        assert(id!=-1);
     
    115114       
    116115        gl_resource_allocated = true;
     116
     117}
     118
     119GLuint Texture3D::initialize(float *data)
     120{
     121        if (id != 0) glDeleteTextures(1, &id);
     122
     123        //load texture with 16 bit half floating point precision if card is 6 series NV40
     124        //half float with linear interpolation is only supported by 6 series and up cards
     125        //If NV40 not defined, data is quantized to 8-bit from 32-bit.
     126        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
     127
     128        glGenTextures(1, &id);
     129        glBindTexture(GL_TEXTURE_3D, id);
     130        assert(id!=-1);
     131
     132        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
     133        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
     134        glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
     135
     136        if(interp_type==GL_LINEAR){
     137                glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     138                glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
     139        }
     140        else{
     141                glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
     142                glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
     143        }
     144
     145        //to do: add handling to more formats
     146        if(type==GL_FLOAT){
     147          switch(n_components){
     148            #ifdef NV40
     149                case 1:
     150                        glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE16F_ARB, width, height, depth, 0, GL_LUMINANCE, GL_FLOAT, data);
     151                        break;
     152                case 2:
     153                        glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE_ALPHA16F_ARB, width, height, depth, 0, GL_LUMINANCE_ALPHA, GL_FLOAT, data);
     154                        break;
     155                case 3:
     156                        glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB16F_ARB, width, height, depth, 0, GL_RGB, GL_FLOAT, data);
     157                        break;
     158                case 4:
     159                        glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA16F_ARB, width, height, depth, 0, GL_RGBA, GL_FLOAT, data);
     160                        break;
     161            #else
     162                case 1:
     163                        glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE, width, height, depth, 0, GL_LUMINANCE, GL_FLOAT, data);
     164                        break;
     165                case 2:
     166                        glTexImage3D(GL_TEXTURE_3D, 0, GL_LUMINANCE_ALPHA, width, height, depth, 0, GL_LUMINANCE_ALPHA, GL_FLOAT, data);
     167                        break;
     168                case 3:
     169                        glTexImage3D(GL_TEXTURE_3D, 0, GL_RGB, width, height, depth, 0, GL_RGB, GL_FLOAT, data);
     170                        break;
     171                case 4:
     172                        glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, width, height, depth, 0, GL_RGBA, GL_FLOAT, data);
     173                        break;
     174            #endif
     175                default:
     176                        break;
     177          }
     178        }
     179
     180
     181        assert(glGetError()==0);
     182       
     183        gl_resource_allocated = true;
    117184        return id;
    118185}
Note: See TracChangeset for help on using the changeset viewer.