use direct buffer