这个接口lua无法用?
第三个参数直接无视了?
麻烦把问题说得清楚些。为什么说是无用的?是遇到什么错误了,还是什么效果不对。另外,你贴的这部分代码是什么意思?
可能是我说的不够清楚,我在看源码的时候发现setUniformFloatv这个lua导出的接口
void setUniformFloatv(const std::string& uniformName, ssize_t size, const float* pointer);
void setUniformFloatv(GLint uniformLocation, ssize_t size, const float* pointer);
看定义是3个参数,第一个是opengle相关的(就不说了,就是对应定义的uniform变量),第二个是数组的长度, 第三个是数组的指针。
然后我贴的这段代码是lua导出的lua_cocos2dx_GLProgramState_setUniformFloatv 完整如下
int lua_cocos2dx_GLProgramState_setUniformFloatv(lua_State* tolua_S)
{
int argc = 0;
cocos2d::GLProgramState* cobj = nullptr;
bool ok = true;
#if COCOS2D_DEBUG >= 1
tolua_Error tolua_err;
#endif
#if COCOS2D_DEBUG >= 1
if (!tolua_isusertype(tolua_S,1,“cc.GLProgramState”,0,&tolua_err)) goto tolua_lerror;
#endif
cobj = (cocos2d::GLProgramState*)tolua_tousertype(tolua_S,1,0);
#if COCOS2D_DEBUG >= 1
if (!cobj)
{
tolua_error(tolua_S,“invalid ‘cobj’ in function ‘lua_cocos2dx_GLProgramState_setUniformFloatv’”, nullptr);
return 0;
}
#endif //下面是重点
argc = lua_gettop(tolua_S)-1;
do{
if (argc == 3) { //参数数量 = 3
int arg0;
ok &= luaval_to_int32(tolua_S, 2,(int *)&arg0, “cc.GLProgramState:setUniformFloatv”); //拿到第一个参数并返回成功状态
if (!ok) { break; }
ssize_t arg1;
ok &= luaval_to_ssize(tolua_S, 3, &arg1, "cc.GLProgramState:setUniformFloatv");//拿到第2个参数并返回成功状态
if (!ok) { break; }
const float* arg2;
** #pragma warning NO CONVERSION TO NATIVE FOR float*//!!!!!!!!!!这里怎么不拿第三个参数?**
**ok = false; //然后默认是失败的!!!这是要我们自己实现的节奏么?**
if (!ok) { break; }
cobj->setUniformFloatv(arg0, arg1, arg2);
lua_settop(tolua_S, 1);
return 1;
}
}while(0);
ok = true;
do{
if (argc == 3) {
std::string arg0;
ok &= luaval_to_std_string(tolua_S, 2,&arg0, "cc.GLProgramState:setUniformFloatv");
if (!ok) { break; }
ssize_t arg1;
ok &= luaval_to_ssize(tolua_S, 3, &arg1, "cc.GLProgramState:setUniformFloatv");
if (!ok) { break; }
const float* arg2;
#pragma warning NO CONVERSION TO NATIVE FOR float*
ok = false;
if (!ok) { break; }
cobj->setUniformFloatv(arg0, arg1, arg2);
lua_settop(tolua_S, 1);
return 1;
}
}while(0);
ok = true;
luaL_error(tolua_S, "%s has wrong number of arguments: %d, was expecting %d \n", "cc.GLProgramState:setUniformFloatv",argc, 3);
return 0;
#if COCOS2D_DEBUG >= 1
tolua_lerror:
tolua_error(tolua_S,"#ferror in function ‘lua_cocos2dx_GLProgramState_setUniformFloatv’.",&tolua_err);
#endif
return 0;
}
引擎是3.10的
js_cocos2dx_GLProgramState_setUniformFloatv
意思是 自动脚本绑定 GLProgramState 方法中 不管怎么传参都会失败,
jsb_cocos2dx_auto.cpp 文件 js_cocos2dx_GLProgramState_setUniformFloatv :
do { if (argc == 3) { std::string arg0; ok &= jsval_to_std_string(cx, args.get(0), &arg0); if (!ok) { ok = true; break; } ssize_t arg1 = 0; ok &= jsval_to_ssize(cx, args.get(1), &arg1); if (!ok) { ok = true; break; } const float* arg2 = 0; #pragma warning NO CONVERSION TO NATIVE FOR float* 问题在这里 ok = false; if (!ok) { ok = true; break; } cobj->setUniformFloatv(arg0, arg1, arg2); args.rval().setUndefined(); return true; } } while(0);
因为目前不支持将脚本的 float32Array 对象 转成 c++ 的 float*
那我要问 这个方法不能用 我能怎么办?
手动改C++代码还是有其他方案等同于使用改方法的?