明显你调接口参数有问题
很明显你眼神也有问题
我知道,算了,不说了,说得累
补上昨天的报错图:
error:cc.GLProgramState:setUniformFloat argument #2 is ‘string’; ‘number’ expected.
![]()
实际上调用没有问题,因为昨天截图的位置取值失败后,接下来会走下面常规调用方法取string类型的字段
我全局搜了lua代码,没发现有使用int调用的情况,昨天论坛问看来效果也不理想,估计不会有2dx大佬水ccc论坛了,暂时就如下处理结案算了

修改:项目路径/frameworks/cocos2d-x/cocos/scripting/lua-bindings/manual/LuaBasicConversions.h
修改:项目路径/frameworks/cocos2d-x/cocos/scripting/lua-bindings/manual/LuaBasicConversions.cpp
修改:项目路径/frameworks/cocos2d-x/cocos/scripting/lua-bindings/auto/lua_cocos2dx_auto.cpp
就算不修改,实际项目也不影响,只是开发调试的时候看起来烦,把cocos的debug关掉也行
一个是uniform地址,一个是根据名称获取uniform地址。上面不是有人回复了?
我是想看下,有没有人这么用过,举个例子我学习下用法,而且我这本来就是正常用法,为什么要报错误提示呢?也不合理对吧
另外,我刚试了一下,获取uniform地址的接口也没bind到lua。。。
这个int是填shader中两个着色器中的uniform调用的顺序位置
例如:
// 这是顶点着色器部分代码
void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}
// 这是片段着色器部分代码
uniform float u_param;
void main()
{
vec4 c = texture2D(CC_Texture0, v_texCoord);
gl_FragColor = c * u_param;
}
/*
CC_开头也算uniform,运行的时候它由引擎自动修改
uniform从零开始数: CC_PMatrix(0), CC_Texture0(1), u_param(2)
这个时候lua那边就可以这样调用了(只贴调用部分代码)
*/
glProgramState:setUniformFloat(2, 0.5)
// 如果片段着色器是这样的
uniform float u_param;
void main()
{
float f = u_param;
vec4 c = texture2D(CC_Texture0, v_texCoord);
gl_FragColor = c * f;
}
/*
那就重新需要读
uniform从零开始数: CC_PMatrix(0), u_param(1), CC_Texture0(2)
*/
glProgramState:setUniformFloat(1, 0.5)
感谢大佬,大佬6p,回头我试试
实测失败了。。。。
不知道是不是版本问题。我这边按大佬的说法应该是2,但是我从2试到了0都是错的
![]()
vs:

fs:

CC_PMatrix(0),CC_Texture0(1),u_rate(2)
你完整片段着色器给我看一下,我用的是2dx 3.17.2

我也是3.17.2
我是这样调用的
local glProgram = cc.GLProgram:createWithByteArrays(vert, frag)
local glProgramState = cc.GLProgramState:getOrCreateWithGLProgram(glProgram)
glProgramState:setUniformFloat(2, 0.1)
sp:setGLProgram(glProgram)
sp:setGLProgramState(glProgramState)
照说应该用glgetuniformlocation拿这个int
我也是。。。

第一个值从2-0都有会有前面那个提示
嗯嗯,其实就是这个
lua里好像没注册这个方法
我用你的代码也可以跑,就看你顶点有没有用到其他CC_
要不就把GLProgram::getUniformLocationForName绑定到lua上去看

我这边这样数没问题,哈哈
你可以试试先不放update看看
不过int也很少用,都是直接用uniformName




