本文整理汇总了C++中CCGLProgram::updateUniforms方法的典型用法代码示例。如果您正苦于以下问题:C++ CCGLProgram::updateUniforms方法的具体用法?C++ CCGLProgram::updateUniforms怎么用?C++ CCGLProgram::updateUniforms使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCGLProgram
的用法示例。
在下文中一共展示了CCGLProgram::updateUniforms方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: loadCustomShaders
bool Assets::loadCustomShaders()
{
/// Scrollable texture shader
{
CCGLProgram *shader = new CCGLProgram();
shader->initWithVertexShaderFilename("shaders/shader_PositionTexture_uColor_uTime.vsh", "shaders/shader_PositionTexture_uColor_uTime.fsh");
shader->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
shader->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
shader->link();
shader->updateUniforms();
CCShaderCache::sharedShaderCache()->addProgram(shader, settings::kShader_PositionTexture_uColor_uTime);
}
/// Grayscale shader
{
CCGLProgram *shader = new CCGLProgram();
shader->initWithVertexShaderFilename("shaders/shader_Grayscale.vsh", "shaders/shader_Grayscale.fsh");
shader->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
shader->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
shader->link();
shader->updateUniforms();
CCShaderCache::sharedShaderCache()->addProgram(shader, settings::kShader_Grayscale);
}
CHECK_GL_ERROR_DEBUG();
return true;
}
示例2: shaderMulColor
void CSpriteRGBA::shaderMulColor(float r, float g, float b, float a)
{
CCGLProgram *pShaders = new CCGLProgram;
pShaders->initWithVertexShaderByteArray(ccPositionTextureColor_vert, SPRITERGBA_SHADER_MUL_COLOR_FSH);
CHECK_GL_ERROR_DEBUG();
pShaders->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
pShaders->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
pShaders->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
CHECK_GL_ERROR_DEBUG();
pShaders->link();
CHECK_GL_ERROR_DEBUG();
pShaders->updateUniforms();
CHECK_GL_ERROR_DEBUG();
GLint nDotColorLocation = pShaders->getUniformLocationForName("v_dotcolor");
pShaders->setUniformLocationWith4f(nDotColorLocation, r, g, b, a);
scale9Image->setShaderProgram(pShaders);
CHECK_GL_ERROR_DEBUG();
pShaders->release();
}
示例3: init
bool ShaderRetroEffect::init()
{
if( ShaderTestDemo::init() ) {
GLchar * fragSource = (GLchar*) CCString::createWithContentsOfFile(CCFileUtils::sharedFileUtils()->fullPathFromRelativePath("Shaders/example_HorizontalColor.fsh"))->getCString();
CCGLProgram *p = new CCGLProgram();
p->initWithVertexShaderByteArray(ccPositionTexture_vert, fragSource);
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
p->link();
p->updateUniforms();
CCDirector *director = CCDirector::sharedDirector();
CCSize s = director->getWinSize();
m_pLabel = CCLabelBMFont::create("RETRO EFFECT", "fonts/west_england-64.fnt");
m_pLabel->setShaderProgram(p);
p->release();
m_pLabel->setPosition(ccp(s.width/2,s.height/2));
addChild(m_pLabel);
scheduleUpdate();
return true;
}
return false;
}
示例4: CCLOGERROR
CCGLProgram * GAFStencilMaskSprite::programShaderForMask()
{
CCGLProgram *program = CCShaderCache::sharedShaderCache()->programForKey(kPCStencilMaskAlphaFilterProgramCacheKey);
if (!program)
{
program = GAFShaderManager::createWithFragmentFilename(ccPositionTextureColor_vert, kPCStencilMaskAlphaFilterFragmentShaderFilename);
if (program)
{
program->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
program->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
program->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
program->link();
program->updateUniforms();
CHECK_GL_ERROR_DEBUG();
CCShaderCache::sharedShaderCache()->addProgram(program, kPCStencilMaskAlphaFilterProgramCacheKey);
program->release();
}
else
{
CCLOGERROR("Cannot load program for programShaderForMask.");
return NULL;
}
}
program->use();
return program;
}
示例5: loadShader
void ShaderManager::loadShader(const char* key, const GLchar* vertexShader, const GLchar* fragShader)
{
CCGLProgram * ccProgram = CCShaderCache::sharedShaderCache()->programForKey(key);
if (ccProgram == NULL)
{
ccProgram = new CCGLProgram();
ccProgram->autorelease();
CCShaderCache::sharedShaderCache()->addProgram(ccProgram, key);
}
else
{
ccProgram->reset();
}
ccProgram->initWithVertexShaderByteArray(vertexShader, fragShader);
CHECK_GL_ERROR_DEBUG();
ccProgram->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
ccProgram->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
ccProgram->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
CHECK_GL_ERROR_DEBUG();
// 自定义着色器链接
ccProgram->link();
CHECK_GL_ERROR_DEBUG();
// 设置移动、缩放、旋转矩阵
ccProgram->updateUniforms();
CHECK_GL_ERROR_DEBUG();
}
示例6: loadShaderVertex
void ShaderNode::loadShaderVertex(const char *vert, const char *frag)
{
CCGLProgram* shader = new CCGLProgram();
shader->initWithVertexShaderFilename(vert, frag); //载入着色器程序
//绑定attribute变量
shader->addAttribute("a_position", 0);
shader->addAttribute("a_color", 1);
shader->link();
//获取attribute变量标识
m_attributeColor = glGetAttribLocation(shader->getProgram(), "a_color");
m_attributePosition = glGetAttribLocation(
shader->getProgram(), "a_position");
shader->updateUniforms();
//获取uniform变量标识
m_uniformResolution = glGetUniformLocation(shader->getProgram(), "resolution");
m_uniformTime = glGetUniformLocation(shader->getProgram(), "time");
m_uniformTex0 = glGetUniformLocation(shader->getProgram(), "tex0");
//使用着色器程序
this->setShaderProgram(shader);
shader->release();
}
示例7:
static int tolua_CCGLProgram_CCGLProgram_updateUniforms00(lua_State* tolua_S)
{
#ifndef TOLUA_RELEASE
tolua_Error tolua_err;
if (
!tolua_isusertype(tolua_S,1,"CCGLProgram",0,&tolua_err) ||
!tolua_isnoobj(tolua_S,2,&tolua_err)
)
goto tolua_lerror;
else
#endif
{
CCGLProgram* self = (CCGLProgram*) tolua_tousertype(tolua_S,1,0);
#ifndef TOLUA_RELEASE
if (!self) tolua_error(tolua_S,"invalid 'self' in function 'updateUniforms'", NULL);
#endif
{
self->updateUniforms();
}
}
return 0;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'updateUniforms'.",&tolua_err);
return 0;
#endif
}
示例8: LoadSuperAnimShader
void LoadSuperAnimShader(){
CCGLProgram* aProgram = new CCGLProgram();
aProgram->initWithVertexShaderByteArray(ccSuperAnim_vert, ccPositionTextureColor_frag);
aProgram->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
aProgram->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
aProgram->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
aProgram->link();
aProgram->updateUniforms();
CCShaderCache::sharedShaderCache()->addProgram(aProgram, kCCShaderSuperAnimation);
aProgram->release();
}
示例9: reloadCustomShaders
bool Assets::reloadCustomShaders()
{
CCLOG("reload custom shaders");
CCGLProgram *shader = CCShaderCache::sharedShaderCache()->programForKey(settings::kShader_PositionTexture_uColor_uTime);
shader->reset();
shader->initWithVertexShaderFilename("shaders/shader_PositionTexture_uColor_uTime.vsh", "shaders/shader_PositionTexture_uColor_uTime.fsh");
shader->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
shader->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
shader->link();
shader->updateUniforms();
/// TODO
CHECK_GL_ERROR_DEBUG();
return true;
}
示例10: loadShaderVertex
void QRSprite::loadShaderVertex(const char *vert, const char *frag)
{
CCGLProgram *shader = new CCGLProgram();
shader->initWithVertexShaderByteArray(vert, frag);
shader->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
shader->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
shader->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
shader->link();
shader->updateUniforms();
this->setShaderProgram(shader);
shader->release();
}
示例11: loadShaderVertex
void ShaderNode::loadShaderVertex(const char *vert, const char *frag)
{
CCGLProgram *shader = new CCGLProgram();
shader->initWithVertexShaderFilename(vert, frag);
shader->addAttribute("aVertex", kCCVertexAttrib_Position);
shader->link();
shader->updateUniforms();
m_uniformCenter = glGetUniformLocation(shader->getProgram(), "center");
m_uniformResolution = glGetUniformLocation(shader->getProgram(), "resolution");
m_uniformTime = glGetUniformLocation(shader->getProgram(), "time");
this->setShaderProgram(shader);
shader->release();
}
示例12: setBatchNodeAlphaTestValue
void BatchNodeManager::setBatchNodeAlphaTestValue(float _value)
{
CCGLProgram* alphashader = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColorAlphaTest);
CHECK_GL_ERROR_DEBUG();
alphashader->initWithVertexShaderByteArray(ccPositionTextureColor_vert, ccPositionTextureColorAlphaTest_frag);
alphashader->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
alphashader->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
alphashader->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
alphashader->link();
alphashader->updateUniforms();
unsigned loc = glGetUniformLocation(alphashader->getProgram(), kCCUniformAlphaTestValue);
CHECK_GL_ERROR_DEBUG();
alphashader->setUniformLocationWith1f(loc, _value);
CHECK_GL_ERROR_DEBUG();
}
示例13: loadCustomShader
void CCShaders::loadCustomShader(const string& key) {
if(!CCShaderCache::sharedShaderCache()->programForKey(key.c_str())) {
// load shader
CCGLProgram* p = new CCGLProgram();
p->autorelease();
LOAD_PROGRAM_IF(flash);
LOAD_PROGRAM_IF(blur);
// add attribute
if(false) {
// non-default situation
} else {
p->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
p->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
p->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
}
// link it
p->link();
// add custom uniform
if(key == kCCShader_flash) {
ADD_UNIFORM(flashColor);
ADD_UNIFORM(flashTime);
} else if(key == kCCShader_blur) {
ADD_UNIFORM(blurSize);
ADD_UNIFORM(blurSubtract);
}
// add standard uniforms
p->updateUniforms();
// add program
CCShaderCache::sharedShaderCache()->addProgram(p, key.c_str());
}
}
示例14: initWithTexture
bool SceneNode::initWithTexture(std::string textureName)
{
//enable touch
setTouchEnabled( true );
//set projection is 2D (default is 3D). if use 3D projection, projection error accumulation may cause ripple effect mess.
CCDirector::sharedDirector()->setProjection(kCCDirectorProjection2D);
//get adaptedViewport. adaptedViewport is calculated by cocos2d-x
//so long as we use this adaptedViewport, we just writting code based on designResolutionSize, no need to worry about the screen adaptation.
glGetIntegerv(GL_VIEWPORT,adaptedViewport);
//get screenSize
//screenSize is the real size of simulator/device screen
screenSize=CCEGLView::sharedOpenGLView()->getFrameSize();
CCLOG("screenSize:%f,%f",screenSize.width,screenSize.height);
//get winSize
//winSize is equals to designResolutionSize. we only need to writting code based on designResolutionSize (and forget the real screenSize).
winSize=CCDirector::sharedDirector()->getWinSize();
CCLOG("winSize:%f,%f",winSize.width,winSize.height);
//determine bufferTexSize based on winSize
bufferTexSize=CCSize(winSize.width*0.4,winSize.height*0.4);
//use bufferTexSize to calculate step_s and step_t
step_s=1.0/bufferTexSize.width;
step_t=1.0/bufferTexSize.height;
//create textures
texBackGround = CCTextureCache::sharedTextureCache()->addImage(textureName.c_str()) ;
bufferTexSource=createCCTexture2DWithSize(bufferTexSize,kCCTexture2DPixelFormat_RGBA8888,0.5,0.5,0.5,1);
bufferTexDest=createCCTexture2DWithSize(bufferTexSize,kCCTexture2DPixelFormat_RGBA8888,0.5,0.5,0.5,1);
bufferTexTemp=createCCTexture2DWithSize(bufferTexSize,kCCTexture2DPixelFormat_RGBA8888,0.5,0.5,0.5,1);
//set texture params
ccGLBindTexture2D(bufferTexSource->getName());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//GL_NEAREST
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);//GL_NEAREST
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
ccGLBindTexture2D(bufferTexDest->getName());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
ccGLBindTexture2D(bufferTexTemp->getName());
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
//create shaders
//updateRipple shader
{
GLchar * fragSource = (GLchar*) CCString::createWithContentsOfFile(CCFileUtils::sharedFileUtils()->fullPathForFilename("updateRipple.fsh").c_str())->getCString();
CCGLProgram* pProgram = new CCGLProgram();
pProgram->initWithVertexShaderByteArray(ccPositionTextureColor_vert, fragSource);
//bind attribute
pProgram->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
pProgram->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
pProgram->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
//link (must after bindAttribute)
pProgram->link();
//get cocos2d-x build-in uniforms
pProgram->updateUniforms();
//get my own uniforms
map<string,GLint> myUnifoMap;
myUnifoMap["texSource"] =glGetUniformLocation(pProgram->getProgram(),"texSource");
myUnifoMap["texDest"] = glGetUniformLocation(pProgram->getProgram(),"texDest");
myUnifoMap["step_s"] = glGetUniformLocation(pProgram->getProgram(),"step_s");
myUnifoMap["step_t"] = glGetUniformLocation(pProgram->getProgram(),"step_t");
myUnifoMap["touchPos_winSpace"] = glGetUniformLocation(pProgram->getProgram(),"touchPos_winSpace");
myUnifoMap["touchValid"] = glGetUniformLocation(pProgram->getProgram(),"touchValid");
myUnifoMap["winSize"] = glGetUniformLocation(pProgram->getProgram(),"winSize");
myUnifoMap["bufferTexSize"] = glGetUniformLocation(pProgram->getProgram(),"bufferTexSize");
//make program_updateRipple
program_updateRipple.myUnifoMap=myUnifoMap;
program_updateRipple.setProgram(pProgram);
//program can be released
pProgram->release();
//check gl error
CHECK_GL_ERROR_DEBUG();
}
//renderRipple shader
{
GLchar * fragSource = (GLchar*) CCString::createWithContentsOfFile(CCFileUtils::sharedFileUtils()->fullPathForFilename("renderRipple.fsh").c_str())->getCString();
CCGLProgram* pProgram = new CCGLProgram();
pProgram->initWithVertexShaderByteArray(ccPositionTextureColor_vert, fragSource);
//bind attribute
pProgram->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
pProgram->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
pProgram->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
//link (must after bindAttribute)
pProgram->link();
//get cocos2d-x build-in uniforms
pProgram->updateUniforms();
//get my own uniforms
map<string,GLint> myUnifoMap;
myUnifoMap["texSource"] = glGetUniformLocation(pProgram->getProgram(),"texSource");
myUnifoMap["step_s"] = glGetUniformLocation(pProgram->getProgram(),"step_s");
myUnifoMap["step_t"] = glGetUniformLocation(pProgram->getProgram(),"step_t");
//make program_renderRipple
program_renderRipple.myUnifoMap=myUnifoMap;
program_renderRipple.setProgram(pProgram);
//program can be released
pProgram->release();
//check gl error
CHECK_GL_ERROR_DEBUG();
//.........这里部分代码省略.........
示例15: addEffectNode
int FragmentEffect::addEffectNode(CCNode* pNode)
{
do
{
CCGLProgram* program = new CCGLProgram();
GLchar* pszFragSource =
"#ifdef GL_ES \n \
precision mediump float; \n \
#endif \n \
uniform sampler2D u_texture; \n \
varying vec2 v_texCoord; \n \
varying vec4 v_fragmentColor; \n \
uniform mat4 matrixEffect; \n \
void main(void) \n \
{ \n \
gl_FragColor = texture2D(u_texture, v_texCoord)*matrixEffect; \n \
}";
program->initWithVertexShaderByteArray(ccPositionTextureColor_vert, //顶点找色器,这里是引擎自带的
pszFragSource); //像素找色器,这里是自己写的
//将生成的shader程序传给CCSprite类
pNode->setShaderProgram(program);
//要release一次,在上面的setShaderProgram将pProgram托管给CCSprite
//setShaderProgram只调用了pProgram->retain(),没有release(),现在pProgram的m_uReference是2
program->release();
CHECK_GL_ERROR_DEBUG();
//启用顶点着色器的attribute变量,坐标、纹理坐标、颜色 ,去掉其中一个或两个还能工作
program->addAttribute(kCCAttributeNamePosition, kCCVertexAttrib_Position);
program->addAttribute(kCCAttributeNameColor, kCCVertexAttrib_Color);
program->addAttribute(kCCAttributeNameTexCoord, kCCVertexAttrib_TexCoords);
CHECK_GL_ERROR_DEBUG();
//自定义着色器链接
program->link();
CHECK_GL_ERROR_DEBUG();
// 设置移动、缩放、旋转矩阵
program->updateUniforms();
CHECK_GL_ERROR_DEBUG();
EffectListNode listNode;
listNode._pNode = pNode;
listNode._effectSelect = 0;
listNode._uniformMatrix = program->getUniformLocationForName("matrixEffect");
program->use();
program->setUniformLocationWithMatrix4fv(listNode._uniformMatrix,
m_matrices[0]._matrix,
1);
m_nodeList.push_back(listNode);
return m_nodeList.size()-1;
} while (0);
return -1;
}