Sprite* HelloWorld::spriteWithColor(Color4F bgColor, float textureWidth, float textureHeight)
{
	// 1: Create new RenderTexture
	RenderTexture *rt = RenderTexture::create(textureWidth, textureHeight);

	// 2: Call RenderTexture:begin
	rt->beginWithClear(bgColor.r, bgColor.g, bgColor.b, bgColor.a);

	// 3: Draw into the texture

	//// gradient
	_gradient_command.init(rt->getGlobalZOrder());
	_gradient_command.func = std::bind(&HelloWorld::onDrawGradient, this, textureWidth, textureHeight);
	auto renderer = Director::getInstance()->getRenderer();
	renderer->addCommand(&_gradient_command);

	//// noise cloud
	BlendFunc blendFunc;
	blendFunc.src = GL_DST_COLOR;
	blendFunc.dst = GL_ZERO;

	Sprite *noise = Sprite::create("Noise.png");
	noise->setBlendFunc(blendFunc);
	noise->setPosition(Vec2(textureWidth / 2, textureHeight / 2));
	noise->visit();

	// 4: Call CCRenderTexture:end
	rt->end();

	// 5: Create a new Sprite from the texture
	return Sprite::createWithTexture(rt->getSprite()->getTexture());
}
Esempio n. 2
0
Sprite* Utils::maskedSpriteWithSprite(Sprite* textureSprite, Sprite* maskSprite)
{
    // 1
    RenderTexture * rt = RenderTexture::create( maskSprite->getContentSize().width,
                                               maskSprite->getContentSize().height );
    
    // 2
    maskSprite->setPosition(maskSprite->getContentSize().width/2,
                            maskSprite->getContentSize().height/2);
    textureSprite->setPosition(textureSprite->getContentSize().width/2,
                               textureSprite->getContentSize().height/2);
    
    // 3
    maskSprite->setBlendFunc( BlendFunc{GL_ONE, GL_ZERO} );
    textureSprite->setBlendFunc( BlendFunc{GL_DST_ALPHA, GL_ZERO} );
    
    // 4
    rt->begin();
    maskSprite->visit();
    textureSprite->visit();
    rt->end();
    
    // 5
    Sprite *retval = Sprite::createWithTexture(rt->getSprite()->getTexture());
    retval->setFlippedY(true);
    return retval;
}
Esempio n. 3
0
void RenderTextureImage::sceneChangeEvent(const QSceneChangePtr &e)
{
    QScenePropertyChangePtr propertyChange = qSharedPointerCast<QScenePropertyChange>(e);

    if (e->type() == NodeUpdated) {
        if (propertyChange->propertyName() == QByteArrayLiteral("layer")) {
            m_layer = propertyChange->value().toInt();
            m_dirty = true;
        } else if (propertyChange->propertyName() == QByteArrayLiteral("mipmapLevel")) {
            m_mipmapLevel = propertyChange->value().toInt();
            m_dirty = true;
        } else if (propertyChange->propertyName() == QByteArrayLiteral("cubeMapFace")) {
            m_face = static_cast<QAbstractTextureProvider::CubeMapFace>(propertyChange->value().toInt());
            m_dirty = true;
        } else if (propertyChange->propertyName() == QByteArrayLiteral("dataFunctor")) {
            m_functor = propertyChange->value().value<QTextureDataFunctorPtr>();
            m_dirty = true;
        }
    }
    if (m_dirty) {// Notify the RenderTexture that we were updated and request it to schedule an update job
        RenderTexture *txt = m_textureManager->data(m_textureProvider);
        if (txt != Q_NULLPTR)
            txt->addToPendingTextureJobs();
    }
}
Esempio n. 4
0
RenderTexture* ShowStar::visitNode(DiySaveType type, Node *node)
{
	int index = (int)type;
	SaveItemTemplate object = SaveItemTemplateTem(WJUtils::stringAddInt("Save_", index, 3).c_str());

	//定义一个自定义大小的渲染纹理
	float scale = object.scale;
	const Size &size = node->getContentSize() * scale;
	RenderTexture *renderTexture = RenderTexture::create(size.width, size.height);
	renderTexture->setAnchorPoint(Vec2(0.5f, 0.5f));
	renderTexture->ignoreAnchorPointForPosition(false);

	Vec2 ancPoint = node->getAnchorPoint();
	float scaleOld = node->getScale();
	Vec2 point = node->getPosition();

	// 按照高度的比例缩放节点到当前的尺寸
	node->setAnchorPoint(Vec2(0.5f, 0.5f));
	node->ignoreAnchorPointForPosition(false);
	node->setScale(scale);

	renderTexture->beginWithClear(0, 0, 0, 0);
	node->setPosition(Vec2(size.width / 2, size.height / 2));
	node->visit();
	renderTexture->end();
	Director::getInstance()->getRenderer()->render();

	node->setAnchorPoint(ancPoint);
	node->setPosition(point);
	node->setScale(scaleOld);

	return renderTexture;
}
   RESULT Device::Create(USINT frameWidth,
                                      USINT frameHeight,
                                      USINT framebufferNum,
                                      DeviceAdapter* deviceAdapter)
    {
        if(frameWidth<=0) return RESULT::INVALIDARG;
        if(frameHeight<=0) return RESULT::INVALIDARG;
        if(framebufferNum<=0) return RESULT::INVALIDARG;
        if(deviceAdapter==nullptr) return RESULT::INVALIDARG;

        RESULT re;
        for(INT i=0; i<framebufferNum; i++)
        {
            RenderTexture* rt = new RenderTexture();
            if(nullptr == rt) return RESULT::OUTMEMORY;

            re = rt->Create(frameWidth, frameHeight);
            if(RESULT::SUCC != re)
            {
                  RemoveFrameBuffers();
                  return re;
            }

            m_framebuffers.Add_back(rt);
        }

        m_front = m_framebuffers.Begin();
        m_pDeviceAdapter = deviceAdapter;

        return RESULT::SUCC;
    }
