OpenCores
URL https://opencores.org/ocsvn/leros/leros/trunk

Subversion Repositories leros

[/] [leros/] [trunk/] [java/] [target/] [src/] [DrawLine.java] - Rev 6

Compare with Previous | Blame | View Log

import com.muvium.leros.Native;
 
import com.muvium.MuviumRunnable;
 
/*
 * Example program for Leros.
 * Line drawing benchmark for the JTRES 2011 paper submisssion.
 * 
 * Might in the meantime be broken, as this used a different IO class
 */
 
public class DrawLine extends MuviumRunnable {
 
    static int Axv ;
    static int Ayv ;
    static int Bxv ;
    static int Byv ;
    static int Z ;
    static int color ;
 
    static int  Ax = Axv;
    static int  Ay = Ayv;
    static int  Bx = Bxv;
    static int  By = Byv;
 
    static int  p ;
 
    public void run(){
        int dx = 0 ;
        int dy  = 0;
        int Xincr  = 0;
        int Yincr  = 0;
        int dPr = 0;
        int dPru = 0;
 
       while( true ){
 
             Axv = Native.rd(0);  
             Ayv = Native.rd(0);  
             Bxv = Native.rd(0);  
             Byv = Native.rd(0);  
             Z =   Native.rd(0);  
             color = Native.rd(0);  
 
              Ax = Axv;
              Ay = Ayv;
              Bx = Bxv;
              By = Byv;
 
           //dx = Math.abs(Ax - Bx);  //';  // store the change in X and Y of the line endpoints
           if( Bx > Ax ){
               dx = Bx - Ax;
           }else{
               dx = Ax - Bx;
           }
 
 
           //dY = Math.abs(AY - By);  //';  // store the change in X and Y of the line endpoints
           if( By > Ay ){
               dy = By - Ay;
           }else{
               dy = Ay - By;
           }
 
           if( dy == 0){
               //horizontalLine( Ax, Bx, AY ); //TODO Inline
 
            }else{
               if( dx == 0 ){
                  // verticalLine( AY, By, Ax );//TODO Inline
 
               }else{
 
              // 'diagonal line
 
            //'If dX = 0 Then drawHorizontal
 
       //'//------------------------------------------------------------------------
       //'// DETERMINE "DIRECTIONS" TO INCREMENT X AND Y (REGARDLESS OF DECISION)
       //'//------------------------------------------------------------------------
               if( Ax > Bx ){ // '// which direction in X?
                   Xincr = -1;
               }else{
                   Xincr = 1;
               }
 
               if(  Ay > By) { // '// which direction in Y?
                   Yincr = -1;
               }else{
                   Yincr = 1;
               }
 
 
       //'//------------------------------------------------------------------------
       //'// DETERMINE INDEPENDENT VARIABLE (ONE THAT ALWAYS INCREMENTS BY 1 (OR -1) )
       //'// AND INITIATE APPROPRIATE LINE DRAWING ROUTINE (BASED ON FIRST OCTANT
       //'// ALWAYS). THE X AND Y'S MAY BE FLIPPED IF Y IS THE INDEPENDENT VARIABLE.
       //'//------------------------------------------------------------------------
                       if (dx >= dy) { //              '// if X is the independent variable
 
                           dPr = dy * 2;             //   '// amount to increment decision if right is chosen (always)
                           dPru = dPr - (dx * 2) ;    //  '// amount to increment decision if up is chosen
 
                           p = dPr - dx ;              // '// decision variable start value
 
                           for(; dx >= 0; dx-- ){ //For dx = dx To 0 Step -1
 
                              // setPixel( Ax, AY, color );  
 
                               Native.wr( Z , 0);
                               Native.wr( color, 0);
                               Native.wr( Ax, 0);
                               Native.wr( Ay, 0);
 
 
                               Ax = Ax + Xincr;        // '// increment independent variable
                               if( p > 0 ){
                                   Ay = Ay + Yincr;
                               }
 
 
                               if( p > 0 ){
                                 p = p + dPru ;         //'// increment decision (for up)
                               }else{
                                   p = p + dPr;
                               }
 
                           }
 
                       }else{
 
                           dPr = dx * 2 ;           //    '// amount to increment decision if right is chosen (always)
                           dPru = dPr - (dy * 2)    ;//   '// amount to increment decision if up is chosen
                           p = dPr - dy             ;//  '// decision variable start value
 
                           for(; dy >= 0; dy--){ //For dY = dY To 0 Step -1    '// process each point in the line one at a time (just use dY)
 
                              //  setPixel( Ax, AY, color );  
                               Native.wr( Z , 0);
                               Native.wr( color, 0);
                               Native.wr( Ax, 0);
                               Native.wr( Ay, 0);
 
                               Ay = Ay + Yincr;        //  '// increment independent variable
                               if( p > 0 ){
                                   Ax = Ax + Xincr;
                               }
 
                               if( p > 0 ){ 
                                 p = p + dPru ;          // '// increment decision (for up)
                               }else{
                                   p = p + dPr;
                               }
 
                           }
                       }
 
               }
            }
 
            Native.wr(0xFF, 0); //Done
        }
 
    } //Run()
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.