void PlatformSetTextures(GraphicsDevice device)
{
// Skip out if nothing has changed.
if (_dirty == 0)
return;
for (var i = 0; i < _textures.Length; i++)
{
var mask = 1 << i;
if ((_dirty & mask) == 0)
continue;
var tex = _textures[i];
GL.ActiveTexture(TextureUnit.Texture0 + i);
GraphicsExtensions.CheckGLError();
// Clear the previous binding if the
// target is different from the new one.
if (_targets[i] != 0 && (tex == null || _targets[i] != tex.glTarget))
{
GL.BindTexture(_targets[i], 0);
_targets[i] = 0;
GraphicsExtensions.CheckGLError();
}
if (tex != null)
{
_targets[i] = tex.glTarget;
GL.BindTexture(tex.glTarget, tex.glTexture);
GraphicsExtensions.CheckGLError();
}
_dirty &= ~mask;
if (_dirty == 0)
break;
}
_dirty = 0;
}
}