Skip to content

Commit 67c2e7d

Browse files
authored
Merge pull request #3425 from zilongshanren/fix-uislider-gray-state
Fix uislider gray state
2 parents 9ef0b99 + ed5fdbe commit 67c2e7d

File tree

7 files changed

+54
-43
lines changed

7 files changed

+54
-43
lines changed

cocos2d/core/platform/CCMacro.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -620,6 +620,11 @@ cc.SHADER_POSITION_TEXTURECOLOR = "ShaderPositionTextureColor";
620620
* @type {String}
621621
*/
622622
cc.SHADER_SPRITE_POSITION_TEXTURECOLOR = "ShaderSpritePositionTextureColor";
623+
/**
624+
* @constant
625+
* @type {String}
626+
*/
627+
cc.SHADER_SPRITE_POSITION_TEXTURECOLOR_GRAY = "ShaderSpritePositionTextureColorGray";
623628
/**
624629
* @constant
625630
* @type {String}

cocos2d/shaders/CCShaderCache.js

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,13 @@ cc.shaderCache = /** @lends cc.shaderCache# */{
102102
* @constant
103103
* @type {Number}
104104
*/
105-
TYPE_MAX: 10,
105+
TYPE_SPRITE_POSITION_TEXTURECOLOR_GRAY: 11,
106+
/**
107+
* @public
108+
* @constant
109+
* @type {Number}
110+
*/
111+
TYPE_MAX: 11,
106112

107113
_programs: {},
108114

@@ -124,7 +130,13 @@ cc.shaderCache = /** @lends cc.shaderCache# */{
124130
program.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
125131
program.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
126132
program.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);
127-
break;
133+
break;
134+
case cc.SHADER_SPRITE_POSITION_TEXTURECOLOR_GRAY:
135+
program.initWithVertexShaderByteArray(cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_VERT, cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_GRAY_FRAG);
136+
program.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
137+
program.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
138+
program.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);
139+
break;
128140
case cc.SHADER_POSITION_TEXTURECOLORALPHATEST:
129141
program.initWithVertexShaderByteArray(cc.SHADER_POSITION_TEXTURE_COLOR_VERT, cc.SHADER_POSITION_TEXTURE_COLOR_ALPHATEST_FRAG);
130142
program.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
@@ -230,6 +242,11 @@ cc.shaderCache = /** @lends cc.shaderCache# */{
230242
program.reset();
231243
this._loadDefaultShader(program, this.TYPE_POSITION_TEXTURE);
232244

245+
//Position Texture Gray shader
246+
program = this.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_GRAY_FRAG);
247+
program.reset();
248+
this._loadDefaultShader(program, this.TYPE_SPRITE_POSITION_TEXTURECOLOR_GRAY);
249+
233250
//
234251
// Position, Texture attribs, 1 Color as uniform shader
235252
//
@@ -283,4 +300,4 @@ cc.shaderCache = /** @lends cc.shaderCache# */{
283300
addProgram: function (program, key) {
284301
this._programs[key] = program;
285302
}
286-
};
303+
};

cocos2d/shaders/CCShaders.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -262,8 +262,18 @@ cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_VERT =
262262
+ " gl_Position = CC_PMatrix * a_position; \n"
263263
+ " v_fragmentColor = a_color; \n"
264264
+ " v_texCoord = a_texCoord; \n"
265-
+ "}";
265+
+ "}";
266266

267+
cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_GRAY_FRAG =
268+
"precision lowp float;\n"
269+
+ "varying vec4 v_fragmentColor; \n"
270+
+ "varying vec2 v_texCoord; \n"
271+
+ "void main() \n"
272+
+ "{ \n"
273+
+ " vec4 c = texture2D(CC_Texture0, v_texCoord); \n"
274+
+ " gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b); \n"
275+
+" gl_FragColor.w = c.w ; \n"
276+
+ "}";
267277
//-----------------------Shader_PositionTextureColorAlphaTest_frag Shader Source----------------------------
268278
/**
269279
* @constant
@@ -301,4 +311,4 @@ cc.SHADEREX_SWITCHMASK_FRAG =
301311
+ " vec4 maskColor = texture2D(u_mask, v_texCoord); \n"
302312
+ " vec4 finalColor = vec4(texColor.r, texColor.g, texColor.b, maskColor.a * texColor.a); \n"
303313
+ " gl_FragColor = v_fragmentColor * finalColor; \n"
304-
+ "}";
314+
+ "}";

extensions/ccui/base-classes/UIScale9SpriteWebGLRenderCmd.js

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -151,39 +151,9 @@
151151
if (state === Scale9Sprite.state.NORMAL) {
152152
this._shaderProgram = cc.shaderCache.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURECOLOR);
153153
} else if (state === Scale9Sprite.state.GRAY) {
154-
this._shaderProgram = Scale9Sprite.WebGLRenderCmd._getGrayShaderProgram();
154+
this._shaderProgram = cc.shaderCache.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURECOLOR_GRAY);
155155
}
156156
};
157157

158-
Scale9Sprite.WebGLRenderCmd._grayShaderProgram = null;
159-
Scale9Sprite.WebGLRenderCmd._getGrayShaderProgram = function(){
160-
var grayShader = Scale9Sprite.WebGLRenderCmd._grayShaderProgram;
161-
if (grayShader)
162-
return grayShader;
163-
164-
grayShader = new cc.GLProgram();
165-
grayShader.initWithVertexShaderByteArray(cc.SHADER_SPRITE_POSITION_TEXTURE_COLOR_VERT,
166-
ccui.Scale9Sprite.WebGLRenderCmd._grayShaderFragment);
167-
grayShader.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
168-
grayShader.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
169-
grayShader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);
170-
grayShader.link();
171-
grayShader.updateUniforms();
172-
173-
Scale9Sprite.WebGLRenderCmd._grayShaderProgram = grayShader;
174-
return grayShader;
175-
};
176-
177-
Scale9Sprite.WebGLRenderCmd._grayShaderFragment =
178-
"precision lowp float;\n"
179-
+ "varying vec4 v_fragmentColor; \n"
180-
+ "varying vec2 v_texCoord; \n"
181-
+ "void main() \n"
182-
+ "{ \n"
183-
+ " vec4 c = texture2D(CC_Texture0, v_texCoord); \n"
184-
+ " gl_FragColor.xyz = vec3(0.2126*c.r + 0.7152*c.g + 0.0722*c.b); \n"
185-
+" gl_FragColor.w = c.w ; \n"
186-
+ "}";
187-
188158

189159
})();

extensions/ccui/base-classes/UIWidget.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,6 +1692,14 @@ ccui.Widget = ccui.ProtectedNode.extend(/** @lends ccui.Widget# */{
16921692
cc.arrayRemoveObject(this._nodes, node);
16931693
},
16941694

