Поток данных памяти для юниформ-переменных?

Когда текстура (2D) передается шейдеру в качестве входных данных «uniform», она сначала загружается в OpenGL с помощью glTexImage2D(), а затем с помощью glUniform1i() она связывается с юниформой шейдера.

например код:

Текстурные данные

glTexImage2D(): используется для передачи данных текстуры на сервер.

glGetUniformLocation(): используется для доступа к универсальному дескриптору шейдера.

glUniform1i(): связывает данные, указанные текстурным блоком, с входными данными шейдера «uniform».

но когда мы передаем матрицу (например, matrix4x4) в шейдер как «унифицированный» ввод, когда не используйте какую-либо конкретную функцию для загрузки ее в OpenGL. Мы только что использовали glUniform..() для связывания данных с вводом шейдера, который мы также использовали в случае связывания данных текстуры, которые уже присутствуют в памяти OpenGL.

Данные матрицы

glGetUniformLocation(): для доступа к универсальному дескриптору шейдера

glUniformMatrix4fv(): связать данные матрицы с юниформ-вводом шейдера.

Где находятся матричные данные на каждом шаге в процессе их передачи шейдеру в качестве входных данных юниформ?

  • Всегда ли матричные данные находятся в доступной памяти на стороне клиента/ЦП и извлекаются каждый кадр на стороне сервера?

  • Если он загружен в OpenGL:

    • какой вызов шага/функции загружает данные?

    • где данные живут в памяти OpenGL?

    • как указано его место в памяти?

Значения юниформ-переменных «жизнь» в хранилище данных стандартного юниформ-блока на GPU.

Rabbid76 22.02.2019 23:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
126
1

Ответы 1

associates the data pointed by texture unit to the shader 'uniform' input.

Нет, это устанавливает «значение» юниформ-переменной (uniforms не являются «входными данными») как индекс текстурной единицы, где сэмплер может найти текстуру, которую представляет эта юниформа. Ценность — это просто ценность; это ничем не отличается от того, как вы устанавливаете значение юниформ-переменной любой.

Просто в GLSL вы не получаете доступ к «значению» юниформ-переменной сэмплера; вместо этого вы используете функции доступа к текстуре.

Если вы измените текстуру, привязанную к этому текстурному блоку, до рендеринга с помощью шейдера, то шейдер увидит новую текстуру. Он не связан напрямую с какой-либо текстурой; шейдер связан только с индексом блока текстуры.

Where does the matrix data live in each step in the process of passing it to a shader as a uniform input?

В «процессе» передачи юниформ-значений шейдерам есть только один шаг. Вы делаете glUniform* звонок, и «процесс» завершен; конкретная униформа теперь имеет эту особую ценность.

Это ничем не отличается от установки практически любого состояния в OpenGL. Если вы делаете вызов glTexParameter, который выполняет «процесс» установки значения состояния, которое вы передаете в нужное место в объекте текстуры OpenGL.

Does matrix data always live on client side/ CPU accessible memory and fetched every frame by server side?

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

«Он живет там, где реализация решает его поместить. Однако все функции OpenGL завершаются с указателями, которые вы им передаете, к тому времени, когда они возвращаются». - если реализация решает хранить/сохранять данные на стороне клиента, может ли указатель OpenGL указывать на место в памяти процессора?

user2259784 23.02.2019 05:24

@ user2259784: Что такое «указатель OpenGL»? То, что делает реализация, это ее личное дело. Он может иметь указатели на память процессора и память графического процессора; только не в память, принадлежащую ты.

Nicol Bolas 23.02.2019 05:49

Другие вопросы по теме