Ejemplo n.º 1
0
bool
OpenSubdivPtexShader::bindPtexTexture(const MString& ptexFilename,
                                      OpenSubdiv::OsdGLPtexTexture **osdPtexPtr,
                                      int samplerUnit)
{
    // Reload ptex texture
    if (*osdPtexPtr) delete *osdPtexPtr;
    *osdPtexPtr = loadPtex(ptexFilename);
    if (*osdPtexPtr == NULL)
        return false;

    // Rebind
    glActiveTexture(GL_TEXTURE0 + samplerUnit + 0);
    glBindTexture(GL_TEXTURE_2D_ARRAY, (*osdPtexPtr)->GetTexelsTexture());

    glActiveTexture(GL_TEXTURE0 + samplerUnit + 1);
    glBindTexture(GL_TEXTURE_BUFFER, (*osdPtexPtr)->GetLayoutTextureBuffer());

    glActiveTexture(GL_TEXTURE0 + samplerUnit + 2);
    glBindTexture(GL_TEXTURE_BUFFER, (*osdPtexPtr)->GetPagesTextureBuffer());

    // Reset
    glActiveTexture(GL_TEXTURE0);

    return true;
}
Ejemplo n.º 2
0
//=================================================== draw widget
//===============================================================
void TFWidgetRen::draw_widget()
{

  glColor4f(.1, .07, .57, 1);                  //balls
  float spos[3] = {0,0,0};
  drawSphere(spos, blball);                    //bottom left
  spos[0] = width;
  drawSphere(spos, brball);                    //bottom right
  spos[1] = height;
  drawSphere(spos, trball);                    //top    right
  spos[0] = 0;
  drawSphere(spos, tlball);                    //top    left

  glColor4f(.09, .34, .55, 1);                 //bars
  float bpos[3] = {0,0,0};
  drawBar(-90, WdgXAxis, height, bpos, lbar);  //left
  drawBar(90, WdgYAxis, width, bpos, bbar);    //bottom
  bpos[1] = height;
  drawBar(90, WdgYAxis, width, bpos, tbar);    //top
  bpos[0] = width;
  bpos[1] = 0;
  drawBar(-90, WdgXAxis, height, bpos, rbar);  //right
  

  glColor4f(1,1,1,0);                          //transfer function map depth
  glLoadName(tfsheet1);
  //glEnable(GL_TEXTURE_3D_EXT);
  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glDisable(GL_LIGHTING);
  //glBindTexture(GL_TEXTURE_3D_EXT, gluvv.tf.ptextex);
  glBegin(GL_QUADS);{  //draw the transfer function
    glTexCoord3f(0, 0, .33333);   
    glVertex3f(barRad*1.5,    barRad*1.5,     0);
    glTexCoord3f(1, 0, .33333);   
    glVertex3f(width-barRad*1.5, barRad*1.5,     0);
    glTexCoord3f(1, 1, .33333);   
    glVertex3f(width-barRad*1.5, height-barRad*1.5, 0);
    glTexCoord3f(0, 1, .33333);   
    glVertex3f(barRad*1.5,    height-barRad*1.5,0);
  } glEnd();
  glDisable(GL_BLEND);
  glDisable(GL_TEXTURE_3D_EXT);
  glEnable(GL_LIGHTING);                       //---------------------------

  draw_probe();                                //draw probe data value

  //-------------- load new pixel texture ----------------------------------
  if(gluvv.tf.loadme){                         
    clearPtex();
    tris->rasterize(gluvv.tf.ptex);
    brush->rasterize(gluvv.tf.ptex);
    loadPtex();
    gluvv.tf.loadme = 0;
  } //----------------------------------------------------------------------

  if(pickedTri){                               //boundary emphasis slider
    LevWidget * tt;
    if(tt = tris->get(pickedTri)){
      float slider = tt->getBE();
      float bepos[3] = {(width - 2*ballRad)*slider + ballRad, height, 0};
      drawSlider(90, WdgYAxis, bepos, beslider);
    }
  }

  glColor4f(1,1,1,1);                          //transfer function map color
  glLoadName(tfsheet1);
  glEnable(GL_TEXTURE_3D_EXT);
  if(mode == colorBlend){
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  }
  else 
    glDisable(GL_BLEND);
  glEnable(GL_DEPTH_TEST);
  glDepthFunc(GL_EQUAL);
  glDisable(GL_LIGHTING);
  glBindTexture(GL_TEXTURE_3D_EXT, gluvv.tf.ptextex);
  glBegin(GL_QUADS);{  //draw the transfer function
    glTexCoord3f(0, 0, .5);   
    glVertex3f(barRad*1.5,    barRad*1.5,     0);
    glTexCoord3f(1, 0, .5);   
    glVertex3f(width-barRad*1.5, barRad*1.5,     0);
    glTexCoord3f(1, 1, .5);   
    glVertex3f(width-barRad*1.5, height-barRad*1.5, 0);
    glTexCoord3f(0, 1, .5);   
    glVertex3f(barRad*1.5,    height-barRad*1.5,0);
  } glEnd();
  glDepthFunc(GL_LESS);
  glDisable(GL_BLEND);
  glDisable(GL_TEXTURE_3D_EXT);
  glEnable(GL_LIGHTING);                       //----------------------------

  glPushMatrix();{                             //draw levoy triangles
    glTranslatef(ballRad, ballRad, ballRad);
    tris->draw();
  } glPopMatrix();

  if(gluvv.picking) brush->draw();
}