BindTexture - binds texture to the device so you can perform operations on it
VertexBufferObjects - are used to store vertex information in server / graphics card memory, used so you don’t have to pass the vertex information to the card every time you need to draw the vertices, just bind the buffer
PixelBufferObjects - works similar to VBO except it’s used to store pixels, used for certain effects
When should old BindTexture be used, when should Vertex Buffer Objects should get also pixel colors and when should Texture Buffer Objects?
You are really confused about things.
I’ll assume by “BindTexture” you mean using texture objects. There is no reason to avoid using texture objects, as this is the only way to have, you know, textures.
PBOs are used to transfer pixel data to and from OpenGL. This means that they are used with functions like glTexImage, glTexSubImage, glReadPixels. Their purpose is to make transfer of pixel data asynchronous. They do not replace textures in any way.
Texture buffer objects are still textures. You still create a texture object with glGenTextures; you still bind it with glBindTexture, etc. Buffer textures are one-dimensional textures who texture storage comes from a buffer object. These are used to allow shaders to access very large quantities of data, larger than a regular texture could provide. The downside is that there is no filtering whatsoever. They are not used to store image data.