esultados @Odd usando glTexImage2D

Eu tenho tentado descobrir comoglTexImage2D funciona e está vendo alguns resultados estranhos de algum código bem claro. Meu código simplesmente desenha um círculo aproximado em uma matriz não assinada de 256 * 256 comprimentos e envia esses dados para se tornarem uma textura. A textura exibida, no entanto, está se transformando em variações de vermelho e laranja, independentemente das combinações selecionadas no meu loop de criação de imagens:

unsigned* data = new unsigned[256*256];
for (int y = 0; y < 256; ++y)
    for (int x = 0; x < 256; ++x)
        if ((x - 100)*(x - 100) + (y - 156)*(y - 156) < 75*75)
            data[256*y + x] = ((156 << 24) | (256 << 16) | (156 << 8) | (200 << 0));
        else
            data[256*y + x] = 0;  // I'd expect this to be transparent and the above to be slightly transparent and green, but it's red somehow.

glBindTexture(GL_TEXTURE_2D, texid);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, (GLvoid*)data);

pções do @OpenGL:

    glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
glClearDepth(1.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE);
//glEnable(GL_BLEND);
//glDisable(GL_CULL_FACE);

glGenTextures(1, &leaf[0]);
    createLeaf(leaf[0]);  // createLeaf(GLuint& texid) is posted entirely above

O restante do código não faz nada além de exibir a textura em um único quad em uma janela. (x64 win7)

Edit: Tentei exatamente a solução de Rickard e ainda estou recebendo um círculo rox

questionAnswers(2)

yourAnswerToTheQuestion