本文整理汇总了C++中CCGLProgram::getProgram方法的典型用法代码示例。如果您正苦于以下问题:C++ CCGLProgram::getProgram方法的具体用法?C++ CCGLProgram::getProgram怎么用?C++ CCGLProgram::getProgram使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CCGLProgram
的用法示例。
在下文中一共展示了CCGLProgram::getProgram方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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();
}
示例2:
static int tolua_CCGLProgram_CCGLProgram_getProgram00(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 'getProgram'", NULL);
#endif
{
unsigned const int tolua_ret = ( unsigned const int) self->getProgram();
tolua_pushnumber(tolua_S,(lua_Number)tolua_ret);
}
}
return 1;
#ifndef TOLUA_RELEASE
tolua_lerror:
tolua_error(tolua_S,"#ferror in function 'getProgram'.",&tolua_err);
return 0;
#endif
}
示例3: 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();
}
示例4: init
bool TextureSprite::init(std::string &texFileName, CCPointVector &vertices)
{
/// Load the texture from file
if (texFileName.length() == 0) {
CCLOGERROR("Invalid texture filename (empty string)");
return false;
}
CCTexture2D *texture = CCTextureCache::sharedTextureCache()->addImage(texFileName.c_str());
if (!texture) {
CCLOGERROR("ERROR: Can't load texture: '%s'", texFileName.c_str());
return false;
}
setTexture(texture);
/// Enable texture repeat. Horizontal and vertical repeat enabled by default.
setRepeat(true, true);
/// Create the shader program
CCGLProgram *shader = CCShaderCache::sharedShaderCache()->programForKey(settings::kShader_PositionTexture_uColor_uTime);
mColorLocation = glGetUniformLocation(shader->getProgram(), "u_color");
mTimeLocation = glGetUniformLocation(shader->getProgram(), "u_time");
setShaderProgram(shader);
addPolygon(vertices);
/* Seems that there's no need to call the init method again when the app is back to foreground (like CCDrawNode.cpp).
* Only reload shaders is mandatory (see proj.android/jni/hellolua/main.cpp).
*/
/*
#if CC_ENABLE_CACHE_TEXTURE_DATA > 0
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,
callfuncO_selector(TextureSprite::listenBackToForeground),
EVENT_COME_TO_FOREGROUND,
NULL);
#endif
*/
return true;
}
示例5: glDepthMask
void RawStencilBufferTest4::setupStencilForClippingOnPlane(GLint plane)
{
RawStencilBufferTest::setupStencilForClippingOnPlane(plane);
glDepthMask(GL_FALSE);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, _alphaThreshold);
#else
CCGLProgram *program = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColorAlphaTest);
GLint alphaValueLocation = glGetUniformLocation(program->getProgram(), kCCUniformAlphaTestValue);
program->setUniformLocationWith1f(alphaValueLocation, _alphaThreshold);
m_pSprite->setShaderProgram(program );
#endif
}
示例6: oc_reset_cc_gl_state
void oc_reset_cc_gl_state(){
//reset to cocos2d-x render state
static GLuint s_cc_gl_program = 0;
static CCDirector* s_cc_director = NULL;
if( 0 == s_cc_gl_program ){
CCShaderCache* cache = CCShaderCache::sharedShaderCache();
CCGLProgram* glp = cache->programForKey(kCCShader_PositionTextureColor);
s_cc_gl_program = glp->getProgram();
}
if( NULL == s_cc_director ){
s_cc_director = CCDirector::sharedDirector();
}
glUseProgram(s_cc_gl_program);
s_cc_director->setAlphaBlending(true);
s_cc_director->setDepthTest(false);
s_cc_director->setProjection(kCCDirectorProjection3D);
// glDisable( GL_CULL_FACE );
}
示例7: 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();
}
示例8: glStencilMask
void RawStencilBufferTest6::setupStencilForClippingOnPlane(GLint plane)
{
GLint planeMask = 0x1 << plane;
glStencilMask(planeMask);
glStencilFunc(GL_NEVER, 0, planeMask);
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
ccDrawSolidRect(CCPointZero, ccpFromSize(CCDirector::sharedDirector()->getWinSize()), ccc4f(1, 1, 1, 1));
glStencilFunc(GL_NEVER, planeMask, planeMask);
glStencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) || (CC_TARGET_PLATFORM == CC_PLATFORM_LINUX) || (CC_TARGET_PLATFORM == CC_PLATFORM_MAC)
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER, _alphaThreshold);
#else
CCGLProgram *program = CCShaderCache::sharedShaderCache()->programForKey(kCCShader_PositionTextureColorAlphaTest);
GLint alphaValueLocation = glGetUniformLocation(program->getProgram(), kCCUniformAlphaTestValue);
program->setUniformLocationWith1f(alphaValueLocation, _alphaThreshold);
m_pSprite->setShaderProgram(program);
#endif
glFlush();
}
示例9: 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();
//.........这里部分代码省略.........