2015-11-05 69 views
0

我有一個函數在openGL上下文中繪製圖像。 (在這種情況下用於渲染紋理)適用於整個圖像,但也應該只能渲染矩形部分。如果零件與圖像具有相同的寬度,則渲染零件將起作用。對於寬度不及圖像數據的部分,它會失敗。用openGL繪製圖像的一部分glDrawPixels

下面是函數(降低到僅部分爲小的寬度,沒有清理等)

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

我沒有發現這方面的例子,但從文檔我認爲這可以做到這樣做。我是否誤解了整件事,或者我是否只是監督了一個小坑?

感謝, 莫里茨

P.S:它在Windows
運行[編輯:] P.P.S:現在我試圖做到這一點的質感。如果我將glDrawPixels替換爲glTexImage2D我有同樣的問題...(可以上傳整個圖像並僅渲染部分圖像,但對於可能不是最佳方式的大圖片的小小部分...)

+0

'glDrawPixels'是一箇舊的界面,我懷疑它應該被使用。將圖像上傳到紋理,並使用UV座標來繪製所需紋理的一部分。 –

回答

0

AAArrrghh! !

GL_ UN PACK_ROW_LENGTH not GL_PACK_ROW_LENGTH !!!!