[英]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
的寬度。 a
是GL_UNPACK_ALIGNMENT
的值。 k
是每行使用的字節數。 請注意,無論如何設置參數,每一行總是至少從一個字節邊界開始。 替換您的示例中的值,對於w = 8
,我們得到:
GL_UNPACK_ALIGNMENT
為1。 GL_UNPACK_ALIGNMENT
為2。 對於w = 10
,我們得到:
GL_UNPACK_ALIGNMENT
為1。 GL_UNPACK_ALIGNMENT
為2。 基於此,除非還設置了其他GL_UNPACK_*
參數,否則無論GL_UNPACK_ALIGNMENT
是1還是2,都應獲得寬度10的相同輸出。如果不是這種情況,則這看起來像是OpenGL實現中的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.