Skip to content

Commit 76d2523

Browse files
committed
move 3d shaders to shader cache
1 parent 0631a51 commit 76d2523

File tree

13 files changed

+99
-66
lines changed

13 files changed

+99
-66
lines changed

build/cocos2d_libs.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1087,8 +1087,6 @@
10871087
3E92EA5E19215FA10094CD21 /* CCSprite3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3E92EA5519215FA10094CD21 /* CCSprite3D.cpp */; };
10881088
3E92EA5F19215FA10094CD21 /* CCSprite3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E92EA5619215FA10094CD21 /* CCSprite3D.h */; };
10891089
3E92EA6019215FA10094CD21 /* CCSprite3D.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E92EA5619215FA10094CD21 /* CCSprite3D.h */; };
1090-
3E92EA6519215FA10094CD21 /* Textured.es2.frag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E92EA5919215FA10094CD21 /* Textured.es2.frag.h */; };
1091-
3E92EA6619215FA10094CD21 /* Textured.es2.frag.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E92EA5919215FA10094CD21 /* Textured.es2.frag.h */; };
10921090
3E92EA6719215FA10094CD21 /* Textured.es2.vert.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E92EA5A19215FA10094CD21 /* Textured.es2.vert.h */; };
10931091
3E92EA6819215FA10094CD21 /* Textured.es2.vert.h in Headers */ = {isa = PBXBuildFile; fileRef = 3E92EA5A19215FA10094CD21 /* Textured.es2.vert.h */; };
10941092
3EA0FB6B191C841D00B170C8 /* UIVideoPlayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 3EA0FB69191C841D00B170C8 /* UIVideoPlayer.h */; };
@@ -2327,7 +2325,6 @@
23272325
3E92EA5419215FA10094CD21 /* Colored.es2.frag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Colored.es2.frag.h; path = ../cocos/3d/Colored.es2.frag.h; sourceTree = "<group>"; };
23282326
3E92EA5519215FA10094CD21 /* CCSprite3D.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CCSprite3D.cpp; path = ../cocos/3d/CCSprite3D.cpp; sourceTree = "<group>"; };
23292327
3E92EA5619215FA10094CD21 /* CCSprite3D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CCSprite3D.h; path = ../cocos/3d/CCSprite3D.h; sourceTree = "<group>"; };
2330-
3E92EA5919215FA10094CD21 /* Textured.es2.frag.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Textured.es2.frag.h; path = ../cocos/3d/Textured.es2.frag.h; sourceTree = "<group>"; };
23312328
3E92EA5A19215FA10094CD21 /* Textured.es2.vert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Textured.es2.vert.h; path = ../cocos/3d/Textured.es2.vert.h; sourceTree = "<group>"; };
23322329
3EA0FB69191C841D00B170C8 /* UIVideoPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UIVideoPlayer.h; sourceTree = "<group>"; };
23332330
3EA0FB6A191C841D00B170C8 /* UIVideoPlayerIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = UIVideoPlayerIOS.mm; sourceTree = "<group>"; };
@@ -2824,6 +2821,9 @@
28242821
A07A4F3B178387670073F6A7 /* libchipmunk iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libchipmunk iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
28252822
A07A4F9E1783876B0073F6A7 /* libbox2d iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libbox2d iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
28262823
A07A4FB4178387730073F6A7 /* libCocosDenshion iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libCocosDenshion iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2824+
B2507B5B19255B9400FA4972 /* ccShader_3D_Color.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_Color.frag; sourceTree = "<group>"; };
2825+
B2507B5C19255B9400FA4972 /* ccShader_3D_ColorTex.frag */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_ColorTex.frag; sourceTree = "<group>"; };
2826+
B2507B5D19255B9400FA4972 /* ccShader_3D_PositionTex.vert */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.glsl; path = ccShader_3D_PositionTex.vert; sourceTree = "<group>"; };
28272827
B2AF2F8218EBAEAE00C5807C /* MathUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MathUtil.cpp; sourceTree = "<group>"; };
28282828
B2AF2F8318EBAEAE00C5807C /* MathUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MathUtil.h; sourceTree = "<group>"; };
28292829
B2AF2F8418EBAEAE00C5807C /* MathUtil.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = MathUtil.inl; sourceTree = "<group>"; };
@@ -4072,7 +4072,6 @@
40724072
3E92EA5419215FA10094CD21 /* Colored.es2.frag.h */,
40734073
3E92EA5519215FA10094CD21 /* CCSprite3D.cpp */,
40744074
3E92EA5619215FA10094CD21 /* CCSprite3D.h */,
4075-
3E92EA5919215FA10094CD21 /* Textured.es2.frag.h */,
40764075
3E92EA5A19215FA10094CD21 /* Textured.es2.vert.h */,
40774076
3E92EA4C192130D70094CD21 /* CCSprite3DDataCache.cpp */,
40784077
3E92EA4D192130D70094CD21 /* CCSprite3DDataCache.h */,
@@ -4716,6 +4715,9 @@
47164715
5034CA5D191D591900CE6051 /* shaders */ = {
47174716
isa = PBXGroup;
47184717
children = (
4718+
B2507B5B19255B9400FA4972 /* ccShader_3D_Color.frag */,
4719+
B2507B5C19255B9400FA4972 /* ccShader_3D_ColorTex.frag */,
4720+
B2507B5D19255B9400FA4972 /* ccShader_3D_PositionTex.vert */,
47194721
5034CA60191D91CF00CE6051 /* ccShader_PositionTextureColor.vert */,
47204722
5034CA61191D91CF00CE6051 /* ccShader_PositionTextureColor.frag */,
47214723
5034CA62191D91CF00CE6051 /* ccShader_PositionTextureColor_noMVP.vert */,
@@ -5261,7 +5263,6 @@
52615263
1AD71EE7180E26E600808F54 /* spine-cocos2dx.h in Headers */,
52625264
1AD71EE9180E26E600808F54 /* spine.h in Headers */,
52635265
1AAF536C180E3374000584C8 /* HttpClient.h in Headers */,
5264-
3E92EA6519215FA10094CD21 /* Textured.es2.frag.h in Headers */,
52655266
1AAF536E180E3374000584C8 /* HttpRequest.h in Headers */,
52665267
500DC99019106300007B91BF /* CCRef.h in Headers */,
52675268
1AAF5370180E3374000584C8 /* HttpResponse.h in Headers */,
@@ -5798,7 +5799,6 @@
57985799
1A8C59CA180E930E00EF57C3 /* CCComRender.h in Headers */,
57995800
1A8C59CE180E930E00EF57C3 /* CCDataReaderHelper.h in Headers */,
58005801
1A8C59D2180E930E00EF57C3 /* CCDatas.h in Headers */,
5801-
3E92EA6619215FA10094CD21 /* Textured.es2.frag.h in Headers */,
58025802
ED9C6A9718599AD8000A5232 /* CCNodeGrid.h in Headers */,
58035803
1A8C59D6180E930E00EF57C3 /* CCDecorativeDisplay.h in Headers */,
58045804
1A01C69318F57BE800EFE3A6 /* CCDouble.h in Headers */,

cocos/3d/CCSprite3D.cpp

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@
1010
#include "2d/CCTextureCache.h"
1111
#include "renderer/CCRenderer.h"
1212
#include "renderer/CCGLProgramState.h"
13+
#include "renderer/CCGLProgramCache.h"
1314

1415
//begin include shader file
1516
#define STRINGIFY(A) #A
1617
#include "Textured.es2.vert.h"
17-
#include "Textured.es2.frag.h"
1818
#include "Colored.es2.frag.h"
1919
//end include shader file
2020

@@ -176,23 +176,31 @@ void Sprite3D::genGLProgramState()
176176

177177
GLProgram* Sprite3D::getDefGLProgram(bool textured)
178178
{
179-
static GLProgram s_defGLProgramTex;
180-
static GLProgram s_defGLProgram;
181-
if(textured && s_defGLProgramTex.getProgram() == 0)
179+
if(textured)
182180
{
183-
s_defGLProgramTex.initWithByteArrays(baseVertexShader, baseTexturedFrag);
184-
s_defGLProgramTex.link();
185-
s_defGLProgramTex.updateUniforms();
181+
return GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_3D_POSITION_TEXTURE);
186182
}
187-
188-
if(!textured && s_defGLProgram.getProgram() == 0)
183+
else
189184
{
190-
s_defGLProgram.initWithByteArrays(baseVertexShader, baseTexturedFrag);
191-
s_defGLProgram.link();
192-
s_defGLProgram.updateUniforms();
185+
return GLProgramCache::getInstance()->getGLProgram(GLProgram::SHADER_3D_POSITION);
193186
}
194-
195-
return textured ? &s_defGLProgramTex : &s_defGLProgram;
187+
// static GLProgram s_defGLProgramTex;
188+
// static GLProgram s_defGLProgram;
189+
// if(textured && s_defGLProgramTex.getProgram() == 0)
190+
// {
191+
// s_defGLProgramTex.initWithByteArrays(baseVertexShader, baseTexturedFrag);
192+
// s_defGLProgramTex.link();
193+
// s_defGLProgramTex.updateUniforms();
194+
// }
195+
//
196+
// if(!textured && s_defGLProgram.getProgram() == 0)
197+
// {
198+
// s_defGLProgram.initWithByteArrays(baseVertexShader, baseTexturedFrag);
199+
// s_defGLProgram.link();
200+
// s_defGLProgram.updateUniforms();
201+
// }
202+
//
203+
// return textured ? &s_defGLProgramTex : &s_defGLProgram;
196204
}
197205

198206

@@ -238,7 +246,6 @@ void Sprite3D::onDraw(const Matrix &transform, bool transformUpdated)
238246

239247
if (_mesh)
240248
{
241-
242249
auto programstate = getGLProgramState();
243250

244251
programstate->setUniformVec4("u_color", Vector4(color.r, color.g, color.b, color.a));

cocos/3d/CCSprite3DEffect.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
#define STRINGIFY(A) #A
1111
//#include "../Shaders/TexturedLighting.es2.vert.h"
1212
#include "Textured.es2.vert.h"
13-
#include "Textured.es2.frag.h"
1413
#include "Colored.es2.frag.h"
1514

1615

cocos/3d/Colored.es2.frag.h

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,3 @@
1-
2-
static const char* baseColoredFrag = STRINGIFY(
3-
4-
#ifdef GL_ES
5-
varying lowp vec4 DestinationColor;
6-
#else
7-
varying vec4 DestinationColor;
8-
#endif
9-
uniform vec4 u_color;
10-
11-
//varying mediump vec2 TextureCoordOut;
12-
13-
//uniform sampler2D Sampler;
14-
15-
void main(void)
16-
{
17-
//gl_FragColor = DestinationColor;
18-
//gl_FragColor.a = 1.0;
19-
gl_FragColor = u_color;
20-
}
21-
);
22-
23-
241
// pure black frag shader
252
static const char* blackFrag = STRINGIFY(
263
uniform vec3 OutLineColor;

cocos/3d/Textured.es2.vert.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,3 @@
1-
2-
static const char* baseVertexShader = STRINGIFY(
3-
4-
attribute vec4 a_position;
5-
attribute vec2 a_texCoord;
6-
7-
uniform vec3 DiffuseMaterial;
8-
uniform mat3 NormalMatrix;
9-
10-
varying vec2 TextureCoordOut;
11-
12-
void main(void)
13-
{
14-
gl_Position = CC_MVPMatrix * a_position;
15-
TextureCoordOut = a_texCoord;
16-
TextureCoordOut.y = 1.0 - TextureCoordOut.y;
17-
}
18-
);
19-
20-
211
// pure black vert shader
222
static const char* outLineShader = STRINGIFY(
233

cocos/renderer/CCGLProgram.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ const char* GLProgram::SHADER_NAME_LABEL_DISTANCEFIELD_GLOW = "ShaderLabelDFGlow
6969
const char* GLProgram::SHADER_NAME_LABEL_NORMAL = "ShaderLabelNormal";
7070
const char* GLProgram::SHADER_NAME_LABEL_OUTLINE = "ShaderLabelOutline";
7171

72+
const char* GLProgram::SHADER_3D_POSITION = "Shader3DPosition";
73+
const char* GLProgram::SHADER_3D_POSITION_TEXTURE = "Shader3DPositionTexture";
74+
7275

7376
// uniform names
7477
const char* GLProgram::UNIFORM_NAME_P_MATRIX = "CC_PMatrix";

cocos/renderer/CCGLProgram.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,9 @@ class CC_DLL GLProgram : public Ref
126126
static const char* SHADER_NAME_LABEL_DISTANCEFIELD_NORMAL;
127127
static const char* SHADER_NAME_LABEL_DISTANCEFIELD_GLOW;
128128

129+
//3D
130+
static const char* SHADER_3D_POSITION;
131+
static const char* SHADER_3D_POSITION_TEXTURE;
129132

130133
// uniform names
131134
static const char* UNIFORM_NAME_P_MATRIX;

cocos/renderer/CCGLProgramCache.cpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ enum {
4848
kShaderType_LabelDistanceFieldGlow,
4949
kShaderType_LabelNormal,
5050
kShaderType_LabelOutline,
51+
kShaderType_3DPosition,
52+
kShaderType_3DPositionTex,
5153
kShaderType_MAX,
5254
};
5355

@@ -188,6 +190,15 @@ void GLProgramCache::loadDefaultGLPrograms()
188190
p = new GLProgram();
189191
loadDefaultGLProgram(p, kShaderType_LabelOutline);
190192
_programs.insert( std::make_pair(GLProgram::SHADER_NAME_LABEL_OUTLINE, p) );
193+
194+
p = new GLProgram();
195+
loadDefaultGLProgram(p, kShaderType_3DPosition);
196+
_programs.insert( std::make_pair(GLProgram::SHADER_3D_POSITION, p) );
197+
198+
p = new GLProgram();
199+
loadDefaultGLProgram(p, kShaderType_3DPositionTex);
200+
_programs.insert( std::make_pair(GLProgram::SHADER_3D_POSITION_TEXTURE, p) );
201+
191202
}
192203

193204
void GLProgramCache::reloadDefaultGLPrograms()
@@ -276,6 +287,15 @@ void GLProgramCache::reloadDefaultGLPrograms()
276287
p = getGLProgram(GLProgram::SHADER_NAME_LABEL_OUTLINE);
277288
p->reset();
278289
loadDefaultGLProgram(p, kShaderType_LabelOutline);
290+
291+
p = getGLProgram(GLProgram::SHADER_3D_POSITION);
292+
p->reset();
293+
loadDefaultGLProgram(p, kShaderType_3DPosition);
294+
295+
p = getGLProgram(GLProgram::SHADER_3D_POSITION_TEXTURE);
296+
p->reset();
297+
loadDefaultGLProgram(p, kShaderType_3DPositionTex);
298+
279299
}
280300

281301
void GLProgramCache::loadDefaultGLProgram(GLProgram *p, int type)
@@ -329,6 +349,12 @@ void GLProgramCache::loadDefaultGLProgram(GLProgram *p, int type)
329349
case kShaderType_LabelOutline:
330350
p->initWithByteArrays(ccLabel_vert, ccLabelOutline_frag);
331351
break;
352+
case kShaderType_3DPosition:
353+
p->initWithByteArrays(cc3D_PositionTex_vert, cc3D_Color_frag);
354+
break;
355+
case kShaderType_3DPositionTex:
356+
p->initWithByteArrays(cc3D_PositionTex_vert, cc3D_ColorTex_frag);
357+
break;
332358
default:
333359
CCLOG("cocos2d: %s:%d, error shader type", __FUNCTION__, __LINE__);
334360
return;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
2+
const char* cc3D_Color_frag = STRINGIFY(
3+
4+
#ifdef GL_ES
5+
varying lowp vec4 DestinationColor;
6+
#else
7+
varying vec4 DestinationColor;
8+
#endif
9+
uniform vec4 u_color;
10+
11+
void main(void)
12+
{
13+
gl_FragColor = u_color;
14+
}
15+
);

cocos/3d/Textured.es2.frag.h renamed to cocos/renderer/ccShader_3D_ColorTex.frag

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
static const char* baseTexturedFrag = STRINGIFY(
2+
const char* cc3D_ColorTex_frag = STRINGIFY(
33

44
#ifdef GL_ES
55
varying mediump vec2 TextureCoordOut;

0 commit comments

Comments
 (0)