Posts

【cocos2d-x 2.x 学习与应用总结】14: 自定义shader绘制混合颜色的矩形

20 Jan 2016

#前言 本文介绍了如何在cocos2d-x中使用自定义shader来实现混合颜色矩形的绘制。文中继续使用前一篇文章中定义的CustomDrawNode类来实现绘制过程,在其基础上派生出ColorfulRectangle类,使用一对新的shader。 绘制的效果图如下所示: colorful_rectangle.jpg ...

阅读全文 ...


【cocos2d-x 2.x 学习与应用总结】13: 使用CCGLProgram实现自定义绘制

18 Jan 2016

#前言 本文总结了如何借助CCGLProgram来实现自定义绘制的节点类,使用自定义的顶点着色器和片段着色器,实现一个绘制彩色矩形的节点类。 绘制的效果图如下所示: custom_draw_rectangle.jpg ...

阅读全文 ...


【cocos2d-x 2.x 学习与应用总结】12: cocos2d-x预定义shader源码

17 Jan 2016

#前言 本文把cocos2d-x 2.x版本中预定义的所有shader源码贴出来,便于集中参考。作者的引擎版本是2.2.3.

预定义shaders总览

cocos中的预定义shader是定义在ccShaders.h/cpp这对文件中的,下面是所有预定义shader的名字:
extern CC_DLL const GLchar * ccPosition_uColor_frag;
extern CC_DLL const GLchar * ccPosition_uColor_vert;

extern CC_DLL const GLchar * ccPositionColor_frag;
extern CC_DLL const GLchar * ccPositionColor_vert;

extern CC_DLL const GLchar * ccPositionTexture_frag;
extern CC_DLL const GLchar * ccPositionTexture_vert;

extern CC_DLL const GLchar * ccPositionTextureA8Color_frag;
extern CC_DLL const GLchar * ccPositionTextureA8Color_vert;

extern CC_DLL const GLchar * ccPositionTextureColor_frag;
extern CC_DLL const GLchar * ccPositionTextureColor_vert;

extern CC_DLL const GLchar * ccPositionTextureColorAlphaTest_frag;

extern CC_DLL const GLchar * ccPositionTexture_uColor_frag;
extern CC_DLL const GLchar * ccPositionTexture_uColor_vert;

extern CC_DLL const GLchar * ccPositionColorLengthTexture_frag;
extern CC_DLL const GLchar * ccPositionColorLengthTexture_vert;

extern CC_DLL const GLchar * ccExSwitchMask_frag;
...

阅读全文 ...


【cocos2d-x 2.x 学习与应用总结】11: 理解CCGLProgram

16 Jan 2016

#前言 本文介绍了cocos2d-x中CCGLProgram这个类, 这篇文章假设读者已经了解OpenGL ES程序的基本渲染流程:顶点和片段着色器的源代码的编写、着色器的创建、program的创建、源代码绑定、编译、链接、OpenGL客户端-服务端传值等。CCGLProgram这个类正是对OpenGL ES渲染流程中涉及到着色器的编译、链接、传值等部分的抽象。 本文先总起介绍CCGLProgram所做的工作,然后分析其源代码中的关键实现,最后给出CCGLProgram的使用实例。

总体上认识CCGLProgram

CCGLProgram, 人如其名,它是一个OpenGL Program,通过一个顶点着色器和一个片段着色器代码(对于不支持shader即时编译功能的显卡,传入编译好的二进制着色器数据)来创建一个CCGLProgram. CCGLProgram内部做下面这些工作:
  • compileShader方法,内部调用glCreateShader, glShaderSource, glCompileShader等OpenGL API创建建顶点和片段着色器, 并编译
  • 调用glCreateProgram等OpenGL API完成program创建
  • link方法调用glLinkProgram完成program的链接
  • use方法调用glUseProgram以启用program
  • 定义了8个预定义的uniform,
...

阅读全文 ...


【cocos2d-x 2.x 学习与应用总结】10: cocos2d-x自带的shader及其使用

15 Jan 2016

#前言 本文介绍了cocos2d-x中自带的shader代码, 及其在引擎中的使用情况。作者的引擎版本是2.2.3,在这个版本的cocos中有9种自带的shader,详情请见下文。

自带的shaders

cocos2d-x自带的shaders定义在cocos2dx\shaders\ccShaders.hcocos2dx\shaders\ccShaders.cpp这对文件中,下面是ccShaders.h的内容: 每个自带的shader源代码都被定义成一个字符串: const GLchar*类型的变量, 如下: ...

阅读全文 ...