Ах! Это было действительно так! Я просто посмотрел прямо над этим. Спасибо!

ался выяснить, какglTexImage2D работает и увидеть некоторые странные результаты из довольно четкого кода. Мой код просто рисует грубый круг в массив без знака длиной 256 * 256, а затем отправляет эти данные в текстуру. Однако отображаемая текстура становится вариациями красного и оранжевого, независимо от того, какие комбинации я выбираю в цикле создания изображения:

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);

Опции 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

Остальная часть кода не делает ничего, кроме отображения текстуры на одном квадре в окне. (x64 win7)

Edit: я попробовал решение Рикарда точно, и я все еще получаю фиолетовый круг.

Ответы на вопрос(2)

Ваш ответ на вопрос