我得到了一个不断变化/更新的缓冲区,我需要将此缓冲区的像素blit到屏幕上。对于我的测试代码,我读取了一个位图并将其存储到缓冲区中。问题是,我想在使用 OpenGL 将其传送到屏幕时忽略特定颜色。
目前我使用:
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);
所以在上面,我拥有的是一些称为 Data 的 Buffer 指针。然后我在给定高度和宽度的情况下循环遍历它。如果颜色是黑色的,我就不画了。否则我glDrawPixels
结合使用glRasterPos2i
,一次一个像素地把它画到屏幕上。有没有更有效的方法可以让它绘制除特定颜色之外的所有像素?它是缓冲区而不是纹理。我以 Bmp 为例。