You can draw to an sf::RenderTexture (http://www.sfml-dev.org/documentation/2.1/classsf_1_1RenderTexture.php).
sf::Texture::bind(myRenderTexture);
Since you now have two render targets (the window and the render-texture), every time you make OpenGL calls you first need to set the active target. Every time you use the render-texture, you must call window.setActive() so that subsequent OpenGL calls will apply to the window, not to the render-texture.sf::Texture::bind uses an sf::Texture*, so if you'll have to retrieve the Texture from your RenderTexture first with sf::RenderTexture::getTexture (http://www.sfml-dev.org/documentation/2.1/classsf_1_1RenderTexture.php#a95bc5152c497066d31fdc57da8e17678), which would give you
sf::RenderTexture ninjaRender[maxPlayers];
...
for (int i = 0; i < maxPlayers; i++)
{
ninjaRender[i].create(256, 256);
ninjaRender[i].setView(*ninjaRenderView);
ninjaRender[i].clear(sf::Color(0, 0, 0, 0));
ninjaRender[i].display();
}
ninjaRender[ninjaNum].clear(sf::Color(0, 0, 0, 0));
ninjaRender[ninjaNum].draw(*anim->drawable);
ninjaRender[ninjaNum].display();
mainWindow->draw(sf::Sprite(ninjaRender[ninjaNum].getTexture()));
glEnable(GL_TEXTURE_2D);
sf::Texture::bind(&ninjaRender[ninjaNum].getTexture());
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 1.0f); glVertex2f(0, 0);
glTexCoord2f(1.0f, 1.0f); glVertex2f(256, 0);
glTexCoord2f(1.0f, 0.0f); glVertex2f(256, 256);
glTexCoord2f(0.0f, 0.0f); glVertex2f(0, 256);
glEnd();
Have you tried using window.pushGLStates() and window.popGLStates() as described in this tutorial http://sfml-dev.org/tutorials/2.1/window-opengl.php ?