news 2026/8/19 22:29:40

【2014-04-03】cocos2dx学习笔记:CCShaderCache

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【2014-04-03】cocos2dx学习笔记:CCShaderCache

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2014-04-03| 标题:cocos2dx学习笔记:CCShaderCache分类:编程 / C && C++ / cocos2dx |标签:cocos2dx·CCShaderCache


cocos2dx学习笔记:CCShaderCache

CCShaderCache是CCGLProgram的管理类,单例形式。这里备注下代码:

CCShaderCache.cpp NS_CC_BEGIN//==>>cocos2dx自带的几个shaderenum{kCCShaderType_PositionTextureColor,kCCShaderType_PositionTextureColorAlphaTest,kCCShaderType_PositionColor,kCCShaderType_PositionTexture,kCCShaderType_PositionTexture_uColor,kCCShaderType_PositionTextureA8Color,kCCShaderType_Position_uColor,kCCShaderType_PositionLengthTexureColor,kCCShaderType_ControlSwitch,kCCShaderType_MAX,};//单例相关staticCCShaderCache*_sharedShaderCache=0;。。。。。 。。。。。//==>>载入cocos2dx自带的几个shader,并将其放入字典中。voidCCShaderCache::loadDefaultShaders(){// Position Texture Color shaderCCGLProgram*p=newCCGLProgram();loadDefaultShader(p,kCCShaderType_PositionTextureColor);m_pPrograms->setObject(p,kCCShader_PositionTextureColor);p->release();// Position Texture Color alpha testp=newCCGLProgram();loadDefaultShader(p,kCCShaderType_PositionTextureColorAlphaTest);m_pPrograms->setObject(p,kCCShader_PositionTextureColorAlphaTest);p->release();。。。。。 。。。。。}//==>>重置shaders,可参考CCGLProgram的reset方法。voidCCShaderCache::reloadDefaultShaders(){// reset all programs and reload them// Position Texture Color shaderCCGLProgram*p=programForKey(kCCShader_PositionTextureColor);p->reset();loadDefaultShader(p,kCCShaderType_PositionTextureColor);// Position Texture Color alpha testp=programForKey(kCCShader_PositionTextureColorAlphaTest);p->reset();loadDefaultShader(p,kCCShaderType_PositionTextureColorAlphaTest);}//==>>载入cocos2dx自带的shader,根据不同的type,读入不同的shader内容,并且绑定变量。voidCCShaderCache::loadDefaultShader(CCGLProgram*p,inttype){switch(type){casekCCShaderType_PositionTextureColor:p->initWithVertexShaderByteArray(ccPositionTextureColor_vert,ccPositionTextureColor_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);break;casekCCShaderType_PositionTextureColorAlphaTest:p->initWithVertexShaderByteArray(ccPositionTextureColor_vert,ccPositionTextureColorAlphaTest_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);break;casekCCShaderType_PositionColor:p->initWithVertexShaderByteArray(ccPositionColor_vert,ccPositionColor_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);break;casekCCShaderType_PositionTexture:p->initWithVertexShaderByteArray(ccPositionTexture_vert,ccPositionTexture_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);break;casekCCShaderType_PositionTexture_uColor:p->initWithVertexShaderByteArray(ccPositionTexture_uColor_vert,ccPositionTexture_uColor_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);break;casekCCShaderType_PositionTextureA8Color:p->initWithVertexShaderByteArray(ccPositionTextureA8Color_vert,ccPositionTextureA8Color_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);break;casekCCShaderType_Position_uColor:p->initWithVertexShaderByteArray(ccPosition_uColor_vert,ccPosition_uColor_frag);p->addAttribute("aVertex",kCCVertexAttrib_Position);break;casekCCShaderType_PositionLengthTexureColor:p->initWithVertexShaderByteArray(ccPositionColorLengthTexture_vert,ccPositionColorLengthTexture_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);p->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);break;casekCCShaderType_ControlSwitch:p->initWithVertexShaderByteArray(ccPositionTextureColor_vert,ccExSwitchMask_frag);p->addAttribute(kCCAttributeNamePosition,kCCVertexAttrib_Position);p->addAttribute(kCCAttributeNameColor,kCCVertexAttrib_Color);p->addAttribute(kCCAttributeNameTexCoord,kCCVertexAttrib_TexCoords);break;default:CCLOG("cocos2d: %s:%d, error shader type",__FUNCTION__,__LINE__);return;}//==>>连接program,更新常量值p->link();p->updateUniforms();CHECK_GL_ERROR_DEBUG();}//==>>根据名称获取CCGLProgramCCGLProgram*CCShaderCache::programForKey(constchar*key){return(CCGLProgram*)m_pPrograms->objectForKey(key);}//==>>添加一个program到单例中voidCCShaderCache::addProgram(CCGLProgram*program,constchar*key){m_pPrograms->setObject(program,key);}NS_CC_END
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 22:29:18

多智能体协同导航:PECMAN框架下的分布式探索与避障实践

1. 项目概述:当一群智能体在陌生环境中“抱团”探索想象一下,你带着一群朋友在一个从未去过的巨大迷宫里寻宝。每个人手里只有一支手电筒(感知范围有限),而且你们之间不能大声喊话(通信受限)。你…

作者头像 李华
网站建设 2026/8/19 22:29:15

构建结构化代码库索引:让AI编程助手真正理解项目上下文

1. 项目概述:为什么“代码不是记忆”?最近在折腾一个大型的遗留项目,代码库有几十万行,每次想找个函数或者理清某个模块的调用链路,都得在IDE里全局搜索半天,或者依赖模糊的记忆。这让我想起一个老生常谈的…

作者头像 李华
网站建设 2026/8/19 22:27:59

Aurix TC275嵌入式开发实战:从多核启动到功能安全应用

1. 从零到一:为什么选择Aurix TC275作为嵌入式开发的起点如果你在嵌入式领域摸爬滚打几年,尤其是接触过汽车电子或者工业控制,那么“Aurix”这个名字对你来说一定不陌生。它不像STM32那样遍地开花,也不像ESP32那样在创客圈里人尽皆…

作者头像 李华
网站建设 2026/8/19 22:26:48

还在熬夜翻目录?用番茄小说下载器三步把整本小说搬进本地

还在熬夜翻目录?用番茄小说下载器三步把整本小说搬进本地 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 先讲一个我自己的"血泪故事" 凌晨一点半,我躺在…

作者头像 李华
网站建设 2026/8/19 22:24:49

STM32F107+DM9161+FreeRTOS+LWIP嵌入式网络方案实战解析

1. 项目缘起:一个经典嵌入式网络方案的再审视 最近在整理一个老项目的技术文档,核心平台是STM32F107,搭配DM9161以太网PHY芯片,跑着FreeRTOS和LWIP协议栈。这套组合在十年前是相当经典的嵌入式网络解决方案,很多工业控…

作者头像 李华