Skip to content

Commit 16fd0bc

Browse files
committed
#61 shader refactoring
1 parent bb8628b commit 16fd0bc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+302
-268
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ ChangeLog
207207
- 3.4.1 (20/09/2022)
208208
- (f) bug fixing: lighting, textures, etc
209209
- (i) texture loading refactoring
210+
- (i) shader refactoring
210211
- 3.4.0 (17/09/2022)
211212
- (n) GLTF basic support
212213
- 3.3.1 (12/09/2022)

engine/src/main/java/org/andresoviedo/android_3d_model_engine/drawer/RendererFactory.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class RendererFactory {
3535
* shader code loaded from raw resources
3636
* resources are cached on activity thread
3737
*/
38-
private Map<String, String> shadersCode = new HashMap<>();
38+
private Map<Integer, String> shadersIds = new HashMap<>();
3939
/**
4040
* list of opengl drawers
4141
*/
@@ -51,9 +51,9 @@ public RendererFactory(Context context) throws IllegalAccessException, IOExcepti
5151
int shaderResId = fields[count].getInt(fields[count]);
5252
byte[] shaderBytes = IOUtils.read(context.getResources().openRawResource(shaderResId));
5353
String shaderCode = new String(shaderBytes);
54-
shadersCode.put(shaderId, shaderCode);
54+
shadersIds.put(shaderResId, shaderCode);
5555
}
56-
Log.i("RendererFactory", "Shaders loaded: " + shadersCode.size());
56+
Log.i("RendererFactory", "Shaders loaded: " + shadersIds.size());
5757
}
5858

