Для этого вам не нужно рендерить текстуру (хотя это один из способов). На самом деле это можно сделать намного проще с помощью gl.viewport
.
gl.viewport
просто устанавливает прямоугольник на холсте, который вы хотите визуализировать. Все, что выпадает за пределы этого прямоугольника, обрезается. Обычно вы устанавливаете тот же размер, что и холст, потому что хотите рендерить полноэкранный режим, но в вашем случае вы можете сделать следующее:
// Clears the entire scene. gl.clear does not respect the viewport
gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
// Render upper left quadrant
gl.viewport(0, 0, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[0]);
// Render upper right quadrant
gl.viewport(canvas.width/2, 0, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[1]);
// Render lower left quadrant
gl.viewport(0, canvas.height/2, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[2]);
// Render lower right quadrant
gl.viewport(canvas.width/2, canvas.height/2, canvas.width/2, canvas.height/2);
drawSceneWithShader(shader[3]);
При рендеринге просто визуализируйте всю сцену как обычно, вам не нужно делать ничего особенного, чтобы учесть новый видовой экран. (Тем не менее, если вы выбираете мышь или что-то подобное, вам необходимо учитывать окно просмотра!)