прохождение равномерного плавающего в вершинный шейдер opengl

У меня возникла проблема при передаче плавающего числа из c ++ с использованием униформы в мой вершинный шейдер. Этот поплавок просто предназначен для добавления к себе.

В моем заголовке у меня есть

float pauto;
void pautoupdate(int program);

Теперь в моем cpp

void World::pautoupdate(int program)
{
pauto += 0.1f;

glUniform1f(glGetUniformLocation(program, "pauto"), pauto);
}

В моем вершинном шейдере он объявлен как и просто увеличивает значения x

uniform float pauto;

terrx = Position.x;
terrx += pauto;

С этого момента я не получаю никаких результатов от этого, я не уверен, что я неправильно указываю на это или что-то.

1

Решение

Попробуйте следующее:

  1. Я предполагаю, что программа GLSL, которую вы показываете, не является целым кодом, так как здесь нет основной или чего-то еще.
  2. Убедитесь, что программа установлена ​​при входе в функцию
  3. Сохраните вывод glGetUniformLocation и проверьте, все ли в порядке
  4. Выполните вызов glGetError до / после, чтобы узнать, обнаружит ли GL проблему.

Если вы хотите быстро протестировать и настроить шейдеры в различных ситуациях, есть несколько инструментов, которые помогут вам в этом. В сети есть ShaderToy (http://www.shadertoy.com) например. В автономном режиме, позвольте мне порекомендовать один, который я разработал, Tao3D (http://tao3d.sf.net).

2

Другие решения

GlUniform * должен применяться между glUseProgram (программа) и glUseProgram (0):

1. Используйте шейдер
2. Установить форму
3. Рендер вещи
4. Удалите шейдер

Это потому, что OpenGL должен знать программу, в которую вы отправляете форму.

0

По вопросам рекламы [email protected]