diff options
Diffstat (limited to 'src/com/android/phasebeam/phasebeam.rs')
-rw-r--r-- | src/com/android/phasebeam/phasebeam.rs | 105 |
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; + } |