views:

33

answers:

0

There are three main ways I know of to draw a simple circle in OpenGL ES, as provided by the iPhone. They are all based on a simple algorithm (the VBO version is below).

void circleBufferData(GLenum target, float radius, GLsizei count, GLenum usage) {
  const int segments = count - 2;

  const float coefficient = 2.0f * (float) M_PI / segments;

  float *vertices = new float[2 * (segments + 2)];

  vertices[0] = 0;
  vertices[1] = 0;
  for (int i = 0; i <= segments; ++i) {
    float radians = i * coefficient;
    float j = radius * cosf(radians);
    float k = radius * sinf(radians);
    vertices[(i + 1) * 2] = j;
    vertices[(i + 1) * 2 + 1] = k;
  }

  glBufferData(target, sizeof(float) * 2 * (segments + 2), vertices, usage);
  glVertexPointer(2, GL_FLOAT, 0, 0);

  delete[] vertices;
}

The three ways that I know of to draw a simple circle are by using glDrawArray from an array of vertices held by the application; using glDrawArray from a vertex buffer; and by drawing to a texture on initialization and drawing the texture when rendering is requested. The first two methods I know fairly well (though I have not been able to get anti-aliasing to work). What code is involved for the last option (I am very new to OpenGL as a whole, so a detailed explanation would be very helpful)? Which is most efficient?