1: я не уверен, что вы называете "лучшим способом" Используйте несколько целей рендеринга: вы создаете две 600 * N текстуры, привязываете их к FBO с помощью glDrawArrays и в своем фрагментном шейдере, вот так:
layout(location = 0) out vec3 color;
layout(location = 1) out vec3 edges;
При записи в "color" и "edge" вы будете эффективно писать в своих текстурах.
2: Вы не должны этого делать. Вычислите свои ограничивающие блоки на CPU и спроецируйте их (то есть умножьте каждый угол на вашу матрицу ModelViewProjection), чтобы получить ограничивающие рамки в 2D
Кстати: сначала вычислите свои ограничивающие рамки, чтобы вам не понадобилось 600 * 600 текстур, но 50 * 50 ...
EDIT: Вы обычно ограничиваете нарисованную зону с помощью glViewPort. Но есть только одна область просмотра, а вам нужно несколько. Вы можете попробовать расширение массива Viewport и жить на переднем крае, или передать AABB в текстуре, или не беспокоиться об этом, пока производительность не имеет значения ...
О, и вы не можете использовать Sobel просто так ... Sobel требует, чтобы вы могли читать все тексели вокруг, что не соответствует действительности, так как в настоящее время вы воспроизводите упомянутые тексели. Либо создайте двухпроходный алгоритм без MRT (сначала цвет, затем ребра), либо не используйте Sobel и угадывайте ваши ребра в шейдере (я не очень понимаю, как)