2013-04-05 17:13:46 +08:00
|
|
|
-- Test #1 by Jason Booth (slipster216)
|
|
|
|
-- Test #3 by David Deaco (ddeaco)
|
|
|
|
|
|
|
|
--/**
|
|
|
|
-- * Impelmentation of RenderTextureSave
|
|
|
|
--*/
|
|
|
|
local function RenderTextureSave()
|
|
|
|
local ret = createTestLayer("Touch the screen",
|
|
|
|
"Press 'Save Image' to create an snapshot of the render texture")
|
2013-08-20 13:44:37 +08:00
|
|
|
local s = cc.Director:getInstance():getWinSize()
|
2013-04-05 17:13:46 +08:00
|
|
|
local m_pTarget = nil
|
|
|
|
local m_pBrush = nil
|
|
|
|
local m_pTarget = nil
|
|
|
|
local counter = 0
|
|
|
|
local function clearImage(tag, pSender)
|
|
|
|
m_pTarget:clear(math.random(), math.random(), math.random(), math.random())
|
|
|
|
end
|
|
|
|
|
|
|
|
local function saveImage(tag, pSender)
|
|
|
|
local png = string.format("image-%d.png", counter)
|
|
|
|
local jpg = string.format("image-%d.jpg", counter)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
m_pTarget:saveToFile(png, cc.IMAGE_FORMAT_PNG)
|
|
|
|
m_pTarget:saveToFile(jpg, cc.IMAGE_FORMAT_JPEG)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
local pImage = m_pTarget:newImage()
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
local tex = cc.TextureCache:getInstance():addUIImage(pImage, png)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
pImage:release()
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
local sprite = cc.Sprite:createWithTexture(tex)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
sprite:setScale(0.3)
|
|
|
|
ret:addChild(sprite)
|
2013-08-20 13:44:37 +08:00
|
|
|
sprite:setPosition(cc.p(40, 40))
|
2013-04-05 17:13:46 +08:00
|
|
|
sprite:setRotation(counter * 3)
|
|
|
|
|
|
|
|
cclog("Image saved %s and %s", png, jpg)
|
|
|
|
counter = counter + 1
|
|
|
|
end
|
|
|
|
|
|
|
|
local function onNodeEvent(event)
|
|
|
|
if event == "exit" then
|
|
|
|
m_pBrush:release()
|
|
|
|
m_pTarget:release()
|
2013-08-20 13:44:37 +08:00
|
|
|
cc.TextureCache:getInstance():removeUnusedTextures()
|
2013-04-05 17:13:46 +08:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
ret:registerScriptHandler(onNodeEvent)
|
|
|
|
|
|
|
|
-- create a render texture, this is what we are going to draw into
|
2013-08-20 13:44:37 +08:00
|
|
|
m_pTarget = cc.RenderTexture:create(s.width, s.height, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888)
|
2013-04-05 17:13:46 +08:00
|
|
|
m_pTarget:retain()
|
2013-08-20 13:44:37 +08:00
|
|
|
m_pTarget:setPosition(cc.p(s.width / 2, s.height / 2))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- note that the render texture is a cc.Node, and contains a sprite of its texture for convience,
|
|
|
|
-- so we can just parent it to the scene like any other cc.Node
|
2013-04-05 17:13:46 +08:00
|
|
|
ret:addChild(m_pTarget, -1)
|
|
|
|
|
|
|
|
-- create a brush image to draw into the texture with
|
2013-08-20 13:44:37 +08:00
|
|
|
m_pBrush = cc.Sprite:create("Images/fire.png")
|
2013-04-05 17:13:46 +08:00
|
|
|
m_pBrush:retain()
|
2013-08-20 13:44:37 +08:00
|
|
|
m_pBrush:setColor(cc.c3b(255, 0, 0))
|
2013-04-05 17:13:46 +08:00
|
|
|
m_pBrush:setOpacity(20)
|
|
|
|
|
|
|
|
|
|
|
|
local prev = {x = 0, y = 0}
|
|
|
|
local function onTouchEvent(eventType, x, y)
|
|
|
|
if eventType == "began" then
|
|
|
|
prev.x = x
|
|
|
|
prev.y = y
|
|
|
|
return true
|
|
|
|
elseif eventType == "moved" then
|
|
|
|
local diffX = x - prev.x
|
|
|
|
local diffY = y - prev.y
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
local startP = cc.p(x, y)
|
|
|
|
local endP = cc.p(prev.x, prev.y)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- begin drawing to the render texture
|
|
|
|
m_pTarget:begin()
|
|
|
|
|
|
|
|
-- for extra points, we'll draw this smoothly from the last position and vary the sprite's
|
|
|
|
-- scale/rotation/offset
|
2013-08-20 13:44:37 +08:00
|
|
|
local distance = cc.pGetDistance(startP, endP)
|
2013-04-05 17:13:46 +08:00
|
|
|
if distance > 1 then
|
|
|
|
local d = distance
|
|
|
|
local i = 0
|
|
|
|
for i = 0, d-1 do
|
|
|
|
local difx = endP.x - startP.x
|
|
|
|
local dify = endP.y - startP.y
|
|
|
|
local delta = i / distance
|
2013-08-20 13:44:37 +08:00
|
|
|
m_pBrush:setPosition(cc.p(startP.x + (difx * delta), startP.y + (dify * delta)))
|
2013-04-05 17:13:46 +08:00
|
|
|
m_pBrush:setRotation(math.random(0, 359))
|
|
|
|
local r = math.random(0, 49) / 50.0 + 0.25
|
|
|
|
m_pBrush:setScale(r)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- Use cc.RANDOM_0_1() will cause error when loading libtests.so on android, I don't know why.
|
|
|
|
m_pBrush:setColor(cc.c3b(math.random(0, 126) + 128, 255, 255))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- Call visit to draw the brush, don't call draw..
|
|
|
|
m_pBrush:visit()
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
-- finish drawing and return context back to the screen
|
|
|
|
m_pTarget:endToLua()
|
|
|
|
end
|
|
|
|
|
|
|
|
prev.x = x
|
|
|
|
prev.y = y
|
|
|
|
end
|
|
|
|
|
|
|
|
ret:setTouchEnabled(true)
|
|
|
|
ret:registerScriptTouchHandler(onTouchEvent)
|
|
|
|
-- Save Image menu
|
2013-08-20 13:44:37 +08:00
|
|
|
cc.MenuItemFont:setFontSize(16)
|
|
|
|
local item1 = cc.MenuItemFont:create("Save Image")
|
2013-04-05 17:13:46 +08:00
|
|
|
item1:registerScriptTapHandler(saveImage)
|
2013-08-20 13:44:37 +08:00
|
|
|
local item2 = cc.MenuItemFont:create("Clear")
|
2013-04-05 17:13:46 +08:00
|
|
|
item2:registerScriptTapHandler(clearImage)
|
2013-08-20 13:44:37 +08:00
|
|
|
local menu = cc.Menu:create(item1, item2)
|
2013-04-05 17:13:46 +08:00
|
|
|
ret:addChild(menu)
|
|
|
|
menu:alignItemsVertically()
|
2013-08-20 13:44:37 +08:00
|
|
|
menu:setPosition(cc.p(VisibleRect:rightTop().x - 80, VisibleRect:rightTop().y - 30))
|
2013-04-05 17:13:46 +08:00
|
|
|
return ret
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--/**
|
|
|
|
-- * Impelmentation of RenderTextureIssue937
|
|
|
|
--*/
|
|
|
|
|
|
|
|
-- local function RenderTextureIssue937()
|
|
|
|
|
|
|
|
-- /*
|
|
|
|
-- * 1 2
|
|
|
|
-- * A: A1 A2
|
|
|
|
-- *
|
|
|
|
-- * B: B1 B2
|
|
|
|
-- *
|
|
|
|
-- * A1: premulti sprite
|
|
|
|
-- * A2: premulti render
|
|
|
|
-- *
|
|
|
|
-- * B1: non-premulti sprite
|
|
|
|
-- * B2: non-premulti render
|
|
|
|
-- */
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local background = cc.LayerColor:create(cc.c4b(200,200,200,255))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- addChild(background)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local spr_premulti = cc.Sprite:create("Images/fire.png")
|
|
|
|
-- spr_premulti:setPosition(cc.p(16,48))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local spr_nonpremulti = cc.Sprite:create("Images/fire.png")
|
|
|
|
-- spr_nonpremulti:setPosition(cc.p(16,16))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-- /* A2 & B2 setup */
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local rend = cc.RenderTexture:create(32, 64, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- if (NULL == rend)
|
|
|
|
|
|
|
|
-- return
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- -- It's possible to modify the RenderTexture blending function by
|
2013-07-05 16:49:22 +08:00
|
|
|
-- -- [[rend sprite] setBlendFunc:(BlendFunc) GL_ONE, GL_ONE_MINUS_SRC_ALPHAend]
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- rend:begin()
|
|
|
|
-- spr_premulti:visit()
|
|
|
|
-- spr_nonpremulti:visit()
|
|
|
|
-- rend:end()
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local s = cc.Director:getInstance():getWinSize()
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- --/* A1: setup */
|
2013-08-20 13:44:37 +08:00
|
|
|
-- spr_premulti:setPosition(cc.p(s.width/2-16, s.height/2+16))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- --/* B1: setup */
|
2013-08-20 13:44:37 +08:00
|
|
|
-- spr_nonpremulti:setPosition(cc.p(s.width/2-16, s.height/2-16))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- rend:setPosition(cc.p(s.width/2+16, s.height/2))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- addChild(spr_nonpremulti)
|
|
|
|
-- addChild(spr_premulti)
|
|
|
|
-- addChild(rend)
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function title()
|
|
|
|
|
|
|
|
-- return "Testing issue #937"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function subtitle()
|
|
|
|
|
|
|
|
-- return "All images should be equal..."
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function runThisTest()
|
|
|
|
|
|
|
|
-- local pLayer = nextTestCase()
|
|
|
|
-- addChild(pLayer)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc.Director:getInstance():replaceScene(this)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
|
|
|
|
-- --/**
|
|
|
|
-- -- * Impelmentation of RenderTextureZbuffer
|
|
|
|
-- --*/
|
|
|
|
|
|
|
|
-- local function RenderTextureZbuffer()
|
|
|
|
|
|
|
|
-- this:setTouchEnabled(true)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local size = cc.Director:getInstance():getWinSize()
|
|
|
|
-- local label = cc.LabelTTF:create("vertexZ = 50", "Marker Felt", 64)
|
|
|
|
-- label:setPosition(cc.p(size.width / 2, size.height * 0.25))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- this:addChild(label)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local label2 = cc.LabelTTF:create("vertexZ = 0", "Marker Felt", 64)
|
|
|
|
-- label2:setPosition(cc.p(size.width / 2, size.height * 0.5))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- this:addChild(label2)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local label3 = cc.LabelTTF:create("vertexZ = -50", "Marker Felt", 64)
|
|
|
|
-- label3:setPosition(cc.p(size.width / 2, size.height * 0.75))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- this:addChild(label3)
|
|
|
|
|
|
|
|
-- label:setVertexZ(50)
|
|
|
|
-- label2:setVertexZ(0)
|
|
|
|
-- label3:setVertexZ(-50)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc.SpriteFrameCache:getInstance():addSpriteFramesWithFile("Images/bugs/circle.plist")
|
|
|
|
-- mgr = cc.SpriteBatchNode:create("Images/bugs/circle.png", 9)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- this:addChild(mgr)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sp1 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp2 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp3 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp4 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp5 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp6 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp7 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp8 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
|
|
|
-- sp9 = cc.Sprite:createWithSpriteFrameName("circle.png")
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- mgr:addChild(sp1, 9)
|
|
|
|
-- mgr:addChild(sp2, 8)
|
|
|
|
-- mgr:addChild(sp3, 7)
|
|
|
|
-- mgr:addChild(sp4, 6)
|
|
|
|
-- mgr:addChild(sp5, 5)
|
|
|
|
-- mgr:addChild(sp6, 4)
|
|
|
|
-- mgr:addChild(sp7, 3)
|
|
|
|
-- mgr:addChild(sp8, 2)
|
|
|
|
-- mgr:addChild(sp9, 1)
|
|
|
|
|
|
|
|
-- sp1:setVertexZ(400)
|
|
|
|
-- sp2:setVertexZ(300)
|
|
|
|
-- sp3:setVertexZ(200)
|
|
|
|
-- sp4:setVertexZ(100)
|
|
|
|
-- sp5:setVertexZ(0)
|
|
|
|
-- sp6:setVertexZ(-100)
|
|
|
|
-- sp7:setVertexZ(-200)
|
|
|
|
-- sp8:setVertexZ(-300)
|
|
|
|
-- sp9:setVertexZ(-400)
|
|
|
|
|
|
|
|
-- sp9:setScale(2)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sp9:setColor(cc.c3b::YELLOW)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function title()
|
|
|
|
|
|
|
|
-- return "Testing Z Buffer in Render Texture"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function subtitle()
|
|
|
|
|
|
|
|
-- return "Touch screen. It should be green"
|
|
|
|
-- end
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function ccTouchesBegan(cocos2d:cc.Set *touches, cocos2d:cc.Event *event)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc.SetIterator iter
|
|
|
|
-- cc.Touch *touch
|
2013-04-05 17:13:46 +08:00
|
|
|
-- for (iter = touches:begin() iter != touches:end() ++iter)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- touch = (cc.Touch *)(*iter)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- local location = touch:getLocation()
|
|
|
|
|
|
|
|
-- sp1:setPosition(location)
|
|
|
|
-- sp2:setPosition(location)
|
|
|
|
-- sp3:setPosition(location)
|
|
|
|
-- sp4:setPosition(location)
|
|
|
|
-- sp5:setPosition(location)
|
|
|
|
-- sp6:setPosition(location)
|
|
|
|
-- sp7:setPosition(location)
|
|
|
|
-- sp8:setPosition(location)
|
|
|
|
-- sp9:setPosition(location)
|
|
|
|
-- end
|
|
|
|
-- end
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function ccTouchesMoved(cc.Set* touches, cc.Event* event)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc.SetIterator iter
|
|
|
|
-- cc.Touch *touch
|
2013-04-05 17:13:46 +08:00
|
|
|
-- for (iter = touches:begin() iter != touches:end() ++iter)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- touch = (cc.Touch *)(*iter)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- local location = touch:getLocation()
|
|
|
|
|
|
|
|
-- sp1:setPosition(location)
|
|
|
|
-- sp2:setPosition(location)
|
|
|
|
-- sp3:setPosition(location)
|
|
|
|
-- sp4:setPosition(location)
|
|
|
|
-- sp5:setPosition(location)
|
|
|
|
-- sp6:setPosition(location)
|
|
|
|
-- sp7:setPosition(location)
|
|
|
|
-- sp8:setPosition(location)
|
|
|
|
-- sp9:setPosition(location)
|
|
|
|
-- end
|
|
|
|
-- end
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function ccTouchesEnded(cc.Set* touches, cc.Event* event)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- this:renderScreenShot()
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function renderScreenShot()
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local texture = cc.RenderTexture:create(512, 512)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- if (NULL == texture)
|
|
|
|
|
|
|
|
-- return
|
|
|
|
-- end
|
2013-08-20 13:44:37 +08:00
|
|
|
-- texture:setAnchorPoint(cc.p(0, 0))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- texture:begin()
|
|
|
|
|
|
|
|
-- this:visit()
|
|
|
|
|
|
|
|
-- texture:end()
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local sprite = cc.Sprite:createWithTexture(texture:getSprite():getTexture())
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite:setPosition(cc.p(256, 256))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- sprite:setOpacity(182)
|
|
|
|
-- sprite:setFlipY(1)
|
|
|
|
-- this:addChild(sprite, 999999)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite:setColor(cc.c3b::GREEN)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite:runAction(cc.Sequence:create(cc.FadeTo:create(2, 0),
|
|
|
|
-- cc.Hide:create(),
|
2013-04-05 17:13:46 +08:00
|
|
|
-- NULL))
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- -- RenderTextureTestDepthStencil
|
|
|
|
|
|
|
|
-- local function RenderTextureTestDepthStencil()
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local s = cc.Director:getInstance():getWinSize()
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local sprite = cc.Sprite:create("Images/fire.png")
|
|
|
|
-- sprite:setPosition(cc.p(s.width * 0.25, 0))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- sprite:setScale(10)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local rend = cc.RenderTexture:create(s.width, s.height, kcc.Texture2DPixelFormat_RGBA4444, GL_DEPTH24_STENCIL8)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- glStencilMask(0xFF)
|
|
|
|
-- rend:beginWithClear(0, 0, 0, 0, 0, 0)
|
|
|
|
|
|
|
|
-- --! mark sprite quad into stencil buffer
|
|
|
|
-- glEnable(GL_STENCIL_TEST)
|
|
|
|
-- glStencilFunc(GL_ALWAYS, 1, 0xFF)
|
|
|
|
-- glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE)
|
|
|
|
-- glColorMask(0, 0, 0, 1)
|
|
|
|
-- sprite:visit()
|
|
|
|
|
|
|
|
-- --! move sprite half width and height, and draw only where not marked
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite:setPosition(cc.p__add(sprite:getPosition(), cc.p__mul(cc.p(sprite:getContentSize().width * sprite:getScale(), sprite:getContentSize().height * sprite:getScale()), 0.5)))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- glStencilFunc(GL_NOTEQUAL, 1, 0xFF)
|
|
|
|
-- glColorMask(1, 1, 1, 1)
|
|
|
|
-- sprite:visit()
|
|
|
|
|
|
|
|
-- rend:end()
|
|
|
|
|
|
|
|
-- glDisable(GL_STENCIL_TEST)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- rend:setPosition(cc.p(s.width * 0.5, s.height * 0.5))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- this:addChild(rend)
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function title()
|
|
|
|
|
|
|
|
-- return "Testing depthStencil attachment"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function subtitle()
|
|
|
|
|
|
|
|
-- return "Circle should be missing 1/4 of its region"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- -- RenderTextureTest
|
|
|
|
-- local function RenderTextureTargetNode()
|
|
|
|
|
|
|
|
-- /*
|
|
|
|
-- * 1 2
|
|
|
|
-- * A: A1 A2
|
|
|
|
-- *
|
|
|
|
-- * B: B1 B2
|
|
|
|
-- *
|
|
|
|
-- * A1: premulti sprite
|
|
|
|
-- * A2: premulti render
|
|
|
|
-- *
|
|
|
|
-- * B1: non-premulti sprite
|
|
|
|
-- * B2: non-premulti render
|
|
|
|
-- */
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local background = cc.LayerColor:create(cc.c4b(40,40,40,255))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- addChild(background)
|
|
|
|
|
|
|
|
-- -- sprite 1
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite1 = cc.Sprite:create("Images/fire.png")
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- -- sprite 2
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite2 = cc.Sprite:create("Images/fire_rgba8888.pvr")
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local s = cc.Director:getInstance():getWinSize()
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- /* Create the render texture */
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local renderTexture = cc.RenderTexture:create(s.width, s.height, kcc.Texture2DPixelFormat_RGBA4444)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- this:renderTexture = renderTexture
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- renderTexture:setPosition(cc.p(s.width/2, s.height/2))
|
|
|
|
-- -- [renderTexture setPosition:cc.p(s.width, s.height)]
|
2013-04-05 17:13:46 +08:00
|
|
|
-- -- renderTexture.scale = 2
|
|
|
|
|
|
|
|
-- /* add the sprites to the render texture */
|
|
|
|
-- renderTexture:addChild(sprite1)
|
|
|
|
-- renderTexture:addChild(sprite2)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- renderTexture:setClearColor(cc.c4f(0, 0, 0, 0))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- renderTexture:setClearFlags(GL_COLOR_BUFFER_BIT)
|
|
|
|
|
|
|
|
-- /* add the render texture to the scene */
|
|
|
|
-- addChild(renderTexture)
|
|
|
|
|
|
|
|
-- renderTexture:setAutoDraw(true)
|
|
|
|
|
|
|
|
-- scheduleUpdate()
|
|
|
|
|
|
|
|
-- -- Toggle clear on / off
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local item = cc.MenuItemFont:create("Clear On/Off", this, menu_selector(RenderTextureTargetNode:touched))
|
|
|
|
-- local menu = cc.Menu:create(item, NULL)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- addChild(menu)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- menu:setPosition(cc.p(s.width/2, s.height/2))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function touched(cc.Object* sender)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- if (renderTexture:getClearFlags() == 0)
|
|
|
|
|
|
|
|
-- renderTexture:setClearFlags(GL_COLOR_BUFFER_BIT)
|
|
|
|
-- end
|
|
|
|
-- else
|
|
|
|
|
|
|
|
-- renderTexture:setClearFlags(0)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- renderTexture:setClearColor(cc.c4f( cc.RANDOM_0_1(), cc.RANDOM_0_1(), cc.RANDOM_0_1(), 1))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function update(float dt)
|
|
|
|
|
|
|
|
-- static float time = 0
|
|
|
|
-- float r = 80
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite1:setPosition(cc.p(cosf(time * 2) * r, sinf(time * 2) * r))
|
|
|
|
-- sprite2:setPosition(cc.p(sinf(time * 2) * r, cosf(time * 2) * r))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- time += dt
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function title()
|
|
|
|
|
|
|
|
-- return "Testing Render Target Node"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function subtitle()
|
|
|
|
|
|
|
|
-- return "Sprites should be equal and move with each frame"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- -- SpriteRenderTextureBug
|
|
|
|
|
|
|
|
-- local function SimpleSprite() : rt(NULL) {}
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function SimpleSprite* SpriteRenderTextureBug:SimpleSprite:create(const char* filename, const cc.rect &rect)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- SimpleSprite *sprite = new SimpleSprite()
|
|
|
|
-- if (sprite && sprite:initWithFile(filename, rect))
|
|
|
|
|
|
|
|
-- sprite:autorelease()
|
|
|
|
-- end
|
|
|
|
-- else
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc._SAFE_DELETE(sprite)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
|
|
|
|
-- return sprite
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function SimpleSprite:draw()
|
|
|
|
|
|
|
|
-- if (rt == NULL)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local s = cc.Director:getInstance():getWinSize()
|
|
|
|
-- rt = new cc.RenderTexture()
|
|
|
|
-- rt:initWithWidthAndHeight(s.width, s.height, cc.TEXTURE2_D_PIXEL_FORMAT_RGB_A8888)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
-- rt:beginWithClear(0.0, 0.0, 0.0, 1.0)
|
|
|
|
-- rt:end()
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc._NODE_DRAW_SETUP()
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-07-05 16:49:22 +08:00
|
|
|
-- BlendFunc blend = getBlendFunc()
|
2013-04-05 17:13:46 +08:00
|
|
|
-- ccGLBlendFunc(blend.src, blend.dst)
|
|
|
|
|
|
|
|
-- ccGLBindTexture2D(getTexture():getName())
|
|
|
|
|
|
|
|
-- --
|
|
|
|
-- -- Attributes
|
|
|
|
-- --
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- ccGLEnableVertexAttribs(kcc.VertexAttribFlag_PosColorTex)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- #define kQuadSize sizeof(m_sQuad.bl)
|
|
|
|
-- long offset = (long)&m_sQuad
|
|
|
|
|
|
|
|
-- -- vertex
|
2013-07-05 16:49:22 +08:00
|
|
|
-- int diff = offsetof( V3F_C4B_T2F, vertices)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- glVertexAttribPointer(kcc.VertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, kQuadSize, (void*) (offset + diff))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- -- texCoods
|
2013-07-05 16:49:22 +08:00
|
|
|
-- diff = offsetof( V3F_C4B_T2F, texCoords)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- glVertexAttribPointer(kcc.VertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, kQuadSize, (void*)(offset + diff))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- -- color
|
2013-07-05 16:49:22 +08:00
|
|
|
-- diff = offsetof( V3F_C4B_T2F, colors)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- glVertexAttribPointer(kcc.VertexAttrib_Color, 4, GL_UNSIGNED_BYTE, GL_TRUE, kQuadSize, (void*)(offset + diff))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function SpriteRenderTextureBug()
|
|
|
|
|
|
|
|
-- setTouchEnabled(true)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local s = cc.Director:getInstance():getWinSize()
|
|
|
|
-- addNewSpriteWithCoords(cc.p(s.width/2, s.height/2))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- end
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function SimpleSprite* SpriteRenderTextureBug:addNewSpriteWithCoords(const cc.p& p)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- int idx = cc.RANDOM_0_1() * 1400 / 100
|
2013-04-05 17:13:46 +08:00
|
|
|
-- int x = (idx%5) * 85
|
|
|
|
-- int y = (idx/5) * 121
|
|
|
|
|
|
|
|
-- SpriteRenderTextureBug:SimpleSprite *sprite = SpriteRenderTextureBug:SimpleSprite:create("Images/grossini_dance_atlas.png",
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc.rect(x,y,85,121))
|
2013-04-05 17:13:46 +08:00
|
|
|
-- addChild(sprite)
|
|
|
|
|
|
|
|
-- sprite:setPosition(p)
|
|
|
|
|
|
|
|
-- local action = NULL
|
2013-08-20 13:44:37 +08:00
|
|
|
-- float rd = cc.RANDOM_0_1()
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- if (rd < 0.20)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- action = cc.ScaleBy:create(3, 2)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- else if (rd < 0.40)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- action = cc.RotateBy:create(3, 360)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- else if (rd < 0.60)
|
2013-08-20 13:44:37 +08:00
|
|
|
-- action = cc.Blink:create(1, 3)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- else if (rd < 0.8 )
|
2013-08-20 13:44:37 +08:00
|
|
|
-- action = cc.TintBy:create(2, 0, -255, -255)
|
2013-04-05 17:13:46 +08:00
|
|
|
-- else
|
2013-08-20 13:44:37 +08:00
|
|
|
-- action = cc.FadeOut:create(2)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- local action_back = action:reverse()
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local seq = cc.Sequence:create(action, action_back, NULL)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- sprite:runAction(cc.RepeatForever:create(seq))
|
2013-04-05 17:13:46 +08:00
|
|
|
|
|
|
|
-- --return sprite
|
|
|
|
-- return NULL
|
|
|
|
-- end
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local function ccTouchesEnded(cc.Set* touches, cc.Event* event)
|
2013-04-05 17:13:46 +08:00
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- cc.SetIterator iter = touches:begin()
|
2013-04-05 17:13:46 +08:00
|
|
|
-- for( iter != touches:end() ++iter)
|
|
|
|
|
2013-08-20 13:44:37 +08:00
|
|
|
-- local location = ((cc.Touch*)(*iter)):getLocation()
|
2013-04-05 17:13:46 +08:00
|
|
|
-- addNewSpriteWithCoords(location)
|
|
|
|
-- end
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function title()
|
|
|
|
|
|
|
|
-- return "SpriteRenderTextureBug"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
-- local function subtitle()
|
|
|
|
|
|
|
|
-- return "Touch the screen. Sprite should appear on under the touch"
|
|
|
|
-- end
|
|
|
|
|
|
|
|
function RenderTextureTestMain()
|
|
|
|
cclog("RenderTextureTestMain")
|
|
|
|
Helper.index = 1
|
2013-08-20 13:44:37 +08:00
|
|
|
local scene = cc.Scene:create()
|
2013-04-05 17:13:46 +08:00
|
|
|
Helper.createFunctionTable = {
|
|
|
|
|
|
|
|
RenderTextureSave,
|
|
|
|
-- RenderTextureIssue937,
|
|
|
|
-- RenderTextureZbuffer,
|
|
|
|
-- RenderTextureTestDepthStencil,
|
|
|
|
-- RenderTextureTargetNode,
|
|
|
|
-- SpriteRenderTextureBug
|
|
|
|
}
|
|
|
|
scene:addChild(RenderTextureSave())
|
|
|
|
scene:addChild(CreateBackMenuItem())
|
|
|
|
return scene
|
|
|
|
end
|