refactor for clBuffer disign