Home | History | Annotate | Download | only in vis4
      1 // Copyright (C) 2009 The Android Open Source Project
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //      http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 #pragma version(1)
     16 
     17 #pragma rs java_package_name(com.android.musicvis.vis4)
     18 
     19 #include "rs_graphics.rsh"
     20 
     21 // State
     22 float gAngle;
     23 int   gPeak;
     24 
     25 rs_program_vertex gPVBackground;
     26 rs_program_fragment gPFBackground;
     27 
     28 rs_allocation gTvumeter_background;
     29 rs_allocation gTvumeter_peak_on;
     30 rs_allocation gTvumeter_peak_off;
     31 rs_allocation gTvumeter_needle;
     32 rs_allocation gTvumeter_black;
     33 rs_allocation gTvumeter_frame;
     34 
     35 rs_program_store gPFSBackground;
     36 
     37 #define RSID_POINTS 1
     38 
     39 int root(void) {
     40     rsgClearColor(0.f, 0.f, 0.f, 1.f);
     41 
     42     // Draw the visualizer.
     43     rsgBindProgramVertex(gPVBackground);
     44     rsgBindProgramFragment(gPFBackground);
     45     rsgBindProgramStore(gPFSBackground);
     46 
     47     rs_matrix4x4 mat1;
     48     float scale = 0.0041;
     49     rsMatrixLoadTranslate(&mat1, 0.f, -90.0f * scale, 0.f);
     50     rsMatrixScale(&mat1, scale, scale, scale);
     51     rsgProgramVertexLoadModelMatrix(&mat1);
     52 
     53     // draw the background image (416x233)
     54     rsgBindTexture(gPFBackground, 0, gTvumeter_background);
     55     rsgDrawQuadTexCoords(
     56             -208.0f, -33.0f, 0.0f,        // space
     57                 0.0f, 1.0f,               // texture
     58             208, -33.0f, 0.0f,            // space
     59                 1.0f, 1.0f,               // texture
     60             208, 200.0f, 0.0f,            // space
     61                 1.0f, 0.0f,               // texture
     62             -208.0f, 200.0f, 0.0f,        // space
     63                 0.0f, 0.0f);              // texture
     64 
     65     // draw the peak indicator light (56x58)
     66     if (gPeak > 0) {
     67         rsgBindTexture(gPFBackground, 0, gTvumeter_peak_on);
     68     } else {
     69         rsgBindTexture(gPFBackground, 0, gTvumeter_peak_off);
     70     }
     71     rsgDrawQuadTexCoords(
     72             140.0f, 70.0f, -1.0f,         // space
     73                 0.0, 1.0f,                // texture
     74             196, 70.0f, -1.0f,            // space
     75                 1.0f, 1.0f,               // texture
     76             196, 128.0f, -1.0f,           // space
     77                 1.0f, 0.0f,               // texture
     78             140.0f, 128.0f, -1.0f,        // space
     79                 0.0f, 0.0f);              // texture
     80 
     81 
     82 
     83     // Draw the needle (88x262, center of rotation at 44,217 from top left)
     84 
     85     // set matrix so point of rotation becomes origin
     86     rsMatrixLoadTranslate(&mat1, 0.f, -147.0f * scale, 0.f);
     87     rsMatrixRotate(&mat1, gAngle - 90.f, 0.f, 0.f, 1.f);
     88     rsMatrixScale(&mat1, scale, scale, scale);
     89     rsgProgramVertexLoadModelMatrix(&mat1);
     90     rsgBindTexture(gPFBackground, 0, gTvumeter_needle);
     91     rsgDrawQuadTexCoords(
     92             -44.0f, -102.0f+57.f, 0.0f,    // space
     93                 0.0f, 1.0f,                // texture
     94             44.0f, -102.0f+57.f, 0.0f,     // space
     95                 1.0f, 1.0f,                // texture
     96             44.0f, 160.0f+57.f, 0.0f,      // space
     97                 1.0f, 0.0f,                // texture
     98             -44.0f, 160.0f+57.f, 0.0f,     // space
     99                 0.0f, 0.0f);               // texture
    100 
    101 
    102     // restore matrix
    103     rsMatrixLoadTranslate(&mat1, 0.f, -90.0f * scale, 0.f);
    104     rsMatrixScale(&mat1, scale, scale, scale);
    105     rsgProgramVertexLoadModelMatrix(&mat1);
    106 
    107     // erase the part of the needle we don't want to show
    108     rsgBindTexture(gPFBackground, 0, gTvumeter_black);
    109     rsgDrawQuad(-100.f, -55.f, 0.f,
    110              -100.f, -105.f, 0.f,
    111               100.f, -105.f, 0.f,
    112               100.f, -55.f, 0.f);
    113 
    114 
    115     // draw the frame (472x290)
    116     rsgBindTexture(gPFBackground, 0, gTvumeter_frame);
    117     rsgDrawQuadTexCoords(
    118             -236.0f, -60.0f, 0.0f,           // space
    119                 0.0f, 1.0f,                  // texture
    120             236, -60.0f, 0.0f,               // space
    121                 1.0f, 1.0f,                  // texture
    122             236, 230.0f, 0.0f,               // space
    123                 1.0f, 0.0f,                  // texture
    124             -236.0f, 230.0f, 0.0f,           // space
    125                 0.0f, 0.0f);                 // texture
    126 
    127     return 1;
    128 }
    129