@@ -39,9 +39,7 @@ public class RendererFactory {
39
39
/**
40
40
* list of opengl drawers
41
41
*/
42
- private Map <String , GLES20Renderer > drawers = new HashMap <>();
43
-
44
- private final String [] shaderIdTemp = new String [3 ];
42
+ private Map <Shader , GLES20Renderer > drawers = new HashMap <>();
45
43
46
44
public RendererFactory (Context context ) throws IllegalAccessException , IOException {
47
45
@@ -68,17 +66,17 @@ public Renderer getDrawer(Object3DData obj, boolean usingSkyBox, boolean usingTe
68
66
boolean isColoured = drawColors && obj != null && (obj .getColorsBuffer () != null || obj
69
67
.getColorsBuffer () != null );
70
68
71
- final String [] shaderId = getShaderId (usingSkyBox , isAnimated , isUsingLights , isTextured , isColoured );
69
+ final Shader shader = getShader (usingSkyBox , isAnimated , isUsingLights , isTextured , isColoured );
72
70
73
71
// get cached drawer
74
- GLES20Renderer drawer = drawers .get (shaderId [ 0 ] );
72
+ GLES20Renderer drawer = drawers .get (shader );
75
73
if (drawer != null ) return drawer ;
76
74
77
75
// build drawer
78
- String vertexShaderCode = shadersCode .get (shaderId [ 1 ] );
79
- String fragmentShaderCode = shadersCode .get (shaderId [ 2 ] );
76
+ String vertexShaderCode = shadersCode .get (shader . vertexShaderCode );
77
+ String fragmentShaderCode = shadersCode .get (shader . fragmentShaderCode );
80
78
if (vertexShaderCode == null || fragmentShaderCode == null ) {
81
- Log .e ("RendererFactory" , "Shaders not found for " + shaderId [ 0 ] );
79
+ Log .e ("RendererFactory" , "Shaders not found for " + shader . id );
82
80
return null ;
83
81
}
84
82
@@ -94,119 +92,86 @@ public Renderer getDrawer(Object3DData obj, boolean usingSkyBox, boolean usingTe
94
92
Log .v ("RendererFactory" , "---------- Fragment shader ----------\n " );
95
93
Log .v ("RendererFactory" , fragmentShaderCode );
96
94
Log .v ("RendererFactory" , "-------------------------------------\n " );
97
- drawer = GLES20Renderer .getInstance (shaderId [ 0 ] , vertexShaderCode , fragmentShaderCode );
95
+ drawer = GLES20Renderer .getInstance (shader . id , vertexShaderCode , fragmentShaderCode );
98
96
99
97
// cache drawer
100
- drawers .put (shaderId [ 0 ] , drawer );
98
+ drawers .put (shader , drawer );
101
99
102
100
// return drawer
103
101
return drawer ;
104
102
}
105
103
106
104
@ NonNull
107
- private String [] getShaderId (boolean isUsingSkyBox , boolean isAnimated , boolean isUsingLights , boolean isTextured , boolean
105
+ private Shader getShader (boolean isUsingSkyBox , boolean isAnimated , boolean isUsingLights , boolean isTextured , boolean
108
106
isColoured ) {
109
107
110
108
if (isUsingSkyBox ){
111
- shaderIdTemp [0 ]="shader_skybox_" ;
112
- shaderIdTemp [1 ]="shader_skybox_vert" ;
113
- shaderIdTemp [2 ]="shader_skybox_frag" ;
114
- return shaderIdTemp ;
109
+ return Shader .SKYBOX ;
115
110
}
111
+
112
+ Shader ret = null ;
116
113
if (isAnimated ){
117
114
if (isUsingLights ){
118
115
if (isTextured ){
119
116
if (isColoured ){
120
- shaderIdTemp [0 ]="shader_anim_light_texture_colors_" ;
121
- shaderIdTemp [1 ]="shader_anim_light_texture_colors_vert" ;
122
- shaderIdTemp [2 ]="shader_anim_light_texture_colors_frag" ;
117
+ ret = Shader .ANIM_LIGHT_TEXTURE_COLORS ;
123
118
} else {
124
- shaderIdTemp [0 ]="shader_anim_light_texture_" ;
125
- shaderIdTemp [1 ]="shader_anim_light_texture_vert" ;
126
- shaderIdTemp [2 ]="shader_anim_light_texture_frag" ;
119
+ ret = Shader .ANIM_LIGHT_TEXTURE ;
127
120
}
128
121
} else {
129
122
if (isColoured ){
130
- shaderIdTemp [0 ]="shader_anim_light_colors_" ;
131
- shaderIdTemp [1 ]="shader_anim_light_colors_vert" ;
132
- shaderIdTemp [2 ]="shader_anim_light_colors_frag" ;
123
+ ret = Shader .ANIM_LIGHT_COLORS ;
133
124
} else {
134
- shaderIdTemp [0 ]="shader_anim_light_" ;
135
- shaderIdTemp [1 ]="shader_anim_light_vert" ;
136
- shaderIdTemp [2 ]="shader_anim_light_frag" ;
125
+ ret = Shader .ANIM_LIGHT ;
137
126
}
138
127
}
139
128
} else {
140
129
if (isTextured ){
141
130
if (isColoured ){
142
- shaderIdTemp [0 ]="shader_anim_texture_colors_" ;
143
- shaderIdTemp [1 ]="shader_anim_texture_colors_vert" ;
144
- shaderIdTemp [2 ]="shader_anim_texture_colors_frag" ;
131
+ ret = Shader .ANIM_TEXTURE_COLORS ;
145
132
} else {
146
- shaderIdTemp [0 ]="shader_anim_texture_" ;
147
- shaderIdTemp [1 ]="shader_anim_texture_vert" ;
148
- shaderIdTemp [2 ]="shader_anim_texture_frag" ;
133
+ ret = Shader .ANIM_TEXTURE ;
149
134
}
150
135
} else {
151
136
if (isColoured ){
152
- shaderIdTemp [0 ]="shader_anim_colors_" ;
153
- shaderIdTemp [1 ]="shader_anim_colors_vert" ;
154
- shaderIdTemp [2 ]="shader_anim_colors_frag" ;
137
+ ret = Shader .ANIM_COLORS ;
155
138
} else {
156
- shaderIdTemp [0 ]="shader_anim_" ;
157
- shaderIdTemp [1 ]="shader_anim_vert" ;
158
- shaderIdTemp [2 ]="shader_anim_frag" ;
139
+ ret = Shader .ANIM ;
159
140
}
160
141
}
161
142
}
162
143
} else {
163
144
if (isUsingLights ){
164
145
if (isTextured ){
165
146
if (isColoured ){
166
- shaderIdTemp [0 ]="shader_light_texture_colors_" ;
167
- shaderIdTemp [1 ]="shader_light_texture_colors_vert" ;
168
- shaderIdTemp [2 ]="shader_light_texture_colors_frag" ;
147
+ ret = Shader .LIGHT_TEXTURE_COLORS ;
169
148
} else {
170
- shaderIdTemp [0 ]="shader_light_texture_" ;
171
- shaderIdTemp [1 ]="shader_light_texture_vert" ;
172
- shaderIdTemp [2 ]="shader_light_texture_frag" ;
149
+ ret = Shader .LIGHT_TEXTURE ;
173
150
}
174
151
} else {
175
152
if (isColoured ){
176
- shaderIdTemp [0 ]="shader_light_colors_" ;
177
- shaderIdTemp [1 ]="shader_light_colors_vert" ;
178
- shaderIdTemp [2 ]="shader_light_colors_frag" ;
153
+ ret = Shader .LIGHT_COLORS ;
179
154
} else {
180
- shaderIdTemp [0 ]="shader_light_" ;
181
- shaderIdTemp [1 ]="shader_light_vert" ;
182
- shaderIdTemp [2 ]="shader_light_frag" ;
155
+ ret = Shader .LIGHT ;
183
156
}
184
157
}
185
158
} else {
186
159
if (isTextured ){
187
160
if (isColoured ){
188
- shaderIdTemp [0 ]="shader_texture_colors_" ;
189
- shaderIdTemp [1 ]="shader_texture_colors_vert" ;
190
- shaderIdTemp [2 ]="shader_texture_colors_frag" ;
161
+ ret = Shader .TEXTURE_COLORS ;
191
162
} else {
192
- shaderIdTemp [0 ]="shader_texture_" ;
193
- shaderIdTemp [1 ]="shader_texture_vert" ;
194
- shaderIdTemp [2 ]="shader_texture_frag" ;
163
+ ret = Shader .TEXTURE ;
195
164
}
196
165
} else {
197
166
if (isColoured ){
198
- shaderIdTemp [0 ]="shader_colors_" ;
199
- shaderIdTemp [1 ]="shader_colors_vert" ;
200
- shaderIdTemp [2 ]="shader_colors_frag" ;
167
+ ret = Shader .COLORS ;
201
168
} else {
202
- shaderIdTemp [0 ]="shader_" ;
203
- shaderIdTemp [1 ]="shader_vert" ;
204
- shaderIdTemp [2 ]="shader_frag" ;
169
+ ret = Shader .SHADER ;
205
170
}
206
171
}
207
172
}
208
173
}
209
- return shaderIdTemp ;
174
+ return ret ;
210
175
}
211
176
212
177
public Renderer getBoundingBoxDrawer () {
0 commit comments