InitGLImage usage?

  • On 29/01/2013 at 06:05, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   13 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    Hi, anyone knows to use this function?
    I want to shown my shader as texture on objects. But gives black textures
    my test code:

    Bool Material::InitGLImage(BaseMaterial\* mat, BaseDocument\* doc, BaseThread\* th, BaseBitmap\* bmp, LONG doccolorspace, Bool linearworkflow)  

    LONG w = bmp->GetBw();

        LONG h = bmp->GetBh();
        unsigned long \*tmp = new unsigned long[w];
        for (int x=0; x<w; x++) tmp[x]=0xffffffff;
        for (int y=0; y<h; y++)
            Bool ok = bmp->SetPixelCnt(0, y, 4\*w,  (UCHAR \* )( tmp ),COLORBYTES_ARGB, COLORMODE_ARGB,PIXELCNT_0);
         delete [] tmp;
        return true;  

  • On 29/01/2013 at 08:06, xxxxxxxx wrote:

    Hi and welcome to the Plugin Cafe!

    Your code doesn't work because you don't allocate the expected number of pixel components and the cnt parameter of the call to BaseBitmap::SetPixelCnt() is wrong.
    You have to allocate 4 components for each pixel if you want COLORBYTES_ARGB. And the components have to be of UCHAR type, not unsigned long. The cnt parameter of BaseBitmap::SetPixelCnt() expects the number of pixels to set; it doesn't include the total count of allocated components.

    Also, please use the types and macros from CINEMA SDK whenever possible: LONG instead of int, gNew instead of new, gDelete instead of delete etc.
    This is for better portability and stability of the plugins.

    Here's the working code:

    Bool Material::InitGLImage(BaseMaterial* mat, BaseDocument* doc, BaseThread* th, BaseBitmap* bmp, LONG doccolorspace, Bool linearworkflow)
        LONG w = bmp->GetBw();
        LONG h = bmp->GetBh();
        UCHAR *line = gNew UCHAR[w*4];
        for (LONG x=0; x<w*4; x++)
            line[x] = 0xff;
        for (LONG y=0; y<h; y++)
            bmp->SetPixelCnt(0, y, w, line, COLORBYTES_ARGB, COLORMODE_ARGB, PIXELCNT_0);
        return TRUE;

  • On 29/01/2013 at 08:33, xxxxxxxx wrote:

    hey cool, worked
    thanks very much

Log in to reply