void FrameBufferObject::swapTextures()
{
	for(int i=0 ; i<m_textures.size() ; i++) {
		RenderTexture* tex = m_textures[i].tex;
		tex->swap();
	}
}
Esempio n. 7
0
RenderTexture* RenderTexture::create(int width, int height, GLenum depthType, GLenum wrapMode, GLenum filteringMode, bool isAutoRelease)
{
	RenderTexture* ptr = new(true) RenderTexture(width, height, depthType, wrapMode, filteringMode);
	if (isAutoRelease)
	{
		ptr->autorelease();
	}
	return ptr;
}
Esempio n. 8
0
void ClippingToRenderTextureTest::reproduceBug()
{
    auto director = Director::getInstance();
    Size visibleSize = director->getVisibleSize();
    Point origin = director->getVisibleOrigin();


    // add "HelloWorld" splash screen"
    auto sprite = Sprite::create("Images/grossini.png");

    // position the sprite on the center of the screen
    sprite->setPosition(Point(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));

    // add the sprite as a child to this layer
    this->addChild(sprite, 0);


    // container node that will contain the clippingNode
    auto container = Node::create();
    container->retain();

    auto stencil = DrawNode::create();
    Point triangle[3];
    triangle[0] = Point(-50, -50);
    triangle[1] = Point(50, -50);
    triangle[2] = Point(0, 50);
    Color4F green(0, 1, 0, 1);
    stencil->drawPolygon(triangle, 3, green, 0, green);

    auto clipper = ClippingNode::create();
    clipper->setAnchorPoint(Point(0.5, 0.5));
    clipper->setPosition( Point(visibleSize.width/2, visibleSize.height/2) );
    clipper->setStencil(stencil);
    clipper->setInverted(true);
    container->addChild(clipper, 1);


    auto img = DrawNode::create();
    triangle[0] = Point(-200, -200);
    triangle[1] = Point(200, -200);
    triangle[2] = Point(0, 200);
    Color4F red(1, 0, 0, 1);
    img->drawPolygon(triangle, 3, red, 0, red);
    clipper->addChild(img);

    // container rendered on Texture the size of the screen and because Clipping node use stencil buffer so we need to
    // create RenderTexture with depthStencil format parameter
    RenderTexture* rt = RenderTexture::create(visibleSize.width, visibleSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8);
    rt->setPosition(visibleSize.width/2, visibleSize.height/2);
    this->addChild(rt);

    rt->begin();
    container->visit();
    rt->end();
}
Esempio n. 9
0
	virtual void visit(Renderer *renderer,
		const Mat4& parentTransform, uint32_t parentFlags) override
	{
		m_renderTexture->beginWithClear(0, 0, 0, 0);
		Node::visit(renderer, parentTransform, parentFlags);
		m_renderTexture->end();

		m_renderTexture->getSprite()->setBlendFunc(m_blendFunc);
		m_renderTexture->setLocalZOrder(getLocalZOrder());
		m_renderTexture->visit(renderer, Mat4::IDENTITY, 0);
	}
