Two examples from "Trick of the Windows Game Programming Gurus"
I don''t understand the two examples on page 277.
The function is:
inline void Plot8(int x, int y, // position of pixel
UCHAR color, // color index of pixel
UCHAR *buffer, // pointer to surface memory
int mempitch) // memory pitch per line
{
//this function plots a single pixel
buffer[x+y*mempitch] = color;
} // end Plot8
For Plot8, the plotting is: buffer[x+y*mempitch] = color;
For Plot16, the plotting is:
buffer[x+y*(mempitch>>1)] = _RGB16BIT65(red, green blue);
Who do these plotting and the marco _RGB16BIT65 work?
The shifting and marco drive me crazy
This shifting is because in 16 bit mode, each pixel is 2 bytes rather than 1 in 8 bit mode. The buffer is the actual surface display, and looks something like this:
( 640x480 )
0 1 2 3 4 5 6 ........ 639
640 641 642 643 644 645 646 ........ 1279
1280 etc.
And this continues on for the length of the screen. So if you wanted to access pixel ( 5, 2 ) on your screen, you first multiply the y value by 640( which is the memory pitch of this screen ), and then add in x to get the right column. So the statement
buffer[ x + y*mempitch ] = color;
assigns that certain pixel the color that was sent. For 8 bit mode, the color can range from 0-255 because these are all the palette entries, but in 16 bit mode it requires a mix of colors. The macro _RGB16BIT65 receives 3 different values for each of the colors, and then combine them to create a certain color.
( 640x480 )
0 1 2 3 4 5 6 ........ 639
640 641 642 643 644 645 646 ........ 1279
1280 etc.
And this continues on for the length of the screen. So if you wanted to access pixel ( 5, 2 ) on your screen, you first multiply the y value by 640( which is the memory pitch of this screen ), and then add in x to get the right column. So the statement
buffer[ x + y*mempitch ] = color;
assigns that certain pixel the color that was sent. For 8 bit mode, the color can range from 0-255 because these are all the palette entries, but in 16 bit mode it requires a mix of colors. The macro _RGB16BIT65 receives 3 different values for each of the colors, and then combine them to create a certain color.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement