Source code is below.

Robert Green provides some helpful information, for which I am
thankful.

However, I am not clear on two of the points.

 I currently have the situation where no lines at all show on the
emulator (the background color does) and things work perfectly on the
G1.

On Aug 2, 11:26 am, Robert Green <rbgrn....@gmail.com> wrote:
....
> 1)  You are in a native resolution to the screen you're rendering on
> (turn all the density and screen-size stuff on in the manifest to
> avoid compat mode)

Are these the  attributes on the "support-screens" tag? I did not have
that tag, but adding it and turning on all the attributes in the check-
boxes did not solve the problem.

> 2)  You draw the lines centered on their pixel, so they look a half
> pixel off.
> -- To draw a horizontal line across the top row of pixels, you need to
> make the line with 1.0f and have y be 0.5f (because it will draw from
> 0 to 1 that way)

I am drawing in fixed point projection(?) space, so the relationship
of the lines to pixels is not clear. Also, I don't want to have to
redraw the lines when the scale changes - I want to be able to zoom
and pan easily. Is there a way to achieve that and have the lines
show?

> 3)  Make sure you don't have any z-fighting.  Drawing 2 things on the
> exact same plane with depth-test turned on causes bad results on many
> opengl implementations.
Depth test turned off. I'm doing 2D only, so I think I'm clear there.

Again, thanks for the help.

============ CODE SNIPS ==============

----- Create glSurfaceView -------
  private GLSurfaceView makeGLSurfaceView(GLSurfaceView.Renderer
renderer, Context context) {
    GLSurfaceView view = new GLSurfaceView(context);
    view.setDebugFlags(GLSurfaceView.DEBUG_CHECK_GL_ERROR |
GLSurfaceView.DEBUG_LOG_GL_CALLS);
    view.setEGLConfigChooser(false);
    if ( renderer != null ) {
      view.setRenderer(renderer);
      view.setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
    }
    view.getHolder().setFormat(PixelFormat.OPAQUE);
    return view;
  } // make gl surface view

------------ onDrawFrame ----------

// Everything stuffed into onDrawFrame to make it easy to read on
forum
  @Override
  public void onDrawFrame(GL10 gl) {
    gl.glClearColor(0,0,.2f, 1f);
    gl.glDisable(GL10.GL_CULL_FACE);
    gl.glShadeModel(GL10.GL_FLAT);
    gl.glDisable(GL10.GL_DEPTH_TEST);
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glMatrixMode(GL10.GL_PROJECTION);
    gl.glLoadIdentity();
    gl.glViewport(0, 0, MyApp._width, MyApp._height);
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
    gl.glEnable(GL10.GL_LINE_SMOOTH);
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    _hgt2width = (float) MyApp._width / MyApp._height;
    gl.glOrthof(-_hgt2width, _hgt2width, -1, 1, 1, -1);

    gl.glScalef(1, _hgt2width, 1);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

    float lscale = .002f*MyApp._curScale;

    gl.glPushMatrix();
    gl.glColor4f(1f, 1f, 0f, 1f);

    gl.glTranslatef(.375f, .5f, 0f);
    gl.glScalef( lscale, lscale, 1f);
    gl.glVertexPointer(2, GL10.GL_FIXED, 0, _lineVertices);
    gl.glLineWidthx(0x1);
    drawArrays(gl);
    gl.glPopMatrix();

    gl.glPushMatrix();
    gl.glColor4f(1f, 1f, 1f, 1.0f);
    gl.glScalef( lscale*8, lscale*8, 1f);
    gl.glVertexPointer(2, GL10.GL_FIXED, 0, _lineVertices);
    gl.glLineWidthx(0x1);
    drawArrays(gl);
    gl.glPopMatrix();


  }
  void drawArrays(GL10 gl) {
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 0, 5); //small square
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 5, 5); //medium square
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 10, 5);//large square
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 15, 2);//x axis
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 17, 2);//y axis
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 19, 2);//X half
    gl.glDrawArrays(GL10.GL_LINE_STRIP, 21, 2);//X half
  }

  void makeLines() {
    int hlf = 0x08000;
    int one = 0x10000+hlf;
    int sml = one/8;
    int ten = one;
    int big = 0x40000000;
    Log.d("===jrm", String.format("one:%x   big:%x", one, big));
    int vertices[] = {
       -sml     ,         sml,    //0 start square - scale 1/10
        sml     ,         sml,    //1
        sml     ,        -sml,    //2
       -sml     ,        -sml,    //3
       -sml     ,         sml,    //4

       -one     ,         one,    //5 start square - scale 1
        one     ,         one,    //6
        one     ,        -one,    //7
       -one     ,        -one,    //8
       -one     ,         one,    //9

       -ten     ,         ten,    //10 start square - scale 10
        ten     ,         ten,    //11
        ten     ,        -ten,    //12
       -ten     ,        -ten,    //13
       -ten     ,         ten,    //14

       -big     ,           0,    //15 start coord axes over huge area
        big     ,           0,    //16

          0     ,         big,    //17
          0     ,        -big,    //18

       -big     ,        -big,    //19 start X over huge dimensions
        big     ,         big,    //20

       -big     ,         big,    //21
        big     ,        -big,    //22
        ten     ,         one     // BUT? Without this line, blows up
if openGL debug is enabled


    };
    this.numLines = vertices.length/2;

    ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4);
    vbb.order(ByteOrder.nativeOrder());
    _lineVertices = vbb.asIntBuffer();
    _lineVertices.put(vertices);
    _lineVertices.position(0);
  }

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to