- if( !initDone )
- {
- return;
- }
-
- [[self openGLContext] makeCurrentContext];
-
- glBindTexture( GL_TEXTURE_RECTANGLE_EXT, pi_textures[index] );
- glPixelStorei( GL_UNPACK_ROW_LENGTH, p_vout->output.i_width );
-
- /* glTexSubImage2D is faster than glTexImage2D
- http://developer.apple.com/samplecode/Sample_Code/Graphics_3D/
- TextureRange/MainOpenGLView.m.htm */
- glTexSubImage2D( GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0,
- p_vout->output.i_width, p_vout->output.i_height,
- GL_YCBCR_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE,
- p_vout->p_sys->p_data[index] );
-}
-
-- (void) cleanUp
-{
- initDone = 0;
-}
-
-- (void) drawQuad
-{
- glBegin( GL_QUADS );
- /* Top left */
- glTexCoord2f( 0.0, 0.0 );
- glVertex2f( - f_x, f_y );
- /* Bottom left */
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex2f( - f_x, - f_y );
- /* Bottom right */
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex2f( f_x, - f_y );
- /* Top right */
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex2f( f_x, f_y );
- glEnd();
-}
-
-- (void) drawCube
-{
- glBegin( GL_QUADS );
- /* Front */
- glTexCoord2f( 0.0, 0.0 );
- glVertex3f( - 1.0, 1.0, 1.0 );
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex3f( - 1.0, - 1.0, 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex3f( 1.0, - 1.0, 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex3f( 1.0, 1.0, 1.0 );
-
- /* Left */
- glTexCoord2f( 0.0, 0.0 );
- glVertex3f( - 1.0, 1.0, - 1.0 );
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex3f( - 1.0, - 1.0, - 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex3f( - 1.0, - 1.0, 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex3f( - 1.0, 1.0, 1.0 );
-
- /* Back */
- glTexCoord2f( 0.0, 0.0 );
- glVertex3f( 1.0, 1.0, - 1.0 );
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex3f( 1.0, - 1.0, - 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex3f( - 1.0, - 1.0, - 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex3f( - 1.0, 1.0, - 1.0 );
-
- /* Right */
- glTexCoord2f( 0.0, 0.0 );
- glVertex3f( 1.0, 1.0, 1.0 );
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex3f( 1.0, - 1.0, 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex3f( 1.0, - 1.0, - 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex3f( 1.0, 1.0, - 1.0 );
-
- /* Top */
- glTexCoord2f( 0.0, 0.0 );
- glVertex3f( - 1.0, 1.0, - 1.0 );
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex3f( - 1.0, 1.0, 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex3f( 1.0, 1.0, 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex3f( 1.0, 1.0, - 1.0 );
-
- /* Bottom */
- glTexCoord2f( 0.0, 0.0 );
- glVertex3f( - 1.0, - 1.0, 1.0 );
- glTexCoord2f( 0.0, (float) p_vout->output.i_height );
- glVertex3f( - 1.0, - 1.0, - 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width,
- (float) p_vout->output.i_height );
- glVertex3f( 1.0, - 1.0, - 1.0 );
- glTexCoord2f( (float) p_vout->output.i_width, 0.0 );
- glVertex3f( 1.0, - 1.0, 1.0 );
- glEnd();
-}
-
-- (void) drawRect: (NSRect) rect
-{
- [[self openGLContext] makeCurrentContext];
-
- /* Black background */
- glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
-
- if( !initDone )