2013-03-26 3 views
1

Я хотел использовать шейдер геометрии GLSL, чтобы посмотреть на линейную полосу и определить место для размещения текстурированной аннотации с учетом текущего ModelView. Кажется, я ограничена только получением 4 вершин на вызов (с использованием GL_LINE_STRIP_ADJACENCY), но мне нужна всего лишь строка для оценки.Geometry Shader Дополнительные примитивы

Я мог бы использовать какой-то другой примитивный тип (например, многоточечный, если есть эквивалент в GL), но важным моментом является то, что я хочу рассмотреть всю геометрию, а не только часть.

Есть ли расширение типа прихода, которое обеспечило бы дополнительные вершины для геометрического шейдера? Или есть лучший способ сделать это, кроме использования шейдера Geometry?

ответ

3

Нет механизма, который предоставит вам доступ к полностью обработанному примитивному потоку. Примитивы могут быть сколь угодно большими, поэтому они могут легко пропустить любые разумные размеры внутренних буферов, которые имеют графические процессоры. Таким образом, реализация этого была бы непрактичной.

может связывать ваш массив как текстуру буфера и просто читать данные оттуда. Но это будет чрезвычайно медленно, так как каждый вызов GS будет обрабатывать сотни вершин. Это не совсем то, что нужно для использования параллелизма графических процессоров.

Если вы хотите просто поместить текстовый тег рядом с чем-то, вы должны обозначить вершину или что-то такое, где должны быть аннотации.

+0

Спасибо за предложения. Два последующих действия: 1. Я думаю, что могу поместить данные вершин в текстуру буфера, как вы предлагали, а затем отправить упрощенную геометрию в конвейер, например, один сегмент линии между первой и последней вершинами; вы видите, почему это не сработает? 2. Если бы я должен был обозначить вершину для текста, как мне создать и отправить текстовый тег в трубопровод GL? Поскольку это будет происходить со многими различными линейными полосками, похоже, что это нужно было бы сделать в шейдере Vertex. – Chris

Смежные вопросы