图中红框部分,是自定义shader传float类型参数的时候必经的地方,这个地方第一个参数是对象cobj不说了,第二个参数是字段名吧?为什么会先尝试取一次int32?这里取int32必然会有错误报警,有没有大佬解释下,什么情况下会用到取int32的情况?
版本:3.17.2
void GLProgramState::setUniformFloat(GLint uniformLocation, float value)
这个第一个参数就是int类型啊
我想问的是用在什么场合,我没见过这种用法,麻烦大佬给个例子,谢谢
就是取了个int,并没有尝试取一下
你看代码,是尝试的,取失败会重置状态,下面重新按string再取。虽然逻辑上没问题,但是运行的时候在取int的时候由于类型错误会报错警告,这点很恶心
读一个int再读一个float
。。。不是这里,这里读int失败就break了,下面我没截图截全
下面支持另一个重载
我知道,我想问下第一种取int的方式会用在哪种情况。我遇到的使用方式都是第二种,这样的话每次正常使用也报error是不是有点不太好?
参数数量相同的情况下,绑定函数不知道lua要调c++的哪个重载,所以必须走进去看一下第一个lua参数是不是int,根据lua参数类型选择对应的c++重载
你调接口传的什么参数
明显你调接口参数有问题
很明显你眼神也有问题
我知道,算了,不说了,说得累
补上昨天的报错图:
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,回头我试试