簡體   English   中英

關於glPixelStorei()對齊的問題

[英]Questions about glPixelStorei() alignment

此數組中的每2個值代表16個像素。 (每個元素8個二進制值)

GLubyte character[24] = {
    0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
    0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00,
    0xff, 0xc0, 0xff, 0xc0
};

這是渲染我的位圖的代碼。

void init(){
    glPixelStorei(GL_UNPACK_ALIGNMENT, 2);
}

void render(){
    glBitmap(8, 12, 0.0, 11.0, 0.0, 0.0, character);
}

但是當我將glBitmap(8等)更改為glBitmap(10等)時,它不起作用。

要使其正常工作,我需要進行更改,

glPixelStorei(GL_UNPACK_ALIGNMENT, 2);

glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

我的問題是,我不知道為什么會這樣...

我只知道

GL_UNPACK_ALIGNMENT, 1

告訴OpenGL不對齊就直接轉到下一個地址。

我看不到將ALGINMENT設置為1與位圖的長度之間有任何關系。

有人可以解釋發生了什么嗎?

返回一些歷史規范文檔( glBitmap()是一個非常過時的調用)后,位圖的對齊規則為(OpenGL 2.1規范的第136頁):

k = a * ceiling(w / (8 * a))

哪里:

  • w是未設置GL_UNPACK_ROW_LENGTH的寬度。
  • aGL_UNPACK_ALIGNMENT的值。
  • k是每行使用的字節數。 請注意,無論如何設置參數,每一行總是至少從一個字節邊界開始。

替換您的示例中的值,對於w = 8 ,我們得到:

  • 每行1個字節, GL_UNPACK_ALIGNMENT為1。
  • 每行2個字節, GL_UNPACK_ALIGNMENT為2。

對於w = 10 ,我們得到:

  • 每行2個字節, GL_UNPACK_ALIGNMENT為1。
  • 每行2個字節, GL_UNPACK_ALIGNMENT為2。

基於此,除非還設置了其他GL_UNPACK_*參數,否則無論GL_UNPACK_ALIGNMENT是1還是2,都應獲得寬度10的相同輸出。如果不是這種情況,則這看起來像是OpenGL實現中的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM