Skip to main content
gamedev.net
🔒 Locked

Dyn. 2 dim float array not same as float[4][4]??

Started by HellRiZZer Nov 18, 2001 at 8:02 PM 1 replies 350+ views
Original Post
HellRiZZer
HellRiZZer
I was recently trying to make a 2 dim array for use with glMap2f(OpenGL) and making all its values same as the array float[4][4][3]. E.g I made typedef float glVertex3fv[3]; Then, I do: glVertex3fv **Grid; Then I allocate 2 dim array as 4x4 Grid = new glVertex3fv*[4]; for (int i=0;i<4;i++) Grid = new glVertex3fv[4]; And here I just assign all values of float[4][4][3] to Grid[x][y][0,1,2]. When I go to glMap2f and pass it not as &float[0][0](starting array value), but as (float *)&Grid[0][0], it draws some buggy things, not the patch I had with float[4][4][3].. Why? Someone help please? Thanks.
Fruny
Fruny
Ok... no, an array of arrays is not structurally equivalent to a 2D array (sorry if I pointed you in the wrong direction earlier).

float[4][4][3] is the same thing than float[48].

As others had said before, you will have to allocate it in one chunk and compute the indices yourself.
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." — Brian W. Kernighan
Fruny
Fruny
Oh, and by the way, glVertex3fv is a function name.
You are calling for trouble to define it as a type.

try that way

  
#include <vector>

typedef struct
{
float r, g, b;
} pixel_t;

typedef std::vector<pixel_t> grid_t;

.
.
.

grid_t Grid( rows * columns );

for( y = 0; y < rows; ++y ) // y outside to preserve locality of access

for( x = 0; x < columns; ++x )
{
Grid[x + columns * y].r = ...
Grid[x + columns * y].g = ...
Grid[x + columns * y].b = ...
}

"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it." — Brian W. Kernighan

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.