2013-07-12 23 views
1

我給了一個不斷變化的/更新的緩衝區,我需要將此緩衝區的像素閃爍到屏幕上。 對於我的測試代碼,我讀取一個位圖並將其存儲到緩衝區中。 問題是,我想在使用OpenGL將其移動到屏幕時忽略特定的顏色。更好的方式來忽略特定的顏色 - Blit

目前我使用:

glPushMatrix(); 
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

glColor4f(1.0f, 1.0f, 1.0f, 0.0f); 
unsigned char* Data = (unsigned char*)Buffer; 

for (int I = Bmp.Height(); I > 0; --I) 
{ 
    for (int J = 0; J < Bmp.Width(); ++J) 
    { 
     if (Data[0] != 0 && Data[1] != 0 && Data[2] != 0) //If the colour is black, we don't draw it.. 
     { 
      glRasterPos2i(J, I); 
      glDrawPixels(1, 1, GL_BGR, GL_UNSIGNED_BYTE, Data); 

     } 

     Data += Bmp.Bits() == 32 ? 4 : 3; 

     if(Bmp.Bits() == 24) 
      Data += (-Bmp.Width() * 3) & 3; 
    } 
} 

glPopMatrix(); 
SwapBuffers(DC); 
Sleep(1); 

所以在上面的,我有什麼是所謂的一些數據緩衝區指針。然後給我一個高度和寬度循環。如果顏色是黑色的,我不畫它。否則,我使用glDrawPixels結合glRasterPos2i一次將它繪製到屏幕上一個像素。有沒有更有效的方法可以使其繪製除特定顏色以外的所有像素?它是一個緩衝區而不是紋理。我以Bmp爲例。

回答

0

您可以使用模板緩衝區。通過使用像素着色器,還有一些方法可以執行色度鍵。