@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { if (renderable.environment == null) shader.program.setUniform3fv(shader.loc(inputID), ones, 0, ones.length); else { renderable.worldTransform.getTranslation(tmpV1); if (combinedAttributes.has(ColorAttribute.AmbientLight)) cacheAmbientCubemap.set( ((ColorAttribute) combinedAttributes.get(ColorAttribute.AmbientLight)).color); if (combinedAttributes.has(DirectionalLightsAttribute.Type)) { Array<DirectionalLight> lights = ((DirectionalLightsAttribute) combinedAttributes.get(DirectionalLightsAttribute.Type)) .lights; for (int i = dirLightsOffset; i < lights.size; i++) cacheAmbientCubemap.add(lights.get(i).color, lights.get(i).direction); } if (combinedAttributes.has(PointLightsAttribute.Type)) { Array<PointLight> lights = ((PointLightsAttribute) combinedAttributes.get(PointLightsAttribute.Type)).lights; for (int i = pointLightsOffset; i < lights.size; i++) cacheAmbientCubemap.add( lights.get(i).color, lights.get(i).position, tmpV1, lights.get(i).intensity); } cacheAmbientCubemap.clamp(); shader.program.setUniform3fv( shader.loc(inputID), cacheAmbientCubemap.data, 0, cacheAmbientCubemap.data.length); } }
@Override public void render(Renderable renderable, Attributes combinedAttributes) { if (!combinedAttributes.has(BlendingAttribute.Type)) context.setBlending(false, GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA); bindMaterial(combinedAttributes); if (lighting) bindLights(renderable, combinedAttributes); super.render(renderable, combinedAttributes); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set(inputID, temp.set(shader.camera.combined).mul(renderable.worldTransform)); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set(inputID, tmpM.set(renderable.worldTransform).inv().transpose()); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set(inputID, renderable.worldTransform); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set(inputID, shader.camera.up); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set( inputID, ((ColorAttribute) (combinedAttributes.get(ColorAttribute.Diffuse))).color); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { final TextureAttribute ta = (TextureAttribute) (combinedAttributes.get(TextureAttribute.Ambient)); shader.set(inputID, ta.offsetU, ta.offsetV, ta.scaleU, ta.scaleV); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set( inputID, ((FloatAttribute) (combinedAttributes.get(FloatAttribute.Shininess))).value); }
@Override public void begin(final Camera camera, final RenderContext context) { super.begin(camera, context); for (final DirectionalLight dirLight : directionalLights) dirLight.set(0, 0, 0, 0, -1, 0); for (final PointLight pointLight : pointLights) pointLight.set(0, 0, 0, 0, 0, 0, 0); for (final SpotLight spotLight : spotLights) spotLight.set(0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0); lightsSet = false; if (has(u_time)) set(u_time, time += Gdx.graphics.getDeltaTime()); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { final int unit = shader.context.textureBinder.bind( ((TextureAttribute) (combinedAttributes.get(TextureAttribute.Ambient))) .textureDescription); shader.set(inputID, unit); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { shader.set( inputID, shader.camera.position.x, shader.camera.position.y, shader.camera.position.z, 1.1881f / (shader.camera.far * shader.camera.far)); }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { if (combinedAttributes.has(CubemapAttribute.EnvironmentMap)) { shader.set( inputID, shader.context.textureBinder.bind( ((CubemapAttribute) combinedAttributes.get(CubemapAttribute.EnvironmentMap)) .textureDescription)); } }
@Override public void set( BaseShader shader, int inputID, Renderable renderable, Attributes combinedAttributes) { for (int i = 0; i < bones.length; i++) { final int idx = i / 16; bones[i] = (renderable.bones == null || idx >= renderable.bones.length || renderable.bones[idx] == null) ? idtMatrix.val[i % 16] : renderable.bones[idx].val[i % 16]; } shader.program.setUniformMatrix4fv(shader.loc(inputID), bones, 0, bones.length); }
@Override public void dispose() { program.dispose(); super.dispose(); }
@Override public void end() { super.end(); }