Skip to content

Commit

Permalink
Basic physics updating is completed; Only draws black squares for now…
Browse files Browse the repository at this point in the history
…, but animation is happening in a Transparent OpenGL layer
  • Loading branch information
billylindeman committed Oct 20, 2014
1 parent 3c82525 commit f69787b
Show file tree
Hide file tree
Showing 15 changed files with 405 additions and 73 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ buildscript {
allprojects {
repositories {
jcenter()
mavenCentral();
}
}
8 changes: 5 additions & 3 deletions dust-sample/dust-sample.iml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
<option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" />
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
Expand All @@ -37,22 +38,22 @@
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/test/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
Expand All @@ -79,6 +80,7 @@
</content>
<orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="sanselan-0.97-incubator" level="project" />
<orderEntry type="module" module-name="dust" exported="" />
</component>
</module>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;

import com.billylindeman.dust.layer.GLParticleLayer;
import com.billylindeman.dust.particle.Emitter;
import com.billylindeman.dust.particle.EmitterConfig;

Expand All @@ -19,9 +19,12 @@ protected void onCreate(Bundle savedInstanceState) {

EmitterConfig config = EmitterConfig.fromStream(getResources().openRawResource(R.raw.confetti));
Emitter e = new Emitter(config);
e.reset();


GLParticleLayer layer = (GLParticleLayer)findViewById(R.id.gl_particle_layer);
layer.addEmitter(e);

ImageView imageView = (ImageView)findViewById(R.id.imageview);
imageView.setImageBitmap(config.texture);
}


Expand Down
15 changes: 6 additions & 9 deletions dust-sample/src/main/res/layout/activity_dust.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,13 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@android:color/black"
android:background="@android:color/holo_green_dark"
tools:context=".DustActivity">

<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<com.billylindeman.dust.layer.GLParticleLayer
android:id="@+id/gl_particle_layer"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</RelativeLayout>
4 changes: 2 additions & 2 deletions dust-sample/src/main/res/raw/confetti.pex
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<particleEmitterConfig>
<absolutePosition value="0"></absolutePosition>
<yCoordFlipped value="1"></yCoordFlipped>
<sourcePosition x="150.00" y="50.00"></sourcePosition>
<sourcePosition x="180.00" y="480.00"></sourcePosition>
<sourcePositionVariance x="180.00" y="7.00"></sourcePositionVariance>
<speed value="0.00"></speed>
<speedVariance value="30.00"></speedVariance>
Expand All @@ -19,7 +19,7 @@
<startColorVariance red="1.00" green="1.00" blue="1.00" alpha="1.00"></startColorVariance>
<finishColor red="1.00" green="1.00" blue="1.00" alpha="1.00"></finishColor>
<finishColorVariance red="1.00" green="1.00" blue="1.00" alpha="1.00"></finishColorVariance>
<maxParticles value="2000"></maxParticles>
<maxParticles value="600"></maxParticles>
<startParticleSize value="12.00"></startParticleSize>
<startParticleSizeVariance value="0.00"></startParticleSizeVariance>
<finishParticleSize value="12.00"></finishParticleSize>
Expand Down
8 changes: 8 additions & 0 deletions dust/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,12 @@ android {

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "org.apache.sanselan:sanselan:0.97-incubator"
}


buildscript{
repositories{
mavenCentral()
}
}
8 changes: 5 additions & 3 deletions dust/dust.iml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
<option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
<option name="TEST_SOURCE_GEN_TASK_NAME" value="generateDebugTestSources" />
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
<option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
Expand All @@ -38,22 +39,22 @@
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/test/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/main/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/assets" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
Expand Down Expand Up @@ -81,6 +82,7 @@
</content>
<orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="sanselan-0.97-incubator" level="project" />
</component>
</module>

Original file line number Diff line number Diff line change
@@ -1,19 +1,115 @@
package com.billylindeman.dust.layer;

import android.content.Context;
import android.graphics.PixelFormat;
import android.opengl.GLSurfaceView;
import android.os.SystemClock;
import android.util.AttributeSet;

import com.billylindeman.dust.particle.Emitter;
import com.billylindeman.dust.particle.Particle;

import java.util.ArrayList;

import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;

/**
*
*/
public class GLParticleLayer extends GLSurfaceView {
ParticleRenderer particleRenderer;

public GLParticleLayer(Context context) {
super(context);
init();
}

public GLParticleLayer(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

private void init() {
setZOrderOnTop(true);
setEGLConfigChooser(8, 8, 8, 8, 16, 0);
getHolder().setFormat(PixelFormat.RGBA_8888);

particleRenderer = new ParticleRenderer();
setRenderer(particleRenderer);

setRenderMode(RENDERMODE_CONTINUOUSLY);
}

public void addEmitter(final Emitter e) {
queueEvent(new Runnable() {
@Override
public void run() {
particleRenderer.addEmitter(e);
}
});
}


class ParticleRenderer implements Renderer {
ArrayList<Emitter> emitters = new ArrayList<Emitter>();
long lastFrame = SystemClock.elapsedRealtime();

Rectangle r = new Rectangle();

@Override
public void onSurfaceCreated(GL10 gl10, EGLConfig eglConfig) {

}

@Override
public void onSurfaceChanged(GL10 gl, int w, int h) {
gl.glViewport(0, 0, w, h);
gl.glOrthof(0,360,0,480,0,1);
}

@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);

if(emitters != null) {
float delta = getFrameDeltaTime();
for(Emitter emitter : emitters) {
emitter.updateWithDelta(delta);
drawParticlesForEmitter(gl, emitter);
}
}

}

public void addEmitter(Emitter e) {
emitters.add(e);

}

private float getFrameDeltaTime() {
long frameTime = SystemClock.elapsedRealtime();
float delta = ((float)frameTime - (float)lastFrame) / 1000;
lastFrame = frameTime;
return delta;
}

private void drawParticlesForEmitter(GL10 gl, Emitter e) {
int count = e.getParticleCount();
Particle[] particles = e.getParticles();

for(int i=0; i<count ; i++) {
Particle p = particles[i];
gl.glPushMatrix();
gl.glTranslatef(p.position.x,p.position.y,0);
gl.glColor4f(p.color.r,p.color.g,p.color.b,1.0f);
gl.glScalef(p.particleSize,p.particleSize,0);
r.draw(gl);
gl.glPopMatrix();

}
}

}


Expand Down
25 changes: 0 additions & 25 deletions dust/src/main/java/com/billylindeman/dust/layer/ParticleLayer.java

This file was deleted.

50 changes: 50 additions & 0 deletions dust/src/main/java/com/billylindeman/dust/layer/Rectangle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.billylindeman.dust.layer;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;

import javax.microedition.khronos.opengles.GL10;

public class Rectangle {

private float vertices[]={
-1.0f, 1.0f, 0.0f,
-1.0f,-1.0f,0.0f,
1.0f,-1.0f,0.0f,
1.0f,1.0f,0.0f
};


private short[] indices = {0,1,2,0,2,3};

private FloatBuffer vertexBuffer;
private ShortBuffer indexBuffer;

public Rectangle(){
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);

ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);
}

public void draw(GL10 gl){
gl.glFrontFace(GL10.GL_CCW);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisable(GL10.GL_CULL_FACE);
}

}
Loading

0 comments on commit f69787b

Please sign in to comment.