glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const ovid *pixels);
是否有像這樣的功能,除了訪問CPU內存,它訪問GPU內存? [要麼幀緩衝器對象的紋理]等同於在GPU內存上運行的glDrawpixels?
glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const ovid *pixels);
是否有像這樣的功能,除了訪問CPU內存,它訪問GPU內存? [要麼幀緩衝器對象的紋理]等同於在GPU內存上運行的glDrawpixels?
glDrawPixels可以從緩衝區對象讀取。只要做一個
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, XXX)
在調用glDrawPixels之前。
警告:glDrawPixels已被棄用...
@Bahbar什麼是未棄用的解決方案? – anon 2010-03-05 19:05:34
使用glBlitFramebuffer,其上對應的FrameBuffer對象進行操作(Link)。 Ans這不是已棄用。
你可以採取的格式轉換,縮放和多重採樣優勢。
讓我們來涵蓋這裏的所有基礎。
首先,直接回答:是的,有這樣的功能。它叫做glDrawPixels
。我不是在開玩笑。
glDrawPixels
當然可以從GPU內存中讀取,前提是you are using buffer objects as their source data(通常稱爲「像素緩衝區對象」)。 glDrawPixels
可以使用像素緩衝區對象作爲像素數據的來源。緩衝區對象(理論上至少)在GPU內存中,因此它們符合要求。
但是,您將此添加到「幀緩衝區對象的紋理」中。在這個限定條件下,你會問,「是否有方法將像素數據從一個紋理/幀緩衝區複製到當前幀緩衝區?」
是的。 glBlitFramebuffer
可以做到這一點。它從GL_READ_FRAMEBUFFER
到GL_DRAW_FRAMEBUFFER
。由於您可以將紋理圖像添加到FBO中,因此您可以從圖像中複製圖像。你甚至可以從默認的幀緩衝區複製到一些渲染緩衝區或紋理。
您也可以採用glCopyImageSubData
,它將像素矩形從一個圖像複製到另一個。如果您只是在複製像素數據,那麼它比glBlitFramebuffer
更方便。目前這是相當新的(GL 4.3,或ARB_copy_image)。它不能用於將數據複製到默認幀緩衝區。
設置紋理並繪製矩形? – falstro 2010-03-05 07:35:28