void CreateTexture(Texture *a_texture , string a_name)
Basically yes.
Generally you would want to use interface types instead of concrete types, but the idea is the same. "Injection" seems like an invasive or aggressive thing, it calls to my mind stabbing someone with needles who doesn't want it, but it isn't that at all. Normally it is just a parameter to the constructor, or a SetWhatever method.
Event listeners are a frequently-taught example. You create an interface and functions to add/remove listeners. Some other code implements that interface, then injects itself with TheTarget->AddListener(this);
In C++ the collection classes are another great example. All of them take an optional parameter of an allocator. You can use the default std::allocator, or you can inject your own custom allocator.
Another great example in C++ are associative containers and operations that take a comparison function. All of them use the default value of of the less-than operator. You can use the default, or you can inject your own comparison function.
In a nutshell, don't depend on concrete types. Depend on interfaces and allow other systems to pass those objects to you. They can pass them as parameters to the individual function, or as part of a constructor, or as part of an add/remove pair, or any other means you are comfortable with. The dependency inversion principle (linked to above) makes this pattern incredibly easy in the real world.
The key point is that you are using an object that can be easily replaced rather than a hard-coded specific or global object.