Passing Dynamic Arrays to glDrawPixels

Started by
2 comments, last by Orikal 19 years, 11 months ago
This works fine (static array):

GLubyte screenImage[screenImageHeight][screenImageWidth][3];

// array is filled with zeros


glDrawPixels(screenImageWidth, screenImageHeight, GL_RGB,GL_UNSIGNED_BYTE, screenImage);
 
This freezes my system (no errors, just freeze):

GLubyte ***screenImage;

// array is initialized dynamically; 

// because this code is taken out of context, I am omittting

// the initializtion for the sake of clarity;

// I am very confident in the correctness of the initialization;


// array is filled with zeros


glDrawPixels(screenImageWidth, screenImageHeight, GL_RGB,GL_UNSIGNED_BYTE, screenImage);
  
In the call to glDrawPixels using the dynamic array, I have tried dereferencing (***screenImage) and casting (const GLvoid*). Neither fixed the problem. Go [edited by - orikal on May 25, 2004 11:51:24 AM]
Advertisement
use:
GLubyte * screenImage = new [screenImageHeight*screenImageWidth*3];

passing in GLubyte *** doesnt make much sence. The function wants a "pointer to the pixel data" not a pointer to a bunch of pointers that point to a bunch of pointers to GLubytes :D

also

GLubyte screenImage[screenImageHeight][screenImageWidth][3] is not the same as GLubyte ***screenImage (the first one statically creates one big block of memory)
Okay, I suspected I would have to use a single dimension dynamic array. Could you clarify the accesses for me?

Right now I'm using:

y = screenImageHeight;x = screenImageWidth;GLubyte* screenImage = new GLubyte[x*y*3];screenImage[sImgCY + sImgCX*y + y*x*1] = (GLubyte)intens;    

where the equivalent 3D array access would be
screenImage[sImgCY][sImgCX][1]     

At least that's what it was when I was using a static array. The truth is I have no idea how the dynamic array is stored. For all I know, it could be organized like [sImgCX][1][sImgCY].


[edited by - orikal on May 25, 2004 1:16:39 PM]
unsigned int index = 0; //pixelindexGLubyte* pixel = screenImage[ (x + y*sImgCX) * index*3 ];pixel++ = r;pixel++ = g;pixel++ = b;


I'm not sure about the ++increments, but you get the point. I hope.

--
You're Welcome,
Rick Wong
- Google | Google for GameDev.net | GameDev.net's DirectX FAQ. (not as cool as the Graphics and Theory FAQ)

[edited by - Pipo DeClown on May 26, 2004 12:57:07 PM]

This topic is closed to new replies.

Advertisement