Esempio n. 10
0
MapRender::~MapRender()
{
	for (size_t i = 0; i < MAX_TEX_X; i++)
	{
		for (size_t j = 0; j < MAX_TEX_Y; j++)
		{
			RenderTexture* tex = _renderTexture[i][j];
			if (tex) tex->release();
		}
	}
}
Esempio n. 11
0
	virtual bool init() override
	{
		Size size = Director::getInstance()->getVisibleSize();
		m_renderTexture = RenderTexture::create(size.width, size.height);
		if (!m_renderTexture)
			return false;
		m_renderTexture->retain();
		m_renderTexture->setKeepMatrix(true);
		m_renderTexture->setAnchorPoint(Vec2::ZERO);
		m_renderTexture->getSprite()->setAnchorPoint(Vec2::ZERO);
		return Node::init();
	}
Esempio n. 12
0
RenderTexture * RenderTexture::create(int w, int h)
{
    RenderTexture *ret = new RenderTexture();

    if(ret && ret->initWithWidthAndHeight(w, h, Texture2D::PixelFormat::RGBA8888, 0))
    {
        ret->autorelease();
        return ret;
    }
    CC_SAFE_DELETE(ret);
    return nullptr;
}
Esempio n. 13
0
void GameLayer::update(float a)
{
	positon = hero->getPosition();
	if (positon.x > mapSize.width - winSize.width / 2 - 60)
	{
		hero->setState(eNormalRight);
		isRightKeyDown = false;
	}
	mapRun(positon);
	freshScore(positon);
	if (isDead)
	{
		CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
		CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects();

		RenderTexture* renderTexture = RenderTexture::create(WINSIZE.width, WINSIZE.height);
		renderTexture->retain();
		Scene *s = Director::getInstance()->getRunningScene();
		renderTexture->begin();
		s->visit();
		renderTexture->end();
		Scene* scene = OverDialog::createScene(renderTexture, true);
		Director::getInstance()->pushScene(scene);
	}

	
	if (isRightKeyDown)
	{
		positon.x += hero->runSpeed;
	}

	if (isLeftKeyDown)
	{
		positon.x -= hero->runSpeed;
	}

	hero->upSpeed -= hero->gravity - hero->groundSurport;
	positon.y += hero->upSpeed;

	if (positon.y < 5)
	{
		isDead = true;
	}
	if (positon.y > 450)
		positon.y = 450;
	if (positon.y > mapSize.height - 48)
	{
		positon.y = mapSize.height - 48;
	}
	hero->setPosition(positon);
	collisionV();
	collisionH();
}
Esempio n. 14
0
RenderTargetPtr MultiRenderTarget::CreateTexture(const TargetParam& tp) {
	if (tp.useAsTexture) {
		RenderTexture* rt = NEX_NEW(RenderTexture());
		rt->Create(TextureBase::TEXTURE_2D, tp.format, dimensions.width,
				dimensions.height, 1);
		return Assign(rt);
	} else {
		RenderBuffer* rt = NEX_NEW(RenderBuffer());
		rt->Create(tp.format, dimensions.width, dimensions.height);
		return Assign(rt);
	}
}
Esempio n. 15
0
RenderTexture * RenderTexture::create(int w, int h, Texture2D::PixelFormat eFormat)
{
    RenderTexture *ret = new (std::nothrow) RenderTexture();

    if(ret && ret->initWithWidthAndHeight(w, h, eFormat))
    {
        ret->autorelease();
        return ret;
    }
    CC_SAFE_DELETE(ret);
    return nullptr;
}
Esempio n. 16
0
RenderTexture * RenderTexture::create(int w ,int h, Texture2D::PixelFormat eFormat, GLuint uDepthStencilFormat)
{
    RenderTexture *ret = new RenderTexture();

    if(ret && ret->initWithWidthAndHeight(w, h, eFormat, uDepthStencilFormat))
    {
        ret->autorelease();
        return ret;
    }
    CC_SAFE_DELETE(ret);
    return nullptr;
}
Esempio n. 17
0
RenderTexture * RenderTexture::create(int w, int h)
{
    RenderTexture *pRet = new RenderTexture();

    if(pRet && pRet->initWithWidthAndHeight(w, h, Texture2D::PixelFormat::RGBA8888, 0))
    {
        pRet->autorelease();
        return pRet;
    }
    CC_SAFE_DELETE(pRet);
    return NULL;
}
Sprite *HelloWorld::spriteWithColor(Color4F color, float texWidth, float texHeight)
{
    RenderTexture *rt = RenderTexture::create(texWidth, texHeight);
    rt->beginWithClear(color.r, color.g, color.b, color.a);
    
    // 3: Draw into the texture
    // You'll add this later
    
    setGLProgramState(cocos2d::GLProgramState::getOrCreateWithGLProgramName(cocos2d::GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP));
    
    _customCommand.init(_globalZOrder);
    _customCommand.func = [texWidth, texHeight, this]() {
        float gradientAlpha = 0.7f;
        Vec2 vertices[4];
        Color4F colors[4];
        int nVertices = 0;
        
        vertices[nVertices] = Vec2 {0, 0};
        colors[nVertices++] = Color4F {0, 0, 0, 0 };
        vertices[nVertices] = Vec2 {texWidth, 0};
        colors[nVertices++] = Color4F {0, 0, 0, 0};
        vertices[nVertices] = Vec2 {0, texHeight};
        colors[nVertices++] = Color4F {0, 0, 0, gradientAlpha};
        vertices[nVertices] = Vec2 {texWidth, texHeight};
        colors[nVertices++] = Color4F {0, 0, 0, gradientAlpha};
        
        getGLProgram()->use();
        getGLProgram()->setUniformsForBuiltins();
        
        cocos2d::GL::enableVertexAttribs(cocos2d::GL::VERTEX_ATTRIB_FLAG_POSITION | cocos2d::GL::VERTEX_ATTRIB_FLAG_COLOR);
        
        glBindBuffer(GL_ARRAY_BUFFER, 0);
        glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_POSITION, 2, GL_FLOAT, GL_FALSE, 0, vertices);
        glVertexAttribPointer(cocos2d::GLProgram::VERTEX_ATTRIB_COLOR, 4, GL_FLOAT, GL_FALSE, 0, colors);
//        glBlendFunc(CC_BLEND_SRC, CC_BLEND_DST);
        cocos2d::GL::blendFunc(CC_BLEND_SRC, CC_BLEND_DST);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, (GLsizei)nVertices);

    };
    
    auto renderer = Director::getInstance()->getRenderer();
    renderer->addCommand(&_customCommand);
    
    Sprite *noise = Sprite::create("Noise-iphone5hd.png");
    noise->setBlendFunc(BlendFunc {GL_DST_COLOR, GL_ZERO});
    noise->setPosition(texWidth/2, texHeight/2);
    noise->visit();
    
    rt->end();
    
    return Sprite::createWithTexture(rt->getSprite()->getTexture());
}
Esempio n. 19
0
int main(int argc, char* argv[])
{
	// Get device singleton instance.
	auto device = RenderDevice::getInstance();
	
	device->init();
	
	device->setQuitOnStart(true);
	
	Text text(20.0f);
	
	text.setPosition(0, 0);
	text.setColor(Color::White);
	text.setString("Hello Text");
	
	// Create the render texture, make it 100x100
	RenderTexture renderTexture;
	renderTexture.create(100, 100);
	// Start drawing on the texture
	renderTexture.startFrame();
	// Draw the text
	text.draw();
	// End drawing to the texture
	renderTexture.endFrame();
	
	// Save the render texture to a file
	renderTexture.save("out.png");
	
	// Main loop
	while(device->isRunning())
	{
		device->setTargetScreen(Screen::Top);
		device->clear(Color::Black);
		device->startFrame();
		// Draw the text
		text.draw();
		device->endFrame();
		
		device->setTargetScreen(Screen::Bottom);
		device->clear(Color::Black);
		device->startFrame();
		device->endFrame();
		
		device->swapBuffers();
	}
	
	// DON'T FORGET TO CALL THIS OR THE 3DS WILL CRASH AT EXIT
	device->destroy();
	
	return 0;
}
Esempio n. 20
0
bool ScribbleTouchNode::useTarget(Sprite* sprite){

    
    RenderTexture* rt = RenderTexture::create(sprite->getContentSize().width, sprite->getContentSize().height);
    rt->begin();
    
    sprite->visit();
    
    rt->end();
    Director::getInstance()->getRenderer()->render();
    auto image = rt->newImage();
    restorePixes = calcute(image);
    return ScribbleNode::useTarget(sprite);
}
Esempio n. 21
0
CCMask* createMasked(Sprite* mask, Color3B color) {
    auto size = mask->getContentSize();
    RenderTexture* pRenderTexture = RenderTexture::create(size.width, size.height);
    auto r = color.r / 255.0f;
    auto g = color.g / 255.0f;
    auto b = color.b / 255.0f;
    pRenderTexture->beginWithClear(r, g, b, 1);
    pRenderTexture->end();
    
    auto sprite = Sprite::createWithTexture(pRenderTexture->getSprite()->getTexture());
    sprite->setPosition(Point(mask->getContentSize().width/2, mask->getContentSize().height/2));
    
    CCMask* masked = CCMask::create(mask , sprite);
    return masked;
}
Esempio n. 22
0
void EndlessScene::pauseCallback(Ref* pSender)
{
	//遍历当前类的所有子节点信息,画入renderTexture中。  
	//这里类似截图。  
	Size visibleSize = Director::getInstance()->getVisibleSize();
	RenderTexture *renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height + 30);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto scene = EndlessPauseScene::createScene(renderTexture, m_player->totalMoneyNum());
	Director::sharedDirector()->pushScene(scene);

	AudioControl::stopBGMusic();
}
Esempio n. 23
0
void StartScene::toHelp(){
	auto director = Director::getInstance();
	RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto scene = pausePopup::createScene(renderTexture, "images/popupBg1.png");
	auto layer = pausePopup::create(renderTexture, "images/popupBg1.png");
	scene->addChild(layer, 1);

	layer->contentText = Label::createWithTTF("游戏介绍", "fonts/msyhbd.ttc", 20);
	layer->contentText->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 20 * 18);
	layer->menuSprite->addChild(layer->contentText);

	std::string str = "这是一款横版过关类游戏\n";
	str = str + "在游戏中你可以使用各种酷炫的技能消灭敌人,\n拾取强化道具,\n最后干掉boss,通过关卡!\n";
	str = str + "基本操作:\nW:跳\nD:前进(向右)\nA:后退(向左)\n点击右侧技能栏选择攻击技能\n";
	str = str + "点击屏幕进行攻击\n现在就开始你的战斗之旅吧!\n";

	auto infoLabel = Label::createWithTTF(str, "fonts/msyhbd.ttc", 20);
	infoLabel->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 20 * 19-infoLabel->getContentSize().width/2);
	layer->menuSprite->addChild(infoLabel);

	auto backLabel = Label::createWithTTF("返回游戏", "fonts/msyhbd.ttc", 15);
	backLabel->setColor(Color3B::BLACK);
	auto backItem = MenuItemLabel::create(backLabel, CC_CALLBACK_0(pausePopup::backToGame, layer));
	backItem->setPosition(backItem->getContentSize().width * 3 / 2, 0);

	layer->menu = Menu::create(backItem, NULL);

	layer->menu->setPosition(layer->menuSprite->getContentSize().width / 2, layer->menuSprite->getContentSize().height / 12);
	layer->menuSprite->addChild(layer->menu, 10);


	//auto popupScene = Popup::createScene(renderTexture,"images/popupBg.png");
	//auto popup = Popup::create("images/popupBg.png");
	//this->addChild(popup, 10);
	//Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f),
	//								ScaleTo::create(0.06f, 1.05f),
	//								ScaleTo::create(0.08f, 0.95f),
	//								ScaleTo::create(0.08f, 1.0f), NULL);
	//popup->runAction(popupAction);
	//Director::getInstance()->pause();
	director->pushScene(scene);
	//Director::getInstance()->replaceScene(popupScene);
}
Esempio n. 24
0
void GameLayer::gameOver()
{
	Size visibleSize = Director::getInstance()->getWinSize();
	RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height, Texture2D::PixelFormat::RGBA8888, GL_DEPTH24_STENCIL8);
	// Go through all child of Game class and draw in renderTexture
	// It's like screenshot
	renderTexture->begin();
	Director::getInstance()->getRunningScene()->visit();
	renderTexture->end();

	Director::getInstance()->getRenderer()->render();// Must add this for version 3.0 or image goes black  
	Director::getInstance()->getTextureCache()->addImage(renderTexture->newImage(), "GameOverImage");

	// pause the game, push to scene stack and change to new scene
	// Don't forget to pop it
	Director::getInstance()->pushScene(GameOverScene::create());
}
Esempio n. 25
0
void BasicLevelLayer::lose()
{
	//Node::pause();
	auto director = Director::getInstance();

	//创建CCRenderTexture,纹理画布大小为窗口大小(1136, 640)
	RenderTexture *renderTexture = RenderTexture::create(1136, 640);

	//遍历Game类的所有子节点信息,画入renderTexture中。
	//这里类似截图。
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	//将游戏界面暂停,压入场景堆栈。并切换到GamePause界面
	director->pushScene(LoseLayer::createScene(renderTexture));
}
Esempio n. 26
0
void StartScene::toHelp(){
	auto director = Director::getInstance();
	RenderTexture* renderTexture = RenderTexture::create(visibleSize.width, visibleSize.height);
	renderTexture->begin();
	this->getParent()->visit();
	renderTexture->end();

	auto popup = Popup::createScene(renderTexture,"images/popupBg.png");
	//this->addChild(popup, 10);
	//Action* popupAction = Sequence::create(ScaleTo::create(0.0f, 0.0f),
	//	ScaleTo::create(0.06f, 1.05f),
	//	ScaleTo::create(0.08f, 0.95f),
	//	ScaleTo::create(0.08f, 1.0f), NULL);
	//popup->runAction(popupAction);
	director->pushScene(popup);
	auto str = String::create("±³¾°½éÉÜ£¬ÓÎÏ·²Ù×÷½éÉÜ");
	//popup->setContentText(str);
}
Esempio n. 27
0
void GameLayer::pauseCallback(Ref* node)
{
	isRightKeyDown = false;
	isLeftKeyDown = false;
	isSpaceKeyDown = false;
	hero->setState(eNormalRight);

	CocosDenshion::SimpleAudioEngine::sharedEngine()->stopAllEffects();
	CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
	RenderTexture* renderTexture = RenderTexture::create(WINSIZE.width, WINSIZE.height);
	renderTexture->retain();
	Scene *s = Director::sharedDirector()->getRunningScene();
	renderTexture->begin();
	s->visit();
	renderTexture->end();
	Scene* pause = PauseDialog::createScene(renderTexture, true);
	Director::getInstance()->pushScene(pause);
}
Esempio n. 28
0
bool MapRender::initRenderTexture()
{
	// create a render texture, this is what we are going to draw into
	int perWidth = WIDTH / MAX_TEX_X;
	int perHeight = HEIGHT / MAX_TEX_Y;
	for (size_t i = 0; i < MAX_TEX_X; i++)
	{
		for (size_t j = 0; j < MAX_TEX_Y; j++)
		{
			RenderTexture* renderTexture = RenderTexture::create(perWidth, perHeight, Texture2D::PixelFormat::RGBA8888);
			renderTexture->retain();
			renderTexture->setPosition(cocos2d::Vec2(perWidth / 2 + i * perWidth, perHeight / 2 + j * perHeight));

			this->addChild(renderTexture);
			_renderTexture[i][j] = renderTexture;
		}
	}
	return true;
}
Esempio n. 29
0
bool MapRender::doRenderTexture(maps::Map* mapa, const std::string& fileImage)
{
	vector<maps::Center *> centers = mapa->GetCenters();
	int perWidth = WIDTH / MAX_TEX_X;
	int perHeight = HEIGHT / MAX_TEX_Y;

	vector<maps::Center *> unitCenters[MAX_TEX_X][MAX_TEX_Y];
	vector<maps::Center *>::iterator center_iter = centers.begin();
	for (; center_iter != centers.end(); center_iter++)
	{
		int x = (*center_iter)->getRow() * maps::TILE_SIZE / perWidth;
		int y = (*center_iter)->getCol() * maps::TILE_SIZE / perHeight;
		unitCenters[x][y].push_back(*center_iter);
	}

	for (size_t i = 0; i < MAX_TEX_X; i++)
	{
		for (size_t j = 0; j < MAX_TEX_Y; j++)
		{
			RenderTexture* render = _renderTexture[i][j];
			// begin drawing to the render texture
			render->begin();

			vector<maps::Center *> curCenters = unitCenters[i][j];
			center_iter = curCenters.begin();
			for (; center_iter != curCenters.end(); center_iter++)
			{
				Sprite* tile = Sprite::create(fileImage, TERRAIN_TEXTURE[(int)(*center_iter)->getTerrain()]);

				tile->setPosition(cocos2d::Vec2((*center_iter)->getPosition().x - i * perWidth, (*center_iter)->getPosition().y - j * perHeight));
				tile->setAnchorPoint(cocos2d::Vec2::ZERO);

				tile->visit();
			}


			// finish drawing and return context back to the screen
			render->end();
		}
	}

	return true;
}
Esempio n. 30
0
void RenderTextureImage::updateFromPeer(QNode *peer)
{
    QAbstractTextureImage *textureImage = static_cast<QAbstractTextureImage *>(peer);
    m_layer = textureImage->layer();
    m_mipmapLevel = textureImage->mipmapLevel();
    m_face = textureImage->cubeMapFace();
    m_functor = textureImage->dataFunctor();
    // Notify the RenderTexture that we are one of its TextureImage
    if (!peer->parentNode()) {
        qWarning() << "Not QAbstractTextureProvider parent found";
    } else {
        m_textureProviderId = peer->parentNode()->id();
        m_textureProvider = m_textureManager->lookupHandle(m_textureProviderId);
        RenderTexture *txt = m_textureManager->data(m_textureProvider);
        // Notify the RenderTexture that it has a new RenderTextureImage and needs an update
        txt->addTextureImageData(m_textureImageManager->lookupHandle(peerUuid()));
        if (txt != Q_NULLPTR)
            txt->addToPendingTextureJobs();
    }
}