Возникли проблемы при использовании glDrawPixels
Я должен использовать glDrawPixels для реализации растрового алгоритма.
Прямо сейчас я только пытаюсь получить простой пример работы glDrawPixels, но у меня есть проблема.
GLint height, width, size = 0;
GLbyte *image = NULL;
int i,j=0;
width = 512;
height = 512;
size = width*height;
image = (GLbyte*)malloc(sizeof(GLbyte)*size*3);
for(i = 0; i < size*3; i=i+width*3){
for(j = i; j < width*3; j=j+3){
image[j] = 0xFF;
image[j+1] = 0x00;
image[j+2] = 0x00;
}
}
glDrawPixels(width, height, GL_RGB, GL_BYTE, image);
free(image);
gluSwapBuffers();
Выше приведен код, который я пытаюсь заставить работать, насколько я понимаю, он должен просто нарисовать красный квадрат 512x512.
Однако то, что я получаю, это один красный ряд внизу, а все остальное серое.
2 ответа
Решение
Ваш второй for()
цикл разорван - вы начинаете с i
, но только подойдя к width * 3
поэтому он вообще не запускается, когда i > 0
,
Вот более простой подход:
GLbyte *p = image;
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
*p++ = 0xFF;
*p++ = 0x00;
*p++ = 0x00;
}
}
Ваши условия петли смотрят на меня. (После первой строки условие для j всегда будет истинным, и внутренний цикл не будет выполняться.) Более простой способ сделать это - сделать что-то вроде этого:
for (y = 0; y < height; y++)
{
// Go to the start of the next row
GLbyte* rowStart = image + (width * 3) * y;
GLbyte* row = rowStart;
for (x = 0; x < width; x++)
{
row [ x * 3 ] = 0xFF;
row [ (x * 3) + 1 ] = 0x00;
row [ (x * 3) + 2 ] = 0x00;
}
}