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