bool SpriteBlur::initWithTexture(Texture2D* texture, const Rect& rect) { _blurRadius = 0; if( Sprite::initWithTexture(texture, rect) ) { #if CC_ENABLE_CACHE_TEXTURE_DATA auto listener = EventListenerCustom::create(EVENT_RENDERER_RECREATED, [this](EventCustom* event){ initGLProgram(); }); _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); #endif initGLProgram(); return true; } return false; }
bool ShadowMapVSM::init(const glk::Size &framebufferSize) { _framebufferSize = framebufferSize; //创建颜色纹理 int defaultTexture, defaultFramebufferId,renderbufferId; glGetIntegerv(GL_TEXTURE_BINDING_2D,&defaultTexture); glGetIntegerv(GL_RENDERBUFFER_BINDING, &renderbufferId); glGetIntegerv(GL_FRAMEBUFFER_BINDING, &defaultFramebufferId); glGenTextures(2,_textureIds); float anisotropic = 0; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &anisotropic); for (int k = 0; k < 2; ++k) { glBindTexture(GL_TEXTURE_2D, _textureIds[k]); 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); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT,8); //int uu = GL_VERSION_3_0; glTexStorage2D(GL_TEXTURE_2D, 1, GL_RG32F,framebufferSize.width,framebufferSize.height); //glTexImage2D(GL_TEXTURE_2D,0,GL_RG32F,framebufferSize.width,framebufferSize.height,0,GL_RG,GL_FLOAT,nullptr); } //depth-texture glGenRenderbuffers(1, &_depthTextureId); glBindRenderbuffer(GL_RENDERBUFFER, _depthTextureId); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, framebufferSize.width, framebufferSize.height); // glGenFramebuffers(3, _framebufferIds); glBindFramebuffer(GL_FRAMEBUFFER,_framebufferIds[0]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _textureIds[0], 0); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,_depthTextureId,0); assert(glCheckFramebufferStatus(GL_FRAMEBUFFER)==GL_FRAMEBUFFER_COMPLETE); glBindFramebuffer(GL_FRAMEBUFFER,_framebufferIds[1]); glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _textureIds[1], 0); glDrawBuffer(GL_COLOR_ATTACHMENT0); assert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE); glBindFramebuffer(GL_FRAMEBUFFER,_framebufferIds[2]); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,_textureIds[0],0); glDrawBuffer(GL_COLOR_ATTACHMENT0); assert(glCheckFramebufferStatus(GL_FRAMEBUFFER)==GL_FRAMEBUFFER_COMPLETE); glBindTexture(GL_TEXTURE_2D,defaultTexture); glBindRenderbuffer(GL_RENDERBUFFER, renderbufferId); glBindFramebuffer(GL_FRAMEBUFFER, defaultFramebufferId); initGLProgram(); initBuffer(); return true; }