C++ glTexImage2D 不适用于 int 数组

问题描述 投票:0回答:0

我一直在尝试使用 glTexImage2D 绘制一个位图 int 数组,但它只输出白色的虚无。如果我将 int 数组初始化为 char 数组,它会从内存中输出混乱的像素,但如果我尝试将 int 数组转换为 char 数组,它只会呈现白色。

我什至尝试使用 memcpy 将整数复制到一个 4 倍大的名为 PixelsTemp 的数组,但由于某种原因它仍然是白色的。如果我手动更改 PixelsTemp[211] 中的某些值,它将显示单个蓝色像素,但 memcpy 中没有显示任何内容。这没有任何意义,因为 PixelsTemp 实际上与 glDrawPixels 一起工作得很好,但它与 glTexImage2D 一起只是白色。请帮助。

void beginRefresh() {
            //BITMAPINFO bmi = tbmi;
            //while (true) {                                                      //v these may be important later
            //StretchDIBits(bp, 0, 0, realwidth, realheight, 0, 0, width, height, Pixels, &bmi, DIB_RGB_COLORS, SRCCOPY);

            /*glDrawPixels(width,
                height,
                GL_RGBA,
                GL_UNSIGNED_BYTE,
                Pixels);*/
            unsigned char* PixelsTemp = new unsigned char[width * height * 4];
            memcpy(PixelsTemp, Pixels, width * height * 4);

            glEnable(GL_TEXTURE_2D);
            glGenTextures(1, &glBuffer);
            glBindTexture(GL_TEXTURE_2D, glBuffer);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
            glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
            //unsigned char* PixelsTemp = (unsigned char*)Pixels;
            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, PixelsTemp);
            UpdateViewport();
            glClear(GL_COLOR_BUFFER_BIT); // Thanks Benedani!
            glViewport(nViewX, nViewY, nViewW, nViewH);
            glBegin(GL_QUADS);
            glTexCoord2f(0.0, 1.0); glVertex3f(-1.0f + (fSubPixelOffsetX), -1.0f + (fSubPixelOffsetY), 0.0f);
            glTexCoord2f(0.0, 0.0); glVertex3f(-1.0f + (fSubPixelOffsetX), 1.0f + (fSubPixelOffsetY), 0.0f);
            glTexCoord2f(1.0, 0.0); glVertex3f(1.0f + (fSubPixelOffsetX), 1.0f + (fSubPixelOffsetY), 0.0f);
            glTexCoord2f(1.0, 1.0); glVertex3f(1.0f + (fSubPixelOffsetX), -1.0f + (fSubPixelOffsetY), 0.0f);
            glEnd();
            //glDrawPixels(width, height, GL_RGBA, GL_UNSIGNED_BYTE, PixelsTemp);
            delete[] PixelsTemp;

            SwapBuffers(glDeviceContext);
        }
c++ winapi opengl
© www.soinside.com 2019 - 2024. All rights reserved.