Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}