我有一個函數在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)
渲染工作正常。對於partWidth
和imageWidth
的一些組合,它也可以工作,但這似乎是一個非常特殊的情況,主要是寬度非常小的圖像和一些特殊的partWidths
。
我沒有發現這方面的例子,但從文檔我認爲這可以做到這樣做。我是否誤解了整件事,或者我是否只是監督了一個小坑?
感謝, 莫里茨
P.S:它在Windows
運行[編輯:] P.P.S:現在我試圖做到這一點的質感。如果我將glDrawPixels
替換爲glTexImage2D
我有同樣的問題...(可以上傳整個圖像並僅渲染部分圖像,但對於可能不是最佳方式的大圖片的小小部分...)
'glDrawPixels'是一箇舊的界面,我懷疑它應該被使用。將圖像上傳到紋理,並使用UV座標來繪製所需紋理的一部分。 –