有没有大佬解释下这个东西?【2dx】

明显你调接口参数有问题

很明显你眼神也有问题

我知道,算了,不说了,说得累

补上昨天的报错图:
error:cc.GLProgramState:setUniformFloat argument #2 is ‘string’; ‘number’ expected.
image
实际上调用没有问题,因为昨天截图的位置取值失败后,接下来会走下面常规调用方法取string类型的字段


我全局搜了lua代码,没发现有使用int调用的情况,昨天论坛问看来效果也不理想,估计不会有2dx大佬水ccc论坛了,暂时就如下处理结案算了 :upside_down_face:
修改:项目路径/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关掉也行 :joy:

一个是uniform地址,一个是根据名称获取uniform地址。上面不是有人回复了?

:joy:我是想看下,有没有人这么用过,举个例子我学习下用法,而且我这本来就是正常用法,为什么要报错误提示呢?也不合理对吧

另外,我刚试了一下,获取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都是错的
image
vs:
image
fs:
image
CC_PMatrix(0),CC_Texture0(1),u_rate(2)

你完整片段着色器给我看一下,我用的是2dx 3.17.2

image
我也是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

我也是。。。
image
第一个值从2-0都有会有前面那个提示

嗯嗯,其实就是这个

lua里好像没注册这个方法

我用你的代码也可以跑,就看你顶点有没有用到其他CC_
要不就把GLProgram::getUniformLocationForName绑定到lua上去看
:rofl:
我这边这样数没问题,哈哈

顶点也就截图那样,差不多也就是默认的。。。
我怀疑是跟我在update中修改有关系


不过没事,我就还是用前面那种使用字段名赋值的方法就好,我把那个提示像前面那种方式修改了

你可以试试先不放update看看
不过int也很少用,都是直接用uniformName

:ok_hand: