用openGL glDrawPixels绘制部分图像

时间:2015-11-05 14:02:21

标签: opengl

我有一个在openGL上下文中绘制图像的功能。 (在这种情况下用于渲染到纹理)适用于整个图像,但也应该只能渲染矩形部分。如果零件具有与图像相同的宽度,则渲染零件可以工作。对于宽度小于图像数据的部件,它会失败。

这是函数(仅限于小宽度,无清理等部分)

void drawImage(uint32 imageWidth, uint32 imageHeight, uint8* pData, 
               uint32 offX, uint32 partWidth)  // (offX+partWidth<=imageWidth)
{
    uint8* p(pData);
    if (partWidth != imageWidth)
    {
        glPixelStorei(GL_PACK_ROW_LENGTH, imageWidth);
        p = calcFrom(offX, pData); // point at pixel in row
    } 
    glDrawPixels(partWidth, ImageHeight, GL_BGRA, GL_UNSIGNED_BYTE, p);
}

如上所述:if (widthPart==imageWidth)渲染效果很好。对于partWidthimageWidth的某些组合,它也有效,但这似乎是一个非常特殊的情况,主要是宽度非常小的图像和一些特殊的partWidths

我没有找到这方面的例子,但从文档中我认为这可能会以某种方式做到这一点。我是否错过了解整件事,或者我只是监督了一个小坑?

谢谢, Moritz的

P.S:它正在Windows上运行 [编辑:] P.P.S:到现在为止,我已尝试将其作为纹理。如果我用glDrawPixels替换glTexImage2D我有同样的问题...(可以上传整个图像并仅渲染部分,但对于可能不是最佳方式的小图片的小部分... 。)

1 个答案:

答案 0 :(得分:0)

AAArrrghh !!

GL_ 联合国 PACK_ROW_LENGTH不是GL_PACK_ROW_LENGTH !!!!