[英]How to load texture into openGl using png++?
這一行會將紋理讀入內存並將其存儲在圖像中:
png::image<png::rgba_pixel> image("texture.png");
此行然后應將其加載到 openGL 內存中:
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.get_width(), image.get_height(), 0, GL_ABGR, GL_UNSIGNED_BYTE, image.get_pixbuf());
然而,最后一個參數應該是const void*
,但image.get_pixbuf()
返回pixbuf
。 如何將圖像中的像素數據獲取到 openGL 中?
忽略我錯誤指定的任何其他參數,稍后我會修復它,這是一個根本不起作用的參數。
OpenGL 無法提前知道任何人可能想要傳入的類型(因為它幾乎可以與任何庫一起使用),因此它需要一個指向原始緩沖區的通用const void*
指針,並依靠您來准確地描述它提供的元數據。
在png++ 庫的情況下,您需要在抽象中挖掘幾層,因為它為您包裝圖像、行和像素。
由於您有一個png::image
實例, get_pixbuf()
將返回一個png::pixbuf
實例,您可以從中獲取對第一行的引用get_row(0)
,它返回一個png::row_traits
專業化像素類型。 這使您可以訪問緩沖區的第一行,此時您最終可以使用get_data()方法請求原始緩沖區指針。 (這是第一行的第一個字節,因此指向連續緩沖區的開始。)
所以這樣的事情應該可以解決問題:
const void* buffer = image.get_pixbuf().get_row(0).get_data();
glTexImage2D(GL_TEXTURE_2D,
0,
GL_RGBA,
image.get_width(),
image.get_height(),
0,
GL_ABGR,
GL_UNSIGNED_BYTE,
buffer);
假設您的圖像數據是 8 位 RGBA,沒有行填充。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.