Для того чтобы вписать текстуру в круг в шейдере GLSL и избежать обрезания, можно использовать координаты текстуры и центр окружности для определения, находится ли текущая точка в пределах круга.
Например, если у вас есть текстурные координаты `uv` и центр окружности в `vec2 center`, то можно проверить расстояние от центра до текущей точки и рассмотреть только те точки, которые находятся внутри радиуса круга.
```glsl
vec2 diff = uv - center;
float dist = length(diff);
if (dist > 0.5) {
discard; // отбрасываем точки вне круга
}
```
Чтобы передать значения uniform из пользовательского интерфейса в шейдер с использованием macroquad, вам нужно использовать функцию `set_uniform` из библиотеки macroquad. Сначала, вам необходимо объявить переменные uniform в вашем шейдере, и затем использовать `set_uniform` для передачи значений из вашего приложения в шейдер.
Пример:
```rust
let shader = load_shader(
None,
r#"#version 100
precision highp float;
uniform float time;
void main() {
gl_FragColor = vec4(sin(time), 0.0, 0.0, 1.0);
}"#,
);
let location = shader.get_uniform_location("time");
loop {
let time = get_time();
set_uniform(location, UniformType::Float(time));
// Остальной код рендеринга
}
```
В этом примере, мы объявляем uniform переменную `time` в шейдере и передаем значение времени из функции `get_time` в шейдер с помощью `set_uniform`. Теперь значение времени будет использоваться в шейдере для создания эффектов анимации или других визуальных изменений.