Альтернативные способы рисования пикселей или линий на экране

Я определяю свое окно SDL2 следующим образом:

SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);        // red: 8 bits
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);      // green: 8 bits
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);       // blue: 8 bits
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);      // alpha: 8 bits
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);    // r + g + b + a = 32 bits
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
graphWindow = SDL_CreateWindow(title, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);

Затем с помощью следующей структуры я создаю массив пикселей и использую этот массив в качестве буфера, который передается в SDL:

typedef struct {
    float r;
    float g;
    float b;
    float a;
} Pixel;

// ...

void main(void) {
    Pixel *pixels;
    // ...
    pixels = malloc(width * height * sizeof(Pixel));
    // ...

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    while (graphNotClosed) {
        glDrawPixels(width, height, GL_RGBA, GL_FLOAT, pixels);
        // do some number cruching and change some elements of array "pixels"
        // ...
        SDL_GL_SwapWindow(graphWindow);
    }
}

Меня беспокоит то, что хотя код иногда изменяет один и только один пиксель в цикле while, я все равно продолжаю передавать весь массив (с width * height) в SDL (через glDrawPixels) на каждой итерации.

И мой вопрос: это обязательный (и единственный способ) передать весь массив в SDL или можно сообщить SDL только пиксели, которые были изменены по сравнению с предыдущим состоянием, во имя ускорения графики обработать.


person ssd    schedule 31.05.2016    source источник
comment
Если вам нужен только пиксельный рисунок, зачем возиться с OpenGL, который лучше всего подходит для 3D-рисования? Есть много хороших 2D-библиотек, которые могут вам помочь, даже те, которые используют SDL для нижних слоев (чего не делает OpenGL).   -  person Some programmer dude    schedule 31.05.2016
comment
@JoachimPileborg: К сожалению, мой поиск в Google графики C в основном дал результаты OpenGL. Вот почему я использовал OpenGL. Я буду рад услышать альтернативные предложения по 2D рисованию в C (только линии, пиксели и т. д.)?   -  person ssd    schedule 31.05.2016
comment
Возможный дубликат Как отображать/отрисовывать объект буфера в буфер кадра без glDrawPixels   -  person LPs    schedule 31.05.2016