我得到一个不断变化/更新的缓冲区,我需要将此缓冲区的像素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为例。
答案 0 :(得分:0)
您可以使用Stencil缓冲区。还有一些方法可以使用像素着色器来进行色度键。