Yes, though I feel like I need to make an addendum to that.
-
The vast majority of games, game engines, and frameworks today are rendering with the GPU. Moreover, switching to CPU rendering will probably be slower regardless since your CPU is much slower at the kind of math involved in rendering and the graphics data will most likely still need to pass through the GPU at some point to reach the display.
-
There’s not just a limit of textures per draw call to worry about. Switching textures bound to slots between draw calls also has a performance cost, which is another reason why some games use spritesheets and/or texture atlases.
-
Just because spritesheets are better at runtime doesn’t mean you need to author your sprites that way. You can code your game to load the frames individually and stitch them together when your game starts up, or alternatively generate spritesheets from your source textures as part of your game’s CI/CD pipeline (if you have one, I understand many indies do not use them as part of their workflow).