cocos2dx 3.x运行自己shader出错的问题
2017-01-19 17:53
411 查看
最近向做下shader练习提高一下姿势,就找了个最简单的灰度shader先让他跑起来看看,网上有很多教程,不过讲得比较长,我选了一个比较短的描述比较清楚的来试验,然后遇到了好几个问题。
在这要吐槽一下那些人,转载或发上来自己都不去运行一下,要是运行的话就会发现直接拿过来根本运行不了,下面说下这些坑
第一个是logForOpenGLObject()出错的问题,原因是
![](http://img.blog.csdn.net/20170119173624474?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveDIzNDVjb20=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
所以解决方法是把getVertexShaderLog(),getFragmentShaderLog(),getProgramLog()的取地址符合去掉
或者也可以用教程之前给出的方法解决,直接用原函数替代,不用传的参数
另外提一点 这个问题在cocos2dx3.6版本已经改了,改成就是上面贴的代码那样,不传参,直接用原函数
改完这个还运行不了,花了不短的时间才找到问题
这是广为流传的教程shader,然而好像没人运行过,CC_Texture0根本没有声明,加一下就可以成功运行了。
虽然教程有点问题,但还是感谢分享
在这要吐槽一下那些人,转载或发上来自己都不去运行一下,要是运行的话就会发现直接拿过来根本运行不了,下面说下这些坑
第一个是logForOpenGLObject()出错的问题,原因是
所以解决方法是把getVertexShaderLog(),getFragmentShaderLog(),getProgramLog()的取地址符合去掉
std::string GLProgram::getVertexShaderLog() const { return this->logForOpenGLObject(_vertShader, (GLInfoFunction)glGetShaderiv, (GLLogFunction)glGetShaderInfoLog); }
std::string GLProgram::getFragmentShaderLog() const { return this->logForOpenGLObject(_fragShader, (GLInfoFunction)glGetShaderiv, (GLLogFunction)glGetShaderInfoLog); }
std::string GLProgram::getProgramLog() const { return this->logForOpenGLObject(_program, (GLInfoFunction)glGetProgramiv, (GLLogFunction)glGetProgramInfoLog); }
或者也可以用教程之前给出的方法解决,直接用原函数替代,不用传的参数
std::string GLProgram::logForOpenGLObject(GLuint object, GLInfoFunction infoFunc, GLLogFunction logFunc) const { std::string ret; GLint logLength = 0, charsWritten = 0; //infoFunc(object, GL_INFO_LOG_LENGTH, &logLength); //这里就崩溃了~~ 不知道为什么 glGetShaderiv(object, GL_INFO_LOG_LENGTH, &logLength); //直接改成调用opengel函数, if (logLength < 1) return ""; char *logBytes = (char*)malloc(logLength); // logFunc(object, logLength, &charsWritten, logBytes); //同上 glGetShaderInfoLog(object, logLength, &charsWritten, logBytes); ret = logBytes; free(logBytes); return ret; }
另外提一点 这个问题在cocos2dx3.6版本已经改了,改成就是上面贴的代码那样,不传参,直接用原函数
改完这个还运行不了,花了不短的时间才找到问题
varying vec4 v_fragmentColor; varying vec2 v_texCoord; void main() { vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord); float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114)); gl_FragColor = vec4(gray, gray, gray, v_orColor.a); }
这是广为流传的教程shader,然而好像没人运行过,CC_Texture0根本没有声明,加一下就可以成功运行了。
uniform sampler2D CC_Texture0;
虽然教程有点问题,但还是感谢分享
相关文章推荐
- cocos2dx-3.x android虚拟机运行错误的问题
- cocos2dx 3.x引擎升级,lua绑定genbindings.py运行错误问题
- matlab 7.0 运行启动后一闪马上就自己结束了 的问题
- ncurses 下载到arm 运行出错问题解决
- 简单的java扫雷程序,已运行成功。自己想出来的,有个问题很困惑有望高手能解答。
- Zend server 运行出错的问题解决
- 区域性问题导致多语言软件运行出错
- 常见问题:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装或修复调试器
- android工程运行"Debug Certificate expired"出错问题解决办法
- Error: ShouldNotReachHere() android工程类中main方法运行出错问题解决
- 运行出错(数组问题)
- boost中asio的编译运行出错问题
- 今天解决了的一个DEBUG运行正常RELEASE出错的问题!
- 困扰多时的matlab运行出错问题
- 常见问题:试图运行项目时出错:无法启动调试 没有正确安装调试器。请运行安装程序安装或修复调试器
- Rhel: pygame安装与范例运行,以及中间出错问题的处理(redhat)
- 关于DTS运行正常但JOB下运行出错相关问题的原因
- 收藏 不显示删除回复显示所有回复显示星级回复显示得分回复 属性表单问题,编译后,运行中会出错,求教!
- 龙书第13章地形绘制的terrain项目的编译和运行出错问题
- 朋友的一个问题:Linux开机如何自动运行自己编写好的shell脚本