 <p>Here's how I pass multi-touch to C++ code for an OpenGL program (with 1 or 2 fingers):</p> <pre><code>// Set this in your ViewController's init code [self setMultipleTouchEnabled:YES]; // Implement these in ViewController int touchCount = 0; UITouch* touch[2]; - (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{ NSArray* array = [touches allObjects]; UITouch* touchTemp; int t; int touchedPixel[2]; for(int i = 0; i &lt; [array count]; ++i){ touchTemp = [array objectAtIndex:i]; if(touchCount &gt;= 2) return; if(touch[0] == NULL) t = 0; else t = 1; touch[t] = touchTemp; CGPoint touchLoc = [touch[t] locationInView:(EAGLView *)self.view]; ++touchCount; touchedPixel[X] = touchLoc.x; touchedPixel[Y] = touchLoc.y; mainScreen-&gt;push(t, touchedPixel); // mainScreen is a C++ object for GL drawing. } } - (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event{ NSArray* array = [touches allObjects]; UITouch* touchTemp; int t; int touchedPixel[2]; for(int i = 0; i &lt; [array count]; ++i){ touchTemp = [array objectAtIndex:i]; for(t = 0; t &lt; 2; ++t){ // Find the matching touch in the array if(touchTemp == touch[t]) break; } if(t == 2) // Return if touch was not found continue; CGPoint touchLoc = [touch[t] locationInView:(EAGLView *)self.view]; touchedPixel[X] = touchLoc.x; touchedPixel[Y] = touchLoc.y; mainScreen-&gt;move(t, touchedPixel); } } - (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event{ NSArray* array = [touches allObjects]; UITouch* touchTemp; int t; int touchedPixel[2]; for(int i = 0; i &lt; [array count]; ++i){ touchTemp = [array objectAtIndex:i]; for(t = 0; t &lt; 2; ++t){ // Find the matching touch in the array if(touchTemp == touch[t]) break; } if(t == 2) // Return if touch was not found continue; CGPoint touchLoc = [touch[t] locationInView:(EAGLView *)self.view]; touch[t] = NULL; --touchCount; touchedPixel[X] = touchLoc.x; touchedPixel[Y] = touchLoc.y; mainScreen-&gt;release(t, touchedPixel); } } - (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event{ printf("Touch cancelled\n"); [self touchesEnded:touches withEvent: event]; } </code></pre>