如何将大图像分割成多个纹理

时间:2017-08-31 13:04:57

标签: c++ opengl opengl-es

假设我有一个大图像,其大小为2560 * 800,格式为RGBA。 我想把这个大图像分成两个尺寸为1280 * 800的纹理。

简单而又愚蠢的方式是m

#define BPP_RGBA    4
int* makeNTexturesFromBigRgbImage(uint8_t *srcImg,
                               Size srcSize,
                               uint32_t numTextures,
                               uint32_t texWidth,
                               uint32_t texHeigh) {
    int i, h, srcStride;
    uint8_t *pSrcPos, *pDstPos;

    int [] texIds = new int[numTextures];
    srcStride = srcSize.w*BPP_RGBA;

    glGenTextures(numTextures, texIds);

    for (i=0; i<numTexures; i++) {
        uint8_t *subImageBuf = alloc(texWidth*texHeight*BPP_RGBA);
        pSrcPos = srcImg+(texWidth*BPP_RGBA)*i
        pDstPos = subImageBuf;
        for (h=0; h<texHeight; h++) {
            memcpy(pDstPos, pSrcPos, texWidth*BPP_RGBA)
            pSrcPos += srcStride;
            pDstPos += (texWidth*BPP_RGBA);
        }
        glBindTexture(GL_TEXTURE_2D, texIds[i]);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, subImageBuf);
        free(subImageBuf);
    }
}

但是,正如我上面提到的,这种方法非常愚蠢。

所以,我想知道不像上面那样在CPU上复制操作的最佳方法。 是否可以只使用openGL API。

例如,有可能吗?

Step 1. Make a texture, 2560*800, with an big image.
Step 2. Make 2 textures, 1280*800, from the texture in 1.

感谢。

0 个答案:

没有答案