处理无法从 GLSL 着色器文件中读取统一变量
Processing unable to read uniform variable from GLSL shader file
我试图将一个值从 Processing 传递到 GLSL 着色器文件,但是 Processing 产生错误,它没有读取我已经在着色器文件中声明的统一浮点数。但是,Processing 确实读取了我声明的其他统一浮点数。下面是我程序中的部分代码。
GLSL 着色器文件:
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
varying vec2 surfacePosition;
const float checkSize = 20.0;
uniform float mouseX;
uniform float mouseY;
uniform float size;
uniform float time;
void main()
{
// other codes
}
处理中:
void draw()
{
background(255);
myShader.set("mouseX", map(mouseX, 0, width, 0 , 200));
myShader.set("mouseY", map(mouseY, 0, height, 200, 0));
myShader.set("counter", myCounter);
myShader.set("size", 600);
shader(myShader);
translate(width/2, height/2);
shape(sphere);
myCounter += 0.05;
}
处理产生以下错误消息:
The shader doesn't have a uniform called "size"
处理成功读取统一变量 mouseX
、mouseY
和 time
但不是 size
。为什么会这样?
我猜 '600' 是作为整数值处理的。尝试将其强制转换为手动浮动。这应该可以解决您的问题。
另一个问题可能是您目前没有使用变量 'size'。然后编译器只是从你的着色器中删除制服。
如果不知道着色器中的代码,很难解决问题。
我试图将一个值从 Processing 传递到 GLSL 着色器文件,但是 Processing 产生错误,它没有读取我已经在着色器文件中声明的统一浮点数。但是,Processing 确实读取了我声明的其他统一浮点数。下面是我程序中的部分代码。
GLSL 着色器文件:
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
varying vec2 surfacePosition;
const float checkSize = 20.0;
uniform float mouseX;
uniform float mouseY;
uniform float size;
uniform float time;
void main()
{
// other codes
}
处理中:
void draw()
{
background(255);
myShader.set("mouseX", map(mouseX, 0, width, 0 , 200));
myShader.set("mouseY", map(mouseY, 0, height, 200, 0));
myShader.set("counter", myCounter);
myShader.set("size", 600);
shader(myShader);
translate(width/2, height/2);
shape(sphere);
myCounter += 0.05;
}
处理产生以下错误消息:
The shader doesn't have a uniform called "size"
处理成功读取统一变量 mouseX
、mouseY
和 time
但不是 size
。为什么会这样?
我猜 '600' 是作为整数值处理的。尝试将其强制转换为手动浮动。这应该可以解决您的问题。
另一个问题可能是您目前没有使用变量 'size'。然后编译器只是从你的着色器中删除制服。
如果不知道着色器中的代码,很难解决问题。