From f4f69ff41b654246981106052faf389692ac1bbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=88=91=E6=98=AFleo?= <907600065@qq.com> Date: Fri, 18 Jan 2019 19:30:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=BD=AE=E7=81=B0=E4=B8=8E?= =?UTF-8?q?=E8=BF=98=E5=8E=9Fshader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assets/Scene/helloworld.fire | 249 ++++++++++++++++-- GrayShaderDemo_1.9/assets/Script/GrayFrag.js | 17 +- .../assets/Script/GrayShader.js | 42 +-- GrayShaderDemo_1.9/assets/Texture/pengold.fnt | 25 ++ .../assets/Texture/pengold.fnt.meta | 7 + GrayShaderDemo_1.9/assets/Texture/pengold.png | Bin 0 -> 13821 bytes .../assets/Texture/pengold.png.meta | 30 +++ 7 files changed, 332 insertions(+), 38 deletions(-) create mode 100644 GrayShaderDemo_1.9/assets/Texture/pengold.fnt create mode 100644 GrayShaderDemo_1.9/assets/Texture/pengold.fnt.meta create mode 100644 GrayShaderDemo_1.9/assets/Texture/pengold.png create mode 100644 GrayShaderDemo_1.9/assets/Texture/pengold.png.meta diff --git a/GrayShaderDemo_1.9/assets/Scene/helloworld.fire b/GrayShaderDemo_1.9/assets/Scene/helloworld.fire index c5bf0b4..9e51c2a 100644 --- a/GrayShaderDemo_1.9/assets/Scene/helloworld.fire +++ b/GrayShaderDemo_1.9/assets/Scene/helloworld.fire @@ -62,14 +62,14 @@ "__id__": 6 }, { - "__id__": 9 + "__id__": 14 } ], "_tag": -1, "_active": true, "_components": [ { - "__id__": 15 + "__id__": 20 } ], "_prefab": null, @@ -218,18 +218,77 @@ }, { "__type__": "cc.Node", - "_name": "cocos", + "_name": "New Label", "_objFlags": 0, "_parent": { "__id__": 2 }, + "_children": [ + { + "__id__": 7 + }, + { + "__id__": 9 + }, + { + "__id__": 11 + } + ], + "_tag": -1, + "_active": true, + "_components": [ + { + "__id__": 13 + } + ], + "_prefab": null, + "_id": "5ffGgeX61Lxou4QAjbfGSx", + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_cascadeOpacityEnabled": true, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 110, + "height": 50 + }, + "_rotationX": 0, + "_rotationY": 0, + "_scaleX": 1, + "_scaleY": 1, + "_position": { + "__type__": "cc.Vec2", + "x": -15, + "y": -146 + }, + "_skewX": 0, + "_skewY": 0, + "_localZOrder": 0, + "_globalZOrder": 0, + "_opacityModifyRGB": false, + "groupIndex": 0 + }, + { + "__type__": "cc.Node", + "_name": "cocos", + "_objFlags": 0, + "_parent": { + "__id__": 6 + }, "_children": [], "_tag": -1, "_active": true, "_components": [ - { - "__id__": 7 - }, { "__id__": 8 } @@ -261,8 +320,8 @@ "_scaleY": 1, "_position": { "__type__": "cc.Vec2", - "x": 0, - "y": 50 + "x": 15, + "y": 196 }, "_skewX": 0, "_skewY": 0, @@ -276,7 +335,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 6 + "__id__": 7 }, "_enabled": true, "_spriteFrame": { @@ -297,6 +356,156 @@ "_dstBlendFactor": 771, "_atlas": null }, + { + "__type__": "cc.Node", + "_name": "New Label", + "_objFlags": 0, + "_parent": { + "__id__": 6 + }, + "_children": [], + "_tag": -1, + "_active": true, + "_components": [ + { + "__id__": 10 + } + ], + "_prefab": null, + "_id": "f94FJhf7VGXLQYnTdUpSgv", + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 226, + "g": 145, + "b": 145, + "a": 255 + }, + "_cascadeOpacityEnabled": true, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 98, + "height": 40 + }, + "_rotationX": 0, + "_rotationY": 0, + "_scaleX": 1, + "_scaleY": 1, + "_position": { + "__type__": "cc.Vec2", + "x": 0, + "y": 36 + }, + "_skewX": 0, + "_skewY": 0, + "_localZOrder": 0, + "_globalZOrder": 0, + "_opacityModifyRGB": false, + "groupIndex": 0 + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 9 + }, + "_enabled": true, + "_useOriginalSize": false, + "_actualFontSize": 40, + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": null, + "_isSystemFontUsed": true, + "_spacingX": 0, + "_N$string": "Label", + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 0 + }, + { + "__type__": "cc.Node", + "_name": "New Label", + "_objFlags": 0, + "_parent": { + "__id__": 6 + }, + "_children": [], + "_tag": -1, + "_active": true, + "_components": [ + { + "__id__": 12 + } + ], + "_prefab": null, + "_id": "b1aM/yecdDUbimGhq26C9w", + "_opacity": 255, + "_color": { + "__type__": "cc.Color", + "r": 255, + "g": 255, + "b": 255, + "a": 255 + }, + "_cascadeOpacityEnabled": true, + "_anchorPoint": { + "__type__": "cc.Vec2", + "x": 0.5, + "y": 0.5 + }, + "_contentSize": { + "__type__": "cc.Size", + "width": 37.5, + "height": 50 + }, + "_rotationX": 0, + "_rotationY": 0, + "_scaleX": 1, + "_scaleY": 1, + "_position": { + "__type__": "cc.Vec2", + "x": 0, + "y": -24 + }, + "_skewX": 0, + "_skewY": 0, + "_localZOrder": 0, + "_globalZOrder": 0, + "_opacityModifyRGB": false, + "groupIndex": 0 + }, + { + "__type__": "cc.Label", + "_name": "", + "_objFlags": 0, + "node": { + "__id__": 11 + }, + "_enabled": true, + "_useOriginalSize": false, + "_actualFontSize": 40, + "_fontSize": 40, + "_lineHeight": 40, + "_enableWrapText": true, + "_N$file": { + "__uuid__": "5896532f-0687-4bdc-b272-17ec1d896f52" + }, + "_isSystemFontUsed": false, + "_spacingX": 0, + "_N$string": "2", + "_N$horizontalAlign": 1, + "_N$verticalAlign": 1, + "_N$fontFamily": "Arial", + "_N$overflow": 0 + }, { "__type__": "5f0d9rVh/9LgZTLV8+W+bku", "_name": "", @@ -305,7 +514,7 @@ "__id__": 6 }, "_enabled": true, - "isAllChildrenUse": false, + "isAllChildrenUse": true, "isGray": false }, { @@ -317,17 +526,17 @@ }, "_children": [ { - "__id__": 10 + "__id__": 15 } ], "_tag": -1, "_active": true, "_components": [ { - "__id__": 12 + "__id__": 17 }, { - "__id__": 13 + "__id__": 18 } ], "_prefab": null, @@ -372,14 +581,14 @@ "_name": "Label", "_objFlags": 0, "_parent": { - "__id__": 9 + "__id__": 14 }, "_children": [], "_tag": -1, "_active": true, "_components": [ { - "__id__": 11 + "__id__": 16 } ], "_prefab": null, @@ -424,7 +633,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 10 + "__id__": 15 }, "_enabled": true, "_useOriginalSize": false, @@ -446,7 +655,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 9 + "__id__": 14 }, "_enabled": true, "_spriteFrame": { @@ -472,7 +681,7 @@ "_name": "", "_objFlags": 0, "node": { - "__id__": 9 + "__id__": 14 }, "_enabled": true, "transition": 2, @@ -494,7 +703,7 @@ "zoomScale": 1.2, "clickEvents": [ { - "__id__": 14 + "__id__": 19 } ], "_N$interactable": true, @@ -532,7 +741,7 @@ "__uuid__": "29158224-f8dd-4661-a796-1ffab537140e" }, "_N$target": { - "__id__": 9 + "__id__": 14 } }, { diff --git a/GrayShaderDemo_1.9/assets/Script/GrayFrag.js b/GrayShaderDemo_1.9/assets/Script/GrayFrag.js index d2081a9..b3676d4 100644 --- a/GrayShaderDemo_1.9/assets/Script/GrayFrag.js +++ b/GrayShaderDemo_1.9/assets/Script/GrayFrag.js @@ -26,7 +26,22 @@ const gray_frag = ` } `; + const normal_frag = ` + #ifdef GL_ES + precision mediump float; + #endif + + varying vec4 v_fragmentColor; + varying vec2 v_texCoord; + + void main(void) + { + gl_FragColor = texture2D(CC_Texture0, v_texCoord); + } + `; + module.exports = { default_vert, - gray_frag + gray_frag, + normal_frag }; \ No newline at end of file diff --git a/GrayShaderDemo_1.9/assets/Script/GrayShader.js b/GrayShaderDemo_1.9/assets/Script/GrayShader.js index b9fa806..5686104 100644 --- a/GrayShaderDemo_1.9/assets/Script/GrayShader.js +++ b/GrayShaderDemo_1.9/assets/Script/GrayShader.js @@ -35,11 +35,34 @@ cc.Class({ }, + //正常shader + normalShader(){ + let program = new cc.GLProgram(); + if (cc.sys.isNative) { + program.initWithString(Gray.default_vert, Gray.normal_frag); + program.link(); + program.updateUniforms(); + } else { + program.initWithVertexShaderByteArray(Gray.default_vert, Gray.normal_frag); + program.addAttribute(cc.macro.ATTRIBUTE_NAME_POSITION, cc.macro.VERTEX_ATTRIB_POSITION); + program.addAttribute(cc.macro.ATTRIBUTE_NAME_COLOR, cc.macro.VERTEX_ATTRIB_COLOR); + program.addAttribute(cc.macro.ATTRIBUTE_NAME_TEX_COORD, cc.macro.VERTEX_ATTRIB_TEX_COORDS); + program.link(); + program.updateUniforms(); + } + if (this.isAllChildrenUse) { + this.setProgram(this.node._sgNode, program); + } else { + this.setProgram(this.node.getComponent(cc.Sprite)._sgNode, program); + } + }, + setProgram(node, program) { if (cc.sys.isNative) { var glProgram_state = cc.GLProgramState.getOrCreateWithGLProgram(program); node.setGLProgramState(glProgram_state); } else { + node.normalProgram=node.getShaderProgram(); node.setShaderProgram(program); } @@ -52,24 +75,9 @@ cc.Class({ } }, - // 恢复默认shader - resetProgram(node) { - node.getComponent(cc.Sprite)._sgNode.setState(0); - var children = node.children; - if (!children) - return; - for (var i = 0; i < children.length; i++) { - this.resetProgram(children[i]); - } - - }, - + //恢复默认shader resetShader() { - if (this.isAllChildrenUse) { - this.resetProgram(this.node); - } else { - this.node.getComponent(cc.Sprite)._sgNode.setState(0); - } + this.normalShader(this.node); }, onEventClicked_setEffect() { diff --git a/GrayShaderDemo_1.9/assets/Texture/pengold.fnt b/GrayShaderDemo_1.9/assets/Texture/pengold.fnt new file mode 100644 index 0000000..2f79ad2 --- /dev/null +++ b/GrayShaderDemo_1.9/assets/Texture/pengold.fnt @@ -0,0 +1,25 @@ +info face="" size=32 bold=0 italic=0 charset="" unicode=0 stretchH=100 smooth=1 aa=1 padding=0,0,0,0 spacing=1,1 +common lineHeight=60 base=26 scaleW=128 scaleH=256 pages=1 packed=0 alphaChnl=1 redChnl=0 greenChnl=0 blueChnl=0 +page id=0 file="pengold.png" +chars count=19 +char id=48 x=39 y=50 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="0" +char id=49 x=70 y=50 width=22 height=49 xoffset=0 yoffset=11 xadvance=25 page=0 chnl=0 letter="1" +char id=50 x=70 y=0 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="2" +char id=51 x=64 y=100 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="3" +char id=52 x=0 y=120 width=32 height=49 xoffset=0 yoffset=11 xadvance=35 page=0 chnl=0 letter="4" +char id=53 x=33 y=120 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="5" +char id=54 x=31 y=170 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="6" +char id=55 x=62 y=170 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="7" +char id=56 x=0 y=170 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="8" +char id=57 x=39 y=0 width=30 height=49 xoffset=0 yoffset=11 xadvance=33 page=0 chnl=0 letter="9" +char id=43 x=0 y=80 width=35 height=39 xoffset=0 yoffset=15 xadvance=38 page=0 chnl=0 letter="+" +char id=45 x=27 y=220 width=21 height=16 xoffset=0 yoffset=27 xadvance=24 page=0 chnl=0 letter="-" +char id=44 x=49 y=220 width=15 height=28 xoffset=0 yoffset=43 xadvance=18 page=0 chnl=0 letter="," +char id=46 x=27 y=237 width=15 height=17 xoffset=0 yoffset=43 xadvance=18 page=0 chnl=0 letter="." +char id=65509 x=0 y=220 width=26 height=35 xoffset=0 yoffset=23 xadvance=29 page=0 chnl=0 letter="¥" +char id=20803 x=0 y=40 width=38 height=39 xoffset=0 yoffset=20 xadvance=41 page=0 chnl=0 letter="元" +char id=19975 x=0 y=0 width=38 height=39 xoffset=0 yoffset=20 xadvance=41 page=0 chnl=0 letter="万" +char id=32 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=20 page=0 chnl=0 letter=" " +char id=9 x=0 y=0 width=0 height=0 xoffset=0 yoffset=0 xadvance=160 page=0 chnl=0 letter=" " + +kernings count=0 diff --git a/GrayShaderDemo_1.9/assets/Texture/pengold.fnt.meta b/GrayShaderDemo_1.9/assets/Texture/pengold.fnt.meta new file mode 100644 index 0000000..91cd1ad --- /dev/null +++ b/GrayShaderDemo_1.9/assets/Texture/pengold.fnt.meta @@ -0,0 +1,7 @@ +{ + "ver": "2.1.0", + "uuid": "5896532f-0687-4bdc-b272-17ec1d896f52", + "textureUuid": "407e3c4d-0bba-4b8e-8ecf-0ef4d9473389", + "fontSize": 32, + "subMetas": {} +} \ No newline at end of file diff --git a/GrayShaderDemo_1.9/assets/Texture/pengold.png b/GrayShaderDemo_1.9/assets/Texture/pengold.png new file mode 100644 index 0000000000000000000000000000000000000000..79780ebeb5bda77746aaaa7082e2949b469bd42f GIT binary patch literal 13821 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 mPA)bM_B@F9y99)kTy5R#>^&<`LkY