Существуют различия в том, как эти два работают, или даже их предполагаемое использование.SDL_CreateSoftwareRenderer
создает программное средство рендеринга чертежа на заданную поверхность.Не требуется, чтобы эта поверхность была поверхностью окна, вы можете нарисовать в backbuffer, преобразовать ее в текстуру и передать результат в d3d или opengl рендерер.
SDL_CreateRenderer
создает рендерер для данного окна, то естьдолжен рисовать в это окно - с некоторыми проверками, такими как opengl или vulkan, требуется, чтобы окно создавалось с определенными флагами.Он просматривает список доступных рендерингов и пытается найти тот, который соответствует вашему flags
лучше всего.В конце концов, если он решает использовать программный рендерер (либо ничего не поддерживается, либо программное обеспечение явно запрашивается, хотя для этого есть несколько способов - см. Последний абзац), он вызывает более или менее SDL_CreateSoftwareRenderer(SDL_GetWindowSurface(window))
(не совсем так, но если вы проследите, чтобы код был таким же).
flags
в SDL_CreateRenderer
не являются абсолютными;если подсказка говорит, что нужно использовать direct3d или opengl, ваш SDL_RENDERER_SOFTWARE
будет проигнорирован.SDL_CreateSoftwareRenderer
всегда программный.