static unsigned int
load_shader (GLuint type, 
             const char *filename)
{
   unsigned int shader_num = 0;
   char program_data [8000];
   FILE *f;
   unsigned int len;

   f = fopen (filename, "r");
   len = fread (program_data, 1, 8000, f);
   program_data [len] = '\0';
   fclose (f);   

   glEnable (type);
   _glGenProgramsARB (1, &shader_num);
   
   _glBindProgramARB (type, shader_num);
   _glProgramStringARB (type, GL_PROGRAM_FORMAT_ASCII_ARB, 
			strlen (program_data), (const GLbyte *) program_data);

   glDisable(type);

   return shader_num;
}
Exemple #2
0
static void
draw_video_plane (gdouble center_x, 
                  gdouble center_y, 
                  gdouble start_alpha, 
                  gdouble stop_alpha, 
                  gboolean reversed)
{
    glEnable (GL_FRAGMENT_PROGRAM_ARB);
    _glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, yuv_shader);

    gdouble topy;
    gdouble bottomy;
    if (! reversed) {
        topy = center_y - 1.0;
        bottomy = center_y + 1.0;
    } else {
        topy = center_y + 1.0;
        bottomy = center_y - 1.0;
    }

    glBegin (GL_QUADS);

    glColor4f (1.0, 1.0, 1.0, start_alpha);

    _glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0, VIDEO_HEIGHT); 
    _glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0, VIDEO_HEIGHT / 2); 
    _glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0, VIDEO_HEIGHT / 2); 
    glVertex2f (center_x - 1.6, topy);

    _glMultiTexCoord2fARB (GL_TEXTURE0_ARB, VIDEO_WIDTH, VIDEO_HEIGHT); 
    _glMultiTexCoord2fARB (GL_TEXTURE1_ARB, VIDEO_WIDTH / 2, VIDEO_HEIGHT / 2); 
    _glMultiTexCoord2fARB (GL_TEXTURE2_ARB, VIDEO_WIDTH / 2, VIDEO_HEIGHT / 2); 
    glVertex2f (center_x + 1.6, topy);

    glColor4f (1.0, 1.0, 1.0, stop_alpha);

    _glMultiTexCoord2fARB (GL_TEXTURE0_ARB, VIDEO_WIDTH, 0); 
    _glMultiTexCoord2fARB (GL_TEXTURE1_ARB, VIDEO_WIDTH / 2, 0); 
    _glMultiTexCoord2fARB (GL_TEXTURE2_ARB, VIDEO_WIDTH / 2, 0); 
    glVertex2f (center_x + 1.6, bottomy);

    _glMultiTexCoord2fARB (GL_TEXTURE0_ARB, 0, 0); 
    _glMultiTexCoord2fARB (GL_TEXTURE1_ARB, 0, 0); 
    _glMultiTexCoord2fARB (GL_TEXTURE2_ARB, 0, 0); 
    glVertex2f (center_x - 1.6, bottomy);

    glEnd ();

    glDisable (GL_FRAGMENT_PROGRAM_ARB);
}