private void BeforeDraw() { m_bNoDrawChildren = false; if (m_childClippingMode == CCClipMode.Bounds) { // We always clip to the bounding box var rect = new CCRect(0, 0, m_obContentSize.Width, m_obContentSize.Height); var bounds = CCAffineTransform.Transform(rect, NodeToWorldTransform()); var winSize = CCDirector.SharedDirector.WinSize; CCRect prevScissorRect; if (CCDrawManager.ScissorRectEnabled) { prevScissorRect = CCDrawManager.ScissorRect; } else { prevScissorRect = new CCRect(0, 0, winSize.Width, winSize.Height); } if (!bounds.IntersectsRect(prevScissorRect)) { m_bNoDrawChildren = true; return; } float minX = Math.Max(bounds.MinX, prevScissorRect.MinX); float minY = Math.Max(bounds.MinY, prevScissorRect.MinY); float maxX = Math.Min(bounds.MaxX, prevScissorRect.MaxX); float maxY = Math.Min(bounds.MaxY, prevScissorRect.MaxY); if (CCDrawManager.ScissorRectEnabled) { m_bRestoreScissor = true; } else { CCDrawManager.ScissorRectEnabled = true; } m_tSaveScissorRect = prevScissorRect; CCDrawManager.SetScissorInPoints(minX, minY, maxX - minX, maxY - minY); } else if (m_childClippingMode == CCClipMode.BoundsWithRenderTarget) { m_tSaveScissorRect = CCDrawManager.ScissorRect; m_bRestoreScissor = CCDrawManager.ScissorRectEnabled; CCDrawManager.ScissorRectEnabled = false; CCDrawManager.PushMatrix(); CCDrawManager.SetIdentityMatrix(); m_pRenderTexture.BeginWithClear(0, 0, 0, 0); } }
public RenderTextureTestDepthStencil() { CCSize s = CCDirector.SharedDirector.WinSize; CCSprite sprite = new CCSprite("Images/fire"); sprite.Position = new CCPoint(s.Width * 0.25f, 0); sprite.Scale = 10; CCRenderTexture rend = new CCRenderTexture((int)s.Width, (int)s.Height, SurfaceFormat.Color, DepthFormat.Depth24Stencil8, RenderTargetUsage.DiscardContents); rend.BeginWithClear(0, 0, 0, 0, 0); var save = CCDrawManager.DepthStencilState; CCDrawManager.DepthStencilState = new DepthStencilState() { ReferenceStencil = 1, DepthBufferEnable = false, StencilEnable = true, StencilFunction = CompareFunction.Always, StencilPass = StencilOperation.Replace, TwoSidedStencilMode = true, CounterClockwiseStencilFunction = CompareFunction.Always, CounterClockwiseStencilPass = StencilOperation.Replace, }; sprite.Visit(); CCDrawManager.DepthStencilState = new DepthStencilState() { DepthBufferEnable = false, StencilEnable = true, StencilFunction = CompareFunction.NotEqual, StencilPass = StencilOperation.Keep, ReferenceStencil = 1 }; // GL_SRC_ALPHA CCDrawManager.BlendFunc(new CCBlendFunc(CCOGLES.GL_ONE, CCOGLES.GL_ONE_MINUS_SRC_ALPHA)); //! move sprite half width and height, and draw only where not marked sprite.Position = sprite.Position + new CCPoint(sprite.ContentSize.Width * sprite.Scale, sprite.ContentSize.Height * sprite.Scale) * 0.5f; sprite.Visit(); CCDrawManager.DepthStencilState = save; rend.End(); rend.Position = new CCPoint(s.Width * 0.5f, s.Height * 0.5f); AddChild(rend); }
public void NeedsLayout() { m_pOnSprite.Position = new CCPoint(m_pOnSprite.ContentSize.Width / 2 + m_fSliderXPosition, m_pOnSprite.ContentSize.Height / 2); m_pOffSprite.Position = new CCPoint(m_pOnSprite.ContentSize.Width + m_pOffSprite.ContentSize.Width / 2 + m_fSliderXPosition, m_pOffSprite.ContentSize.Height / 2); m_ThumbSprite.Position = new CCPoint(m_pOnSprite.ContentSize.Width + m_fSliderXPosition, m_pMaskTexture.ContentSize.Height / 2); if (m_pOnLabel != null) { m_pOnLabel.Position = new CCPoint(m_pOnSprite.Position.X - m_ThumbSprite.ContentSize.Width / 6, m_pOnSprite.ContentSize.Height / 2); } if (m_pOffLabel != null) { m_pOffLabel.Position = new CCPoint(m_pOffSprite.Position.X + m_ThumbSprite.ContentSize.Width / 6, m_pOffSprite.ContentSize.Height / 2); } CCRenderTexture rt = new CCRenderTexture((int)m_pMaskTexture.ContentSize.Width, (int)m_pMaskTexture.ContentSize.Height, SurfaceFormat.Color, DepthFormat.None, RenderTargetUsage.DiscardContents); rt.BeginWithClear(0, 0, 0, 0); m_pOnSprite.Visit(); m_pOffSprite.Visit(); if (m_pOnLabel != null) { m_pOnLabel.Visit(); } if (m_pOffLabel != null) { m_pOffLabel.Visit(); } if (m_pMaskSprite == null) { m_pMaskSprite = new CCSprite(m_pMaskTexture); m_pMaskSprite.AnchorPoint = new CCPoint(0, 0); m_pMaskSprite.BlendFunc = new CCBlendFunc(CCOGLES.GL_ZERO, CCOGLES.GL_SRC_ALPHA); } else { m_pMaskSprite.Texture = m_pMaskTexture; } m_pMaskSprite.Visit(); rt.End(); Texture = rt.Sprite.Texture; //IsFlipY = true; }
public void NeedsLayout() { _onSprite.Position = new CCPoint(_onSprite.ContentSize.Width / 2 + _sliderXPosition, _onSprite.ContentSize.Height / 2); _offSprite.Position = new CCPoint(_onSprite.ContentSize.Width + _offSprite.ContentSize.Width / 2 + _sliderXPosition, _offSprite.ContentSize.Height / 2); _thumbSprite.Position = new CCPoint(_onSprite.ContentSize.Width + _sliderXPosition, _maskSprite.ContentSize.Height / 2); if (_onLabel != null) { _onLabel.Position = new CCPoint(_onSprite.Position.X - _thumbSprite.ContentSize.Width / 6, _onSprite.ContentSize.Height / 2); } if (_offLabel != null) { _offLabel.Position = new CCPoint(_offSprite.Position.X + _thumbSprite.ContentSize.Width / 6, _offSprite.ContentSize.Height / 2); } var rt = new CCRenderTexture( (int)_maskSprite.ContentSizeInPixels.Width, (int)_maskSprite.ContentSizeInPixels.Height, SurfaceFormat.Color, DepthFormat.None, RenderTargetUsage.DiscardContents ); rt.BeginWithClear(0, 0, 0, 0); _onSprite.Visit(); _offSprite.Visit(); if (_onLabel != null) { _onLabel.Visit(); } if (_offLabel != null) { _offLabel.Visit(); } _maskSprite.AnchorPoint = new CCPoint(0, 0); _maskSprite.BlendFunc = new CCBlendFunc(CCOGLES.GL_ZERO, CCOGLES.GL_SRC_ALPHA); _maskSprite.Visit(); rt.End(); InitWithTexture(rt.Sprite.Texture); ContentSize = _maskSprite.ContentSize; }
public void NeedsLayout() { _onSprite.Position = new CCPoint(_onSprite.ContentSize.Width / 2 + _sliderXPosition, _onSprite.ContentSize.Height / 2); _offSprite.Position = new CCPoint(_onSprite.ContentSize.Width + _offSprite.ContentSize.Width / 2 + _sliderXPosition, _offSprite.ContentSize.Height / 2); _thumbSprite.Position = new CCPoint(_onSprite.ContentSize.Width + _sliderXPosition, _maskTexture.ContentSize.Height / 2); if (_onLabel != null) { _onLabel.Position = new CCPoint(_onSprite.Position.X - _thumbSprite.ContentSize.Width / 6, _onSprite.ContentSize.Height / 2); } if (_offLabel != null) { _offLabel.Position = new CCPoint(_offSprite.Position.X + _thumbSprite.ContentSize.Width / 6, _offSprite.ContentSize.Height / 2); } CCRenderTexture rt = new CCRenderTexture((int) _maskTexture.ContentSize.Width, (int) _maskTexture.ContentSize.Height, SurfaceFormat.Color, DepthFormat.None, RenderTargetUsage.DiscardContents); rt.BeginWithClear(0, 0, 0, 0); _onSprite.Visit(); _offSprite.Visit(); if (_onLabel != null) { _onLabel.Visit(); } if (_offLabel != null) { _offLabel.Visit(); } if (_maskSprite == null) { _maskSprite = new CCSprite(_maskTexture); _maskSprite.AnchorPoint = new CCPoint(0, 0); _maskSprite.BlendFunc = new CCBlendFunc(CCOGLES.GL_ZERO, CCOGLES.GL_SRC_ALPHA); } else { _maskSprite.Texture = _maskTexture; } _maskSprite.Visit(); rt.End(); Texture = rt.Sprite.Texture; //IsFlipY = true; }
public CCTexture2D CreateCharacterTexture() { const int width = 490; const int height = 278; var centerPoint = new CCPoint(width / 2, height / 2); var characterTexture = new CCRenderTexture(width, height); characterTexture.BeginWithClear(100, 0, 0, 0); var bodySprite = CreateCustomisationSprite(); bodySprite.Position = centerPoint; bodySprite.Visit(); var armorSprite = CreateCustomisationSprite(); armorSprite.Position = centerPoint; armorSprite.Visit(); var eyesSprite = CreateCustomisationSprite(); eyesSprite.Position = centerPoint; eyesSprite.Visit(); var noseSprite = CreateCustomisationSprite(); noseSprite.Position = centerPoint; noseSprite.Visit(); var hairSprite = CreateCustomisationSprite(); hairSprite.Position = centerPoint; hairSprite.Visit(); var moustacheSprite = CreateCustomisationSprite(); moustacheSprite.Position = centerPoint; moustacheSprite.Visit(); var beardSprite = CreateCustomisationSprite(); beardSprite.Position = centerPoint; beardSprite.Visit(); var helmutSprite = CreateCustomisationSprite(); helmutSprite.Position = centerPoint; helmutSprite.Visit(); var weaponSprite = CreateCustomisationSprite(); weaponSprite.Position = centerPoint; weaponSprite.Visit(); characterTexture.End(); return characterTexture.Sprite.Texture; }