簡體   English   中英

復制矢量<glubyte>緩沖區到幀緩沖區</glubyte>

[英]Copy vector<GLubyte> buffer to framebuffer

我試圖避免在我的代碼中使用glDrawPixels ,所以我正在尋找替代方案。

下面是我用來將幀緩沖區內容讀入vector<GLubyte>的代碼。 現在我需要代碼將矢量內容傳輸回幀緩沖區。 我已經嘗試了十幾種不同的嘗試,但沒有運氣。

glReadBuffer(GL_COLOR_ATTACHMENT0);

GLuint copy_tex = 0;
glGenTextures(1, &copy_tex);

vector<GLubyte> tex_buf(4 * win_x * win_y, 0);

glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, copy_tex);
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, win_x, win_y, 0);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, &tex_buf[0]);

for (size_t i = 0; i < win_x; i++)
{
    for (size_t j = 0; j < win_y; j++)
    {
        size_t index = 4 * (i*win_y + j);

        tex_buf[index + 0] = 255;
        tex_buf[index + 1] = 127;
        tex_buf[index + 2] = 0;
    }
}

glDrawPixels(win_x, win_y, GL_RGBA, GL_UNSIGNED_BYTE, &tex_buf[0]);

glDeleteTextures(1, &copy_tex);

glGetTexImage返回一個紋理圖像。 如果要將圖像寫回紋理,則可以使用glTexSubImage2D

glDrawPixels(GL_TEXTURE_2D, 0, 0, 0, win_x, win_y, GL_RGBA, GL_UNSIGNED_BYTE, &tex_buf[0]);

如果你想將一個像素塊從一個幀緩沖區 object 復制到另一個,那么你可以使用glBlitFramebuffer 例如從命名幀緩沖區復制到默認幀緩沖區:

glBindFramebuffer(GL_READ_FRAMEBUFFER, my_fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glBlitFramebuffer(0, 0, win_x, win_y, 0, 0, window_h, window_w, GL_COLOR_BUFFER_BIT, GL_LINEAR);

window_h , window_w可以不同於win_x , win_y並且是默認幀緩沖區的大小。

暫無
暫無

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

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