5959
public Renderer getDrawer(Object3DData obj, boolean usingSkyBox, boolean usingTextures, boolean usingLights, boolean usingAnimation, boolean drawColors) {
@@ -72,15 +72,10 @@ public Renderer getDrawer(Object3DData obj, boolean usingSkyBox, boolean usingTe
7272
if (drawer != null) return drawer;
7373

7474
// build drawer
75-
String vertexShaderCode = shadersCode.get(shader.vertexShaderCode);
76-
String fragmentShaderCode = shadersCode.get(shader.fragmentShaderCode);
77-
if (vertexShaderCode == null || fragmentShaderCode == null) {
78-
Log.e("RendererFactory", "Shaders not found for " + shader.id);
79-
return null;
80-
}
75+
String vertexShaderCode;
8176

8277
// experimental: inject glPointSize
83-
vertexShaderCode = vertexShaderCode.replace("void main(){", "void main(){\n\tgl_PointSize = 5.0;");
78+
vertexShaderCode = shadersIds.get(shader.vertexShaderResourceId).replace("void main(){", "void main(){\n\tgl_PointSize = 5.0;");
8479

8580
// use opengl constant to dynamically set up array size in shaders. That should be >=120
8681
vertexShaderCode = vertexShaderCode.replace("const int MAX_JOINTS = 60;","const int MAX_JOINTS = gl_MaxVertexUniformVectors > 60 ? 60 : gl_MaxVertexUniformVectors;");
@@ -91,7 +86,7 @@ public Renderer getDrawer(Object3DData obj, boolean usingSkyBox, boolean usingTe
9186
Log.v("RendererFactory", "---------- Fragment shader ----------\n");
9287
Log.v("RendererFactory", fragmentShaderCode);
9388
Log.v("RendererFactory", "-------------------------------------\n");*/
94-
drawer = GLES20Renderer.getInstance(shader.id, vertexShaderCode, fragmentShaderCode);
89+
drawer = GLES20Renderer.getInstance(shader.id, vertexShaderCode, shadersIds.get(shader.fragmentShaderResourceId));
9590

9691
// cache drawer
9792
drawers.put(shader, drawer);
Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,35 @@
11
package org.andresoviedo.android_3d_model_engine.drawer;
22

33

4+
import org.andresoviedo.android_3d_model_engine.R;
5+
46
public enum Shader {
57

6-
SKYBOX("skybox_", "shader_skybox_vert", "shader_skybox_frag"),
7-
ANIM_LIGHT_TEXTURE_COLORS("anim_light_texture_colors_", "shader_anim_light_texture_colors_vert", "shader_anim_light_texture_colors_frag"),
8-
ANIM_LIGHT_TEXTURE("anim_light_texture_", "shader_anim_light_texture_vert", "shader_anim_light_texture_frag"),
9-
ANIM_LIGHT_COLORS("anim_light_colors_", "shader_anim_light_colors_vert", "shader_anim_light_colors_frag"),
10-
ANIM_LIGHT("anim_light_", "shader_anim_light_vert", "shader_anim_light_frag"),
11-
ANIM_TEXTURE_COLORS("anim_texture_colors_", "shader_anim_texture_colors_vert", "shader_anim_texture_colors_frag"),
12-
ANIM_TEXTURE("anim_texture_", "shader_anim_texture_vert", "shader_anim_texture_frag"),
13-
ANIM_COLORS("anim_colors_", "shader_anim_colors_vert", "shader_anim_colors_frag"),
14-
ANIM("anim_", "shader_anim_vert", "shader_anim_frag"),
15-
LIGHT_TEXTURE_COLORS("light_texture_colors_", "shader_light_texture_colors_vert", "shader_light_texture_colors_frag"),
16-
LIGHT_TEXTURE("light_texture_", "shader_light_texture_vert", "shader_light_texture_frag"),
17-
LIGHT_COLORS("light_colors_", "shader_light_colors_vert", "shader_light_colors_frag"),
18-
LIGHT("light_", "shader_light_vert", "shader_light_frag"),
19-
TEXTURE_COLORS("texture_colors_", "shader_texture_colors_vert", "shader_texture_colors_frag"),
20-
TEXTURE("texture_", "shader_texture_vert", "shader_texture_frag"),
21-
COLORS("colors_", "shader_colors_vert", "shader_colors_frag"),
22-
SHADER("default", "shader_vert", "shader_frag");
8+
SKYBOX("skybox_", R.raw.shader_skybox_vert, R.raw.shader_skybox_frag),
9+
ANIM_LIGHT_TEXTURE_COLORS("anim_light_texture_colors_", R.raw.shader_anim_light_texture_colors_vert, R.raw.shader_anim_light_texture_colors_frag),
10+
ANIM_LIGHT_TEXTURE("anim_light_texture_", R.raw.shader_anim_light_texture_vert, R.raw.shader_anim_light_texture_frag),
11+
ANIM_LIGHT_COLORS("anim_light_colors_", R.raw.shader_anim_light_colors_vert, R.raw.shader_anim_light_colors_frag),
12+
ANIM_LIGHT("anim_light_", R.raw.shader_anim_light_vert, R.raw.shader_anim_light_frag),
13+
ANIM_TEXTURE_COLORS("anim_texture_colors_", R.raw.shader_anim_texture_colors_vert, R.raw.shader_anim_texture_colors_frag),
14+
ANIM_TEXTURE("anim_texture_", R.raw.shader_anim_texture_vert, R.raw.shader_anim_texture_frag),
15+
ANIM_COLORS("anim_colors_", R.raw.shader_anim_colors_vert, R.raw.shader_anim_colors_frag),
16+
ANIM("anim_", R.raw.shader_anim_vert, R.raw.shader_anim_frag),
17+
LIGHT_TEXTURE_COLORS("light_texture_colors_", R.raw.shader_light_texture_colors_vert, R.raw.shader_light_texture_colors_frag),
18+
LIGHT_TEXTURE("light_texture_", R.raw.shader_light_texture_vert, R.raw.shader_light_texture_frag),
19+
LIGHT_COLORS("light_colors_", R.raw.shader_light_colors_vert, R.raw.shader_light_colors_frag),
20+
LIGHT("light_", R.raw.shader_light_vert, R.raw.shader_light_frag),
21+
TEXTURE_COLORS("texture_colors_", R.raw.shader_texture_colors_vert, R.raw.shader_texture_colors_frag),
22+
TEXTURE("texture_", R.raw.shader_texture_vert, R.raw.shader_texture_frag),
23+
COLORS("colors_", R.raw.shader_colors_vert, R.raw.shader_colors_frag),
24+
SHADER("default", R.raw.shader_vert, R.raw.shader_frag);
2325

2426
String id;
25-
String vertexShaderCode;
26-
String fragmentShaderCode;
27+
int vertexShaderResourceId = -1;
28+
int fragmentShaderResourceId = -1;
2729

28-
Shader (String id, String vertexShaderCode, String fragmentShaderCode){
30+
Shader (String id, int vertexShaderCode, int fragmentShaderCode){
2931
this.id = id;
30-
this.vertexShaderCode = vertexShaderCode;
31-
this.fragmentShaderCode = fragmentShaderCode;
32+
this.vertexShaderResourceId = vertexShaderCode;
33+
this.fragmentShaderResourceId = fragmentShaderCode;
3234
}
3335
}

engine/src/main/res/raw/shader_anim_colors_frag

Lines changed: 0 additions & 9 deletions
This file was deleted.
Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
precision mediump float;
2-
3-
// colors
4-
uniform vec4 vColorMask;
5-
varying vec4 v_Color;
6-
7-
void main(){
8-
gl_FragColor = v_Color * vColorMask;
1+
precision highp float;
2+
3+
// colors
4+
uniform vec4 vColorMask;
5+
varying vec4 v_Color;
6+
7+
void main(){
8+
gl_FragColor = v_Color * vColorMask;
99
}

engine/src/main/res/raw/shader_anim_colors_vert renamed to engine/src/main/res/raw/shader_anim_colors_vert.glsl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
precision highp float;
2+
13
const int MAX_JOINTS = 60;
24
//const int MAX_WEIGHTS = 3;
35

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
precision mediump float;
2-
3-
// colors
4-
uniform vec4 vColorMask;
5-
uniform vec4 vColor;
6-
7-
void main(){
8-
gl_FragColor = vColor * vColorMask;
1+
precision highp float;
2+
3+
precision mediump float;
4+
5+
// colors
6+
uniform vec4 vColorMask;
7+
uniform vec4 vColor;
8+
9+
void main(){
10+
gl_FragColor = vColor * vColorMask;
911
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
precision mediump float;
2-
3-
// colors
4-
varying vec4 v_Color;
5-
uniform vec4 vColorMask;
6-
7-
void main(){
8-
gl_FragColor = v_Color * vColorMask;
1+
precision highp float;
2+
3+
// colors
4+
uniform vec4 vColorMask;
5+
varying vec4 v_Color;
6+
7+
void main(){
8+
gl_FragColor = v_Color * vColorMask;
99
}

engine/src/main/res/raw/shader_anim_light_colors_vert renamed to engine/src/main/res/raw/shader_anim_light_colors_vert.glsl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
precision highp float;
2+
13
const int MAX_JOINTS = 60;
24
//const int MAX_WEIGHTS = 3;
35

Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
precision mediump float;
2-
3-
// colors
4-
uniform vec4 vColorMask;
5-
varying vec4 v_Color;
6-
7-
void main(){
8-
gl_FragColor = v_Color * vColorMask;
1+
precision highp float;
2+
3+
// colors
4+
uniform vec4 vColorMask;
5+
varying vec4 v_Color;
6+
7+
void main(){
8+
gl_FragColor = v_Color * vColorMask;
99
}

0 commit comments

Comments
 (0)