2010-03-05 31 views
2
glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const ovid *pixels); 

是否有像這樣的功能,除了訪問CPU內存,它訪問GPU內存? [要麼幀緩衝器對象的紋理]等同於在GPU內存上運行的glDrawpixels?

+0

設置紋理並繪製矩形? – falstro 2010-03-05 07:35:28

回答

1

如果是在紋理:

  • 設置正投影錐臺
  • 禁止混合,深度測試,等等
  • 綁定紋理
  • 用正確的紋理座標繪製屏幕對齊紋理四邊形

我在例如Compositor::_drawPixels

0

glDrawPixels可以從緩衝區對象讀取。只要做一個

glBindBuffer(GL_PIXEL_UNPACK_BUFFER, XXX) 

在調用glDrawPixels之前。

警告:glDrawPixels已被棄用...

+0

@Bahbar什麼是未棄用的解決方案? – anon 2010-03-05 19:05:34

0

使用glBlitFramebuffer,其上對應的FrameBuffer對象進行操作(Link)。 Ans這不是已棄用

你可以採取的格式轉換縮放多重採樣優勢。

4

讓我們來涵蓋這裏的所有基礎。

首先,直接回答:是的,有這樣的功能。它叫做glDrawPixels。我不是在開玩笑。

glDrawPixels當然可以從GPU內存中讀取,前提是you are using buffer objects as their source data(通常稱爲「像素緩衝區對象」)。 glDrawPixels可以使用像素緩衝區對象作爲像素數據的來源。緩衝區對象(理論上至少)在GPU內存中,因此它們符合要求。

但是,您將此添加到「幀緩衝區對象的紋理」中。在這個限定條件下,你會問,「是否有方法將像素數據從一個紋理/幀緩衝區複製到當前幀緩衝區?」

是的。 glBlitFramebuffer可以做到這一點。它從GL_READ_FRAMEBUFFERGL_DRAW_FRAMEBUFFER。由於您可以將紋理圖像添加到FBO中,因此您可以從圖像中複製圖像。你甚至可以從默認的幀緩衝區複製到一些渲染緩衝區或紋理。

您也可以採用glCopyImageSubData,它將像素矩形從一個圖像複製到另一個。如果您只是在複製像素數據,那麼它比glBlitFramebuffer更方便。目前這是相當新的(GL 4.3,或ARB_copy_image)。它不能用於將數據複製到默認幀緩衝區。