Возникли проблемы при использовании glDrawPixels - PullRequest
0 голосов
/ 19 февраля 2012

Мне нужно использовать 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 ]

1 голос
/ 19 февраля 2012

Ваши условия петли смотрят мне в глаза. (После первой строки условие для 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;
    } 
}
1 голос
/ 19 февраля 2012

Ваш второй 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;
    }
}
...