1695+
_getNormalGLProgram: function () {
1696+
return cc.shaderCache.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURECOLOR);
1697+
},
1698+
1699+
_getGrayGLProgram: function () {
1700+
return cc.shaderCache.programForKey(cc.SHADER_SPRITE_POSITION_TEXTURECOLOR_GRAY);
1701+
},
1702+
16951703
/**
16961704
* Removes node by tag
16971705
* @deprecated since v3.0, please use removeChildByTag instead.

extensions/ccui/uiwidgets/UIButton.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -460,9 +460,7 @@ ccui.Button = ccui.Widget.extend(/** @lends ccui.Button# */{
460460
_onPressStateChangedToNormal: function () {
461461
this._buttonScale9Renderer.setSpriteFrame(this._buttonNormalSpriteFrame);
462462

463-
if (this._scale9Enabled) {
464-
this._buttonScale9Renderer.setState( ccui.Scale9Sprite.state.NORMAL);
465-
}
463+
this._buttonScale9Renderer.setState( ccui.Scale9Sprite.state.NORMAL);
466464

467465
if (this._pressedTextureLoaded) {
468466
if (this.pressedActionEnabled){
@@ -500,9 +498,7 @@ ccui.Button = ccui.Widget.extend(/** @lends ccui.Button# */{
500498
},
501499

502500
_onPressStateChangedToPressed: function () {
503-
if (this._scale9Enabled) {
504-
this._buttonScale9Renderer.setState(ccui.Scale9Sprite.state.NORMAL);
505-
}
501+
this._buttonScale9Renderer.setState(ccui.Scale9Sprite.state.NORMAL);
506502

507503
if (this._pressedTextureLoaded) {
508504
this._buttonScale9Renderer.setSpriteFrame(this._buttonClickedSpriteFrame);
@@ -539,7 +535,7 @@ ccui.Button = ccui.Widget.extend(/** @lends ccui.Button# */{
539535
_onPressStateChangedToDisabled: function () {
540536
//if disable resource is null
541537
if (!this._disabledTextureLoaded){
542-
if (this._normalTextureLoaded && this._scale9Enabled) {
538+
if (this._normalTextureLoaded) {
543539
this._buttonScale9Renderer.setState(ccui.Scale9Sprite.state.GRAY);
544540
}
545541
}else{

extensions/ccui/uiwidgets/UISlider.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,7 @@ ccui.Slider = ccui.Widget.extend(/** @lends ccui.Slider# */{
648648
this._slidBallDisabledRenderer.setVisible(false);
649649

650650
this._slidBallNormalRenderer.setScale(this._sliderBallNormalTextureScaleX, this._sliderBallNormalTextureScaleY);
651+
this._slidBallNormalRenderer._renderCmd._shaderProgram = this._getNormalGLProgram();
651652
},
652653

653654
_onPressStateChangedToPressed: function () {
@@ -658,12 +659,16 @@ ccui.Slider = ccui.Widget.extend(/** @lends ccui.Slider# */{
658659
this._slidBallPressedRenderer.setVisible(true);
659660
this._slidBallDisabledRenderer.setVisible(false);
660661
}
662+
this._slidBallNormalRenderer._renderCmd._shaderProgram = this._getNormalGLProgram();
661663
},
662664

663665
_onPressStateChangedToDisabled: function () {
664666
if (this._slidBallDisabledTextureFile) {
665667
this._slidBallNormalRenderer.setVisible(false);
666668
this._slidBallDisabledRenderer.setVisible(true);
669+
} else {
670+
this._slidBallNormalRenderer.setVisible(true);
671+
this._slidBallNormalRenderer._renderCmd._shaderProgram = this._getGrayGLProgram();
667672
}
668673
this._slidBallNormalRenderer.setScale(this._sliderBallNormalTextureScaleX, this._sliderBallNormalTextureScaleY);
669674
this._slidBallPressedRenderer.setVisible(false);

0 commit comments

Comments
 (0)