SDL_GL_SetAttribute не устанавливает размеры цвета - PullRequest
1 голос
/ 01 февраля 2012

Я пытаюсь изменить размер компонентов цвета буфера накопления в * SDL_opengl *, но команда SetAttribute, похоже, ничего не делает.Вот код, который я использую.
(Чтобы уменьшить размер кода, я имею здесь дело только с компонентом RED, но в реальном коде я передаю все 4 компонента и в цвет, и в буфер накопления, и в эффектто же самое)

#include <iostream>
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>

int main(int argc, char *argv[])
{
    //Initialize all SDL subsystems
    if( SDL_Init( SDL_INIT_EVERYTHING ) < 0 )std::cout << "SDL ERROR!";

    // Try to Set the BitSize, while checking for errors
    int BitSize = 1; //This number never makes a difference!!
    int ErrorCode = 0;
    ErrorCode += SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 ) // This one WORKS
        + SDL_GL_SetAttribute( SDL_GL_ACCUM_RED_SIZE, BitSize ) // These ones DON'T
        + SDL_GL_SetAttribute( SDL_GL_RED_SIZE, BitSize )
        ;

    if( ErrorCode < 0 )std::cout << "SDL ERROR!";

    // Create the Window
    int w = 1000, h = 700;  
    int bpp = 32;

    SDL_Surface* Screen = SDL_SetVideoMode( w, h, bpp, SDL_OPENGL | 
    SDL_NOFRAME |
    SDL_DOUBLEBUF );

    if( !Screen )std::cout << "SDL ERROR!";


    // Check if BitSize's are correct (they are not)
    // I'm using glGetInteger, but SDL_GL_GetAttribute yields the same output.
    glGetIntegerv( GL_ACCUM_RED_BITS, &BitSize );
    std::cout << "AccumBuffer color component size in bits is " << BitSize << "\n";

    glGetIntegerv( GL_RED_BITS, &BitSize );
    std::cout << "ColorBuffer color component size in bits is " << BitSize << "\n";

    ErrorCode = SDL_GL_GetAttribute( SDL_GL_BUFFER_SIZE, &BitSize );
    std::cout << "FrameBuffer BitSize is " << BitSize << "\n";

    if( ErrorCode < 0 )std::cout << "SDL ERROR!";
    if( glGetError() != GL_NO_ERROR )std::cout << "GL ERROR";

    return 0;
}

Это прекрасно компилируется и всегда выводит следующий вывод:

AccumBuffer color component size in bits is 16
ColorBuffer color component size in bits is 8
FrameBuffer Bit Size is 32

независимо от того, что я установил переменную BitSize.Это как SDL_GL_SetAttribute( SDL_GL_*_SIZE, int ) не имеет никакого эффекта.Я понимаю, что компоненты Color Buffer могут быть ограничены 8 битами, потому что я инициализирую окно 32 битами на дюйм.Но разве я не смогу редактировать цветовое разрешение буфера накопления?

Ответы [ 2 ]

3 голосов
/ 01 февраля 2012

Значения атрибутов, которые вы устанавливаете, являются только запросами того, что вы ожидаете как минимум, но вполне допустимо дать вам нечто большее.

Кстати: буфер накопления, вероятно, не ускоряется до тех пор, пока у вас нет профессионального графического процессора (FireGL, Quadro). Вместо этого используйте объект Framebuffer.

2 голосов
/ 01 февраля 2012

Глубина в битах накопительного буфера также ограничена тем, что поддерживает графический процессор, и в вашем случае, похоже, ваш графический процессор поддерживает только 16-разрядный буфер на компонентный накопитель.

...