Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.vaalentin.watchfaceexperiments.ethereal;
- import android.content.Context;
- import static android.opengl.GLES20.*;
- import com.vaalentin.watchfaceexperiments.BaseWatchFace;
- import com.vaalentin.watchfaceexperiments.ethereal.views.Time;
- import com.vaalentin.watchfaceexperiments.shared.opengl.FrameBuffer;
- import com.vaalentin.watchfaceexperiments.shared.opengl.Mesh;
- import com.vaalentin.watchfaceexperiments.shared.opengl.Program;
- import com.vaalentin.watchfaceexperiments.shared.opengl.Shader;
- import com.vaalentin.watchfaceexperiments.shared.utilities.File;
- public class EtherealWatchFace extends BaseWatchFace {
- private static final String TAG = EtherealWatchFace.class.getSimpleName();
- private Time mTime;
- private FrameBuffer mFbo;
- private Mesh mFsQuad;
- private Program mPostProcessingProgram;
- private int mPositionId;
- private int mUvId;
- private int mTextureId;
- private int mRadiusId;
- private int mSoftnessId;
- private int mStrengthId;
- private int mTimeId;
- private int mNoiseInfluenceId;
- private float mT;
- @Override
- public long getUpdateRate() {
- return 1000 / 30;
- }
- @Override
- public void onGlContextCreated() {
- super.onGlContextCreated();
- }
- @Override
- public void onGlSurfaceCreated(int width, int height) {
- super.onGlSurfaceCreated(width, height);
- glClearColor(0f, 0f, 0f, 0f);
- glViewport(0, 0, width, height);
- Context context = getApplicationContext();
- mTime = new Time(context, width, height);
- mFbo = FrameBuffer.create(width, height);
- mFsQuad = Mesh.createQuad();
- int vertexShader = Shader.create(GL_VERTEX_SHADER, File.readFile(context, "shaders/ethereal/postProcessing.vert"));
- int fragmentShader = Shader.create(GL_FRAGMENT_SHADER, File.readFile(context, "shaders/ethereal/postProcessing.frag"));
- mPostProcessingProgram = Program.create(vertexShader, fragmentShader);
- mPositionId = mPostProcessingProgram.registerAttribute("position", 2, GL_FLOAT);
- mUvId = mPostProcessingProgram.registerAttribute("uv", 2, GL_FLOAT);
- mTextureId = mPostProcessingProgram.registerUniform("texture", GL_INT);
- mRadiusId = mPostProcessingProgram.registerUniform("radius", GL_FLOAT);
- mSoftnessId = mPostProcessingProgram.registerUniform("softness", GL_FLOAT);
- mStrengthId = mPostProcessingProgram.registerUniform("strength", GL_FLOAT_VEC2);
- mTimeId = mPostProcessingProgram.registerUniform("time", GL_FLOAT);
- mNoiseInfluenceId = mPostProcessingProgram.registerUniform("noiseInfluence", GL_FLOAT);
- mT = 0f;
- }
- @Override
- public void onDraw() {
- super.onDraw();
- mT += 0.02f;
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- mFbo.bind();
- mTime.draw();
- mFbo.unbind();
- mPostProcessingProgram.use();
- mFsQuad.positions.bind();
- mPostProcessingProgram.setAttributePointer(mPositionId);
- mFsQuad.uvs.bind();
- mPostProcessingProgram.setAttributePointer(mUvId);
- mPostProcessingProgram.setUniform(mTextureId, mFbo.getTexture().bind(0));
- mPostProcessingProgram.setUniform(mRadiusId, 0.8f);
- mPostProcessingProgram.setUniform(mSoftnessId, 0.9f);
- mPostProcessingProgram.setUniform(mStrengthId, new float[] {0f, 0.2f});
- mPostProcessingProgram.setUniform(mTimeId, mT);
- mPostProcessingProgram.setUniform(mNoiseInfluenceId, 1f);
- mFsQuad.indices.bind();
- glDrawElements(GL_TRIANGLES, mFsQuad.indicesCount, GL_UNSIGNED_SHORT, 0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement