Передача данных из C# в OpenTK FS

Я полностью кодирую игру в понг во фрагментном шейдере OpenTK. C# выполняет всю рутинную работу, а затем передает информацию фрагментному шейдеру, чтобы он окрашивал правильные пиксели. Проблема в том, что я понятия не имею, как передать информацию самому фрагментному шейдеру.

Есть ли способ передачи информации непосредственно в какую-либо переменную фрагментного шейдера из С#?


person thebjornlegacy    schedule 09.07.2020    source источник
comment
OpenTK представляется библиотекой, написанной на С#, поэтому вопрос о передаче данных из С# в OpenTK для меня не имеет смысла. это все С#! Я думаю, вы спрашиваете, как использовать OpenTK в целом, и это очень широкий вопрос. Может быть, это поможет?   -  person John Wu    schedule 09.07.2020
comment
Вы можете прочитать раздел OpenTK Learn.   -  person Flutterish    schedule 10.07.2020


Ответы (1)


Да это так:

  1. Унифицированные переменные

    • The simplest variant, corresponds to a global constant variable for the shader. The access should be the fastest because they can be cached in local memory.
  2. Единые блоки

    • Grouping of uniform variables backed by a buffer. Can be used for storing medium-sized (~KBs) objects e.g. camera matrices, lighting setups, global settings. The advantage is that one buffer can be used for storing values for multiple shaders. They can still be cached in shared memory.
  3. Буферные блоки хранения

    • Arbitrary data backed by a buffer, usually unlimited in size. The biggest advantage is that shaders can write to this block. But writing is little bit more complicated by incohorent memory access and thus need for memory barriers and such. Slowest to read.

Тем не менее, вы, кажется, неправильно используете фрагментные шейдеры. Их основное применение — обработка фрагментов, созданных при растеризации примитивов OpenGL. Таким образом, их вклад должен исходить, например, от вершинный шейдер. Способ OpenGL для рисования понга заключается в создании буферов, содержащих ракетки и мяч, их положения могут храниться в юниформ-переменных. Затем вершинный шейдер преобразует вершины лопастей в соответствии с их расположением, хранящимся в униформе. Затем фрагментный шейдер просто окрашивает их соответствующим образом.

person Quimby    schedule 09.07.2020