VPBuffers



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 25/08/2007 at 13:46, xxxxxxxx wrote:

    Thanks Robert :)

    Can't you help me on this?

    Cheers
    Renato



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 25/08/2007 at 14:36, xxxxxxxx wrote:

    I don't know anything about VPBuffers.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/08/2007 at 03:17, xxxxxxxx wrote:

    Here's how to browse through a multipass bitmap. For lights there is an inner loop that retrieves the data.

    The main bitmap should be checked with bmp->IsMultipassBitmap() first and then casted into a (MultipassBitmap* )

      
         LONG j,i,id;  
         LONG cnt = b3d->GetLayerCount();  
      
         for (i=0; i<cnt; i++)  
         {  
              MultipassBitmap *sublayer,*layer = b3d->GetLayerNum(i);  
              if (!layer) continue;  
      
              LONG subcnt = layer->GetLayerCount();  
      
              for (j=0;j<subcnt || subcnt==-1;j++)  
              {  
                   if (subcnt>0)  
                        sublayer   = layer->GetLayerNum(j);  
                   else   
                        sublayer = layer;  
      
                   if (!sublayer) continue;  
      
                   id = sublayer->GetParameter(MPB_USERID).GetLong();  
              }  
         }  
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/08/2007 at 10:47, xxxxxxxx wrote:

    Thanks Philip,

    but what do you mean about main bitmap?

    do i need to get it from Multipass::VPBitmap[0]?

    Cheers
    Renato



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 28/08/2007 at 12:26, xxxxxxxx wrote:

    You can retrieve the main bitmap by calling

      
    MultipassBitmap *mpb = (MultipassBitmap* )renderinstance->GetBuffer(NOTOK,0);  
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 29/08/2007 at 08:49, xxxxxxxx wrote:

    Hello Philip,

    where:
    LONG subcnt = layer->GetLayerCount();

    subcnt always is -1 so the internal cycle go in loop forewer.

    What's mean that GetLayerCount() return -1 ?

    cheers
    Renato



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 29/08/2007 at 11:08, xxxxxxxx wrote:

    But Philip did this in his loop:

    for (j=0;j<subcnt || subcnt==-1;j++)
    

    Probably explicitly to avoid the infinite loop. No idea about what -1 represents here though.



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 29/08/2007 at 11:35, xxxxxxxx wrote:

    Hello dear Robert,

    but when the subcnt == -1.. it loop

    :)
    renato



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 29/08/2007 at 12:29, xxxxxxxx wrote:

    Are you sure of your types (LONG)? In actuality, all that is needed is:

    for (j = 0; j < subcnt; ++j)
    

    Since -1L is less than 0L, the loop should exit immediately. But if ULONG is used, -1L is of course 4 billion.

    All else failing, just check for -1 on subcnt and avoid the loop altogether:

    LONG subcnt = layer->GetLayerCount();  
    if (subcnt < 0)     continue;  
    for (j=0; j!=subcnt; ++j)  
    ...
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 30/08/2007 at 01:54, xxxxxxxx wrote:

    My excuses... one line of source code was missing!

      
         LONG j,i,id;  
         LONG cnt = b3d->GetLayerCount();  
      
         for (i=0; i<cnt; i++)  
         {  
              MultipassBitmap *sublayer,*layer = b3d->GetLayerNum(i);  
              if (!layer) continue;  
      
              LONG subcnt = layer->GetLayerCount();  
      
              for (j=0;j<subcnt || subcnt==-1;j++)  
              {  
                   if (subcnt>0)  
                        sublayer   = layer->GetLayerNum(j);  
                   else  
                        sublayer = layer;  
      
                   if (!sublayer) continue;  
      
                   id = sublayer->GetParameter(MPB_USERID).GetLong();  
                   if (subcnt==-1) break;       
              }  
         }  
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 30/08/2007 at 11:10, xxxxxxxx wrote:

    Hello Philip,

    ok now :) but the objectID are the only buffers not detected with this way :(

    any suggestions?

    Cheers
    Renato



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 30/08/2007 at 14:25, xxxxxxxx wrote:

    To retrieve the alpha channels use:

      
    cnt = b3d->GetAlphaLayerCount();  
    for (i=0; i<cnt; i++)  
    {  
         B3dBitmap *layer = b3d->GetAlphaLayerNum(i);  
         if (!layer) continue;  
      
         id = sublayer->GetParameter(MPB_USERID).GetLong();  
         if (!id) continue;  
      
         ...  
    }  
    


  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 30/08/2007 at 14:26, xxxxxxxx wrote:

    Ah.. thanks.. i forgot that ObjectID are in fact alpha channels :)

    Thanks a lot
    Renato


Log in to reply