Skip to content

Commit

Permalink
Texture atlases can specify a shader by name now
Browse files Browse the repository at this point in the history
Included a flipbook shader as an example of its use.
  • Loading branch information
Interrupt committed Nov 20, 2018
1 parent 6e1dfb8 commit bf87249
Show file tree
Hide file tree
Showing 13 changed files with 307 additions and 171 deletions.
20 changes: 0 additions & 20 deletions DelvEdit/src/com/interrupt/dungeoneer/editor/EditorFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -563,19 +563,13 @@ public void draw() {

Tesselate();

GlRenderer.worldShaderInfo.begin();
tesselators.world.render();
GlRenderer.worldShaderInfo.end();

GlRenderer.waterShaderInfo.setScrollSpeed(0f);
GlRenderer.waterShaderInfo.begin();
tesselators.water.render();
GlRenderer.waterShaderInfo.end();

GlRenderer.waterShaderInfo.setScrollSpeed(0.03f);
GlRenderer.waterShaderInfo.begin();
tesselators.waterfall.render();
GlRenderer.waterShaderInfo.end();

gl.glDepthFunc(GL20.GL_LEQUAL);

Expand All @@ -585,16 +579,12 @@ public void draw() {
Gdx.gl.glEnable(GL20.GL_POLYGON_OFFSET_FILL);
Gdx.gl.glPolygonOffset(-1f, -1f);

GlRenderer.waterEdgeShaderInfo.begin();
tesselators.waterEdges.render();
GlRenderer.waterEdgeShaderInfo.end();

GlRenderer.waterEdgeShaderInfo.setAttribute("u_noise_mod", 4f);
GlRenderer.waterEdgeShaderInfo.setAttribute("u_waveMod", 0f);

GlRenderer.waterEdgeShaderInfo.begin();
tesselators.waterfallEdges.render();
GlRenderer.waterEdgeShaderInfo.end();

gl.glDisable(GL20.GL_CULL_FACE);

Expand Down Expand Up @@ -1575,36 +1565,26 @@ private void RenderEntitiesForPicking() {
Tesselate();

// render world, keep depth buffer
GlRenderer.worldShaderInfo.begin();
tesselators.world.render();
GlRenderer.worldShaderInfo.end();

GlRenderer.waterShaderInfo.setScrollSpeed(0f);
GlRenderer.waterShaderInfo.begin();
tesselators.water.render();
GlRenderer.waterShaderInfo.end();

GlRenderer.waterShaderInfo.setScrollSpeed(0.03f);
GlRenderer.waterShaderInfo.begin();
tesselators.waterfall.render();
GlRenderer.waterShaderInfo.end();

GlRenderer.waterEdgeShaderInfo.setAttribute("u_noise_mod", 1f);
GlRenderer.waterEdgeShaderInfo.setAttribute("u_waveMod", 1f);

Gdx.gl.glEnable(GL20.GL_POLYGON_OFFSET_FILL);
Gdx.gl.glPolygonOffset(-1f, -1f);

GlRenderer.waterEdgeShaderInfo.begin();
tesselators.waterEdges.render();
GlRenderer.waterEdgeShaderInfo.end();

GlRenderer.waterEdgeShaderInfo.setAttribute("u_noise_mod", 4f);
GlRenderer.waterEdgeShaderInfo.setAttribute("u_waveMod", 0f);

GlRenderer.waterEdgeShaderInfo.begin();
tesselators.waterfallEdges.render();
GlRenderer.waterEdgeShaderInfo.end();

Gdx.gl.glDisable(GL20.GL_POLYGON_OFFSET_FILL);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
Expand Down
7 changes: 7 additions & 0 deletions Dungeoneer/assets/data/walltextures.dat
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,12 @@
"filename": "textures.png",
"scale": 1,
"name": "t1"
},
{
"columns": 4,
"filename": "textures.png",
"scale": 1,
"name": "t1-animated",
"shader": "animate"
}
]
Binary file modified Dungeoneer/assets/levels/test-level.bin
Binary file not shown.
29 changes: 29 additions & 0 deletions Dungeoneer/assets/shaders/animate.frag
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#ifdef GL_ES
precision mediump float;
#endif

uniform sampler2D u_texture;
uniform vec4 u_FogColor;

uniform float u_time;
uniform float u_tex_width;
uniform float u_tex_height;
uniform int u_sprite_columns;
uniform int u_sprite_rows;

varying vec4 v_color;
varying vec2 v_texCoords;
varying float v_fogFactor;
varying float v_eyeDistance;

vec4 tex_Color;

void main() {
vec4 color;

tex_Color = texture2D( u_texture, v_texCoords );
color = v_color * tex_Color;
if(tex_Color.a < 0.01) discard;

gl_FragColor = mix(u_FogColor, color, v_fogFactor);
}
67 changes: 67 additions & 0 deletions Dungeoneer/assets/shaders/animate.vert
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
uniform mat4 u_projectionViewMatrix;
uniform float u_fogStart;
uniform float u_fogEnd;
uniform float u_time;

uniform vec4 u_AmbientColor;
uniform vec4 u_FogColor;

uniform float u_tex_width;
uniform float u_tex_height;
uniform int u_sprite_columns;
uniform int u_sprite_rows;

uniform vec4 u_LightColors[{{MAX_DYNAMIC_LIGHTS}}];
uniform vec3 u_LightPositions[{{MAX_DYNAMIC_LIGHTS}}];
uniform int u_UsedLights;

attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord0;

varying vec2 v_texCoords;
varying vec4 v_color;

varying float v_fogFactor;
varying float v_eyeDistance;

const float c_zerof = 0.0;
const float c_onef = 1.0;
const float c_animateSpeed = 8.0;

vec4 vertexPositionInEye;

float calcFogFactor(float distanceToEye);

void main() {
v_texCoords = a_texCoord0;
gl_Position = u_projectionViewMatrix * a_position;
v_color = a_color + u_AmbientColor;

// Flip through the atlas on this row
v_texCoords.x += float(int(u_time * c_animateSpeed) % u_sprite_columns) * u_tex_width;

if(u_UsedLights != 0) {
for(int i=0; i < {{MAX_DYNAMIC_LIGHTS}}; i++)
{
if(u_LightColors[i].a != 0.0)
{
float lightDistance = length(u_LightPositions[i] - gl_Position.xyz) / u_LightColors[i].a;
float diffuse = (1.0 / (1.0 + (lightDistance * lightDistance)));
v_color += (u_LightColors[i] * diffuse) * a_color.a;
}
}
}

v_color.a = 1.0;

vertexPositionInEye = gl_Position;
v_fogFactor = calcFogFactor(-vertexPositionInEye.z - u_fogEnd * (1.0 - a_color.a));
v_eyeDistance = -vertexPositionInEye.z;
}

float calcFogFactor(float distanceToEye)
{
float f = (u_fogEnd - -distanceToEye) / (u_fogEnd - u_fogStart);
return clamp(f, c_zerof, c_onef);
}
6 changes: 0 additions & 6 deletions Dungeoneer/src/com/interrupt/dungeoneer/game/Game.java
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,6 @@ public void loadManagers() {
entityManager = new EntityManager();
}
EntityManager.setSingleton(entityManager);

// load shaders
ShaderManager sm = modManager.loadShaderManager();
if(sm != null) {
ShaderManager.setSingleton(sm);
}
}

public Game(Level levelToStart) {
Expand Down
Loading

0 comments on commit bf87249

Please sign in to comment.