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

图中红框部分,是自定义shader传float类型参数的时候必经的地方,这个地方第一个参数是对象cobj不说了,第二个参数是字段名吧?为什么会先尝试取一次int32?这里取int32必然会有错误报警,有没有大佬解释下,什么情况下会用到取int32的情况?

版本:3.17.2

void GLProgramState::setUniformFloat(GLint uniformLocation, float value)
这个第一个参数就是int类型啊

我想问的是用在什么场合,我没见过这种用法,麻烦大佬给个例子,谢谢

就是取了个int,并没有尝试取一下

你看代码,是尝试的,取失败会重置状态,下面重新按string再取。虽然逻辑上没问题,但是运行的时候在取int的时候由于类型错误会报错警告,这点很恶心

读一个int再读一个float

。。。不是这里,这里读int失败就break了,下面我没截图截全

下面支持另一个重载

:sweat_smile:我知道,我想问下第一种取int的方式会用在哪种情况。我遇到的使用方式都是第二种,这样的话每次正常使用也报error是不是有点不太好?

参数数量相同的情况下,绑定函数不知道lua要调c++的哪个重载,所以必须走进去看一下第一个lua参数是不是int,根据lua参数类型选择对应的c++重载

你调接口传的什么参数

明显你调接口参数有问题

很明显你眼神也有问题

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

补上昨天的报错图:
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,回头我试试