summaryrefslogtreecommitdiffstats
path: root/src/com/android/phasebeam/phasebeam.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/phasebeam/phasebeam.rs')
-rw-r--r--src/com/android/phasebeam/phasebeam.rs105
1 files changed, 76 insertions, 29 deletions
diff --git a/src/com/android/phasebeam/phasebeam.rs b/src/com/android/phasebeam/phasebeam.rs
index c7dd513..77472ca 100644
--- a/src/com/android/phasebeam/phasebeam.rs
+++ b/src/com/android/phasebeam/phasebeam.rs
@@ -8,7 +8,6 @@
rs_allocation textureDot;
rs_allocation textureBeam;
-rs_allocation textureBg;
rs_program_vertex vertBg;
rs_program_fragment fragBg;
@@ -16,8 +15,8 @@ rs_program_fragment fragBg;
rs_program_vertex vertDots;
rs_program_fragment fragDots;
-int numBeamParticles;
-int numDotParticles;
+static int numBeamParticles;
+static int numDotParticles;
typedef struct __attribute__((packed, aligned(4))) Particle {
float3 position;
@@ -30,41 +29,55 @@ typedef struct VpConsts {
} VpConsts_t;
VpConsts_t *vpConstants;
+typedef struct VertexColor_s {
+ float3 position;
+ float offsetX;
+ float4 color;
+} VertexColor;
+
+VertexColor* vertexColors;
Particle_t *dotParticles;
Particle_t *beamParticles;
rs_mesh dotMesh;
rs_mesh beamMesh;
+rs_mesh gBackgroundMesh;
float densityDPI;
float xOffset = 0.5;
-float screenWidth;
-float screenHeight;
-float halfScreenWidth;
-float quarterScreenWidth;
+static float screenWidth;
+static float screenHeight;
+static float halfScreenWidth;
+static float quarterScreenWidth;
+static float quarterScreenHeight;
+static float halfScreenHeight;
-float newOffset = 0.5;
+static float newOffset = 0.5;
+static float oldOffset = 0.5;
void positionParticles(){
screenWidth = rsgGetWidth();
screenHeight = rsgGetHeight();
halfScreenWidth = screenWidth/2.0f;
+ halfScreenHeight = screenHeight/2.0f;
quarterScreenWidth = screenWidth/4.0f;
-
+ quarterScreenHeight = screenHeight/4.0f;
Particle_t* particle = dotParticles;
numDotParticles = rsAllocationGetDimX(rsGetAllocation(dotParticles));
for(int i=0; i<numDotParticles; i++){
+
+
particle->position.x = rsRand(0.0f, 3.0f);
particle->position.y = rsRand(-1.25f, 1.25f);
float z;
- if(i < 2){
+ if(i < 3){
z = 14.0f;
- } if(i < 3){
+ } if(i < 7){
z = 25.0f;
} else if(i < 4){
z = rsRand(10.f, 20.f);
- } else if(i == 5){
+ } else if(i == 10){
z = 24.0f;
particle->position.x = 1.0;
} else {
@@ -76,11 +89,12 @@ void positionParticles(){
particle++;
}
+
Particle_t* beam = beamParticles;
numBeamParticles = rsAllocationGetDimX(rsGetAllocation(beamParticles));
for(int i=0; i<numBeamParticles; i++){
float z;
- if(i < 10){
+ if(i < 20){
z = rsRand(4.0f, 10.0f)/2.0f;
} else {
z = rsRand(4.0f, 35.0f)/2.0f;
@@ -96,37 +110,67 @@ void positionParticles(){
int root(){
+ newOffset = xOffset*2;
rsgClearColor(0.0f, 0.f, 0.f,1.0f);
+
+
+ VertexColor* vert = vertexColors;
+ for(int i=0; i<48; i++){
+ vert->offsetX = -xOffset/2.0;
+ vert++;
+ }
+
+
rsgBindProgramVertex(vertBg);
rsgBindProgramFragment(fragBg);
- rsgBindTexture(fragBg, 0, textureBg);
- rsgDrawRect(-quarterScreenWidth + xOffset*quarterScreenWidth, 0.0f,
- screenWidth+halfScreenWidth + xOffset*quarterScreenWidth, screenHeight, 0.0f);
+
+ rsgDrawMesh(gBackgroundMesh);
+
Particle_t* beam = beamParticles;
Particle_t* particle = dotParticles;
- newOffset = xOffset*2;
+
for(int i=0; i<numDotParticles; i++){
- if(beam->position.y > 1.05){
- beam->position.y = -1.05;
- } else {
- beam->position.y = beam->position.y + 0.000160*beam->position.z;
- }
- beam->offsetX = newOffset;
- beam++;
+ if(newOffset==oldOffset){
+ if(beam->position.x/beam->position.z > 0.5){
+ beam->position.x = -1.0;
+ }
+ if(particle->position.x/particle->position.z > 0.5){
+ particle->position.x = -1.0;
+ }
+
+ if(beam->position.y > 1.05){
+ beam->position.y = -1.05;
+ beam->position.x = rsRand(-1.25f, 1.25f);
+ } else {
+ beam->position.y = beam->position.y + 0.000160*beam->position.z;
+ }
+ if(particle->position.y > 1.25){
+ particle->position.y = -1.25;
+ particle->position.x = rsRand(0.0f, 3.0f);
+
+ } else {
+ particle->position.y = particle->position.y + 0.00022*particle->position.z;
+ }
+
- if(particle->position.y > 1.25){
- particle->position.y = -1.25;
- } else {
- particle->position.y = particle->position.y + 0.00022*particle->position.z;
}
+
+
+
+ beam->position.x = beam->position.x + 0.0001010*beam->position.z;
+ beam->offsetX = newOffset;
+ beam++;
particle->offsetX = newOffset;
+ particle->position.x = particle->position.x + 0.0001560*beam->position.z;
particle++;
}
+
+
rsgBindProgramVertex(vertDots);
rsgBindProgramFragment(fragDots);
@@ -136,5 +180,8 @@ int root(){
rsgBindTexture(fragDots, 0, textureDot);
rsgDrawMesh(dotMesh);
- return 45;
+ oldOffset = newOffset;
+
+ return 55;
+
}