コード例 #1
0
ファイル: glw_video_rsx.c プロジェクト: Allba/showtime
static void
surface_init(glw_video_t *gv, glw_video_surface_t *gvs,
	     const glw_video_config_t *gvc)
{
  int i;
  int siz[3];

  for(i = 0; i < 3; i++)
    siz[i] = ROUND_UP(gvc->gvc_width[i] * gvc->gvc_height[i], 16);

  gvs->gvs_size = siz[0] + siz[1] + siz[2];
  gvs->gvs_offset = rsx_alloc(gvs->gvs_size, 16);

  gvs->gvs_data[0] = rsx_to_ppu(gvs->gvs_offset);
  gvs->gvs_data[1] = rsx_to_ppu(gvs->gvs_offset + siz[0]);
  gvs->gvs_data[2] = rsx_to_ppu(gvs->gvs_offset + siz[0] + siz[1]);

  int offset = gvs->gvs_offset;
  for(i = 0; i < 3; i++) {

    init_tex(&gvs->gvs_tex[i],
	     offset,
	     gvc->gvc_width[i],
	     gvc->gvc_height[i],
	     gvc->gvc_width[i],
	     NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	     NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	     NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	     NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	     NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	     );
    offset += siz[i];
  }
  TAILQ_INSERT_TAIL(&gv->gv_avail_queue, gvs, gvs_link);
}
コード例 #2
0
ファイル: glw_video_rsx.c プロジェクト: dreamcat4/showtime
static void
surface_init(glw_video_t *gv, glw_video_surface_t *gvs)
{
  int i;
  int siz[3];

  surface_reset(gv, gvs);

  for(i = 0; i < 3; i++)
    siz[i] = ROUND_UP(gvs->gvs_width[i] * gvs->gvs_height[i], 16);

  gvs->gvs_size = siz[0] + siz[1] + siz[2];
  gvs->gvs_offset = rsx_alloc(gvs->gvs_size, 16);

  gvs->gvs_data[0] = rsx_to_ppu(gvs->gvs_offset);
  gvs->gvs_data[1] = rsx_to_ppu(gvs->gvs_offset + siz[0]);
  gvs->gvs_data[2] = rsx_to_ppu(gvs->gvs_offset + siz[0] + siz[1]);

  int offset = gvs->gvs_offset;
  for(i = 0; i < 3; i++) {

    init_tex(&gvs->gvs_tex[i],
	     offset,
	     gvs->gvs_width[i],
	     gvs->gvs_height[i],
	     gvs->gvs_width[i],
	     NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	     NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	     NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	     NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	     NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	     );
    offset += siz[i];
  }
}
コード例 #3
0
ファイル: glw_video_rsx.c プロジェクト: carlinx/showtime
static void
surface_init(glw_video_t *gv, glw_video_surface_t *gvs,
	     const glw_video_config_t *gvc)
{
  glw_root_t *gr = gv->w.glw_root;
  int i;

  for(i = 0; i < 3; i++) {
    gvs->gvs_size[i] = gvc->gvc_width[i] * gvc->gvc_height[i];
    gvs->gvs_offset[i]  = rsx_alloc(gr, gvs->gvs_size[i], 16);
    gvs->gvs_data[i] = rsx_to_ppu(gr, gvs->gvs_offset[i]);

    init_tex(&gvs->gvs_tex[i],
	     gvs->gvs_offset[i],
	     gvc->gvc_width[i],
	     gvc->gvc_height[i],
	     gvc->gvc_width[i],
	     NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	     NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	     NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	     NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	     NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	     );
  }
  TAILQ_INSERT_TAIL(&gv->gv_avail_queue, gvs, gvs_link);
}
コード例 #4
0
ファイル: cube.c プロジェクト: jpeak5/csc4356
cube *cube_create(void)
{
    cube *C;

    if ((C = (cube *) malloc(sizeof (cube))))
    {
        glGenBuffers (1, C->vbo);
        glGenBuffers (1, C->ebo);
        glGenTextures(6, C->tex);

        init_vbo(C);
        init_tex(C);
    }
    return C;
}
コード例 #5
0
ファイル: init_texmacs.cpp プロジェクト: xywei/texmacs
void
init_plugins () {
  install_status= 0;
  url old_settings= "$TEXMACS_HOME_PATH/system/TEX_PATHS";
  url new_settings= "$TEXMACS_HOME_PATH/system/settings.scm";
  string s;
  if (load_string (new_settings, s, false)) {
    if (load_string (old_settings, s, false)) {
      setup_texmacs ();
      install_status= 1;
    }
    else get_old_settings (s);
  }
  else texmacs_settings= block_to_scheme_tree (s);
  if (get_setting ("VERSION") != TEXMACS_VERSION) {
    init_upgrade ();
    url ch ("$TEXMACS_HOME_PATH/doc/about/changes/changes-recent.en.tm");
    install_status= exists (ch)? 2: 0;
  }
  init_tex ();
}
コード例 #6
0
ファイル: fs-test.c プロジェクト: mlankhorst/Mesa-3D
static void init( void )
{
   struct pipe_framebuffer_state fb;
   struct pipe_resource templat;
   struct pipe_surface surf_tmpl;
   int i;

   /* It's hard to say whether window or screen should be created
    * first.  Different environments would prefer one or the other.
    *
    * Also, no easy way of querying supported formats if the screen
    * cannot be created first.
    */
   for (i = 0; formats[i] != PIPE_FORMAT_NONE; i++) {
      screen = graw_create_window_and_screen(0, 0, 300, 300,
                                             formats[i],
                                             &window);
      if (window && screen)
         break;
   }
   if (!screen || !window) {
      fprintf(stderr, "Unable to create window\n");
      exit(1);
   }

   ctx = screen->context_create(screen, NULL);
   if (ctx == NULL)
      exit(3);

   templat.target = PIPE_TEXTURE_2D;
   templat.format = formats[i];
   templat.width0 = WIDTH;
   templat.height0 = HEIGHT;
   templat.depth0 = 1;
   templat.array_size = 1;
   templat.last_level = 0;
   templat.nr_samples = 1;
   templat.bind = (PIPE_BIND_RENDER_TARGET |
                   PIPE_BIND_DISPLAY_TARGET);
   
   rttex = screen->resource_create(screen,
                                 &templat);
   if (rttex == NULL)
      exit(4);

   surf_tmpl.format = templat.format;
   surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;
   surf_tmpl.u.tex.level = 0;
   surf_tmpl.u.tex.first_layer = 0;
   surf_tmpl.u.tex.last_layer = 0;
   surf = ctx->create_surface(ctx, rttex, &surf_tmpl);
   if (surf == NULL)
      exit(5);

   memset(&fb, 0, sizeof fb);
   fb.nr_cbufs = 1;
   fb.width = WIDTH;
   fb.height = HEIGHT;
   fb.cbufs[0] = surf;

   ctx->set_framebuffer_state(ctx, &fb);
   
   {
      struct pipe_blend_state blend;
      void *handle;
      memset(&blend, 0, sizeof blend);
      blend.rt[0].colormask = PIPE_MASK_RGBA;
      handle = ctx->create_blend_state(ctx, &blend);
      ctx->bind_blend_state(ctx, handle);
   }

   {
      struct pipe_depth_stencil_alpha_state depthstencil;
      void *handle;
      memset(&depthstencil, 0, sizeof depthstencil);
      handle = ctx->create_depth_stencil_alpha_state(ctx, &depthstencil);
      ctx->bind_depth_stencil_alpha_state(ctx, handle);
   }

   {
      struct pipe_rasterizer_state rasterizer;
      void *handle;
      memset(&rasterizer, 0, sizeof rasterizer);
      rasterizer.cull_face = PIPE_FACE_NONE;
      rasterizer.gl_rasterization_rules = 1;
      handle = ctx->create_rasterizer_state(ctx, &rasterizer);
      ctx->bind_rasterizer_state(ctx, handle);
   }

   set_viewport(0, 0, WIDTH, HEIGHT, 30, 1000);

   init_tex();
   init_fs_constbuf();

   set_vertices();
   set_vertex_shader();
   set_fragment_shader(filename);
}
コード例 #7
0
ファイル: glw_video_rsx.c プロジェクト: dreamcat4/showtime
static int
rsx_deliver(const frame_info_t *fi, glw_video_t *gv, glw_video_engine_t *gve)
{
  int hvec[3], wvec[3];
  int i;
  int hshift = 1, vshift = 1;
  glw_video_surface_t *gvs;


  wvec[0] = fi->fi_width;
  wvec[1] = fi->fi_width >> hshift;
  wvec[2] = fi->fi_width >> hshift;
  hvec[0] = fi->fi_height >> fi->fi_interlaced;
  hvec[1] = fi->fi_height >> (vshift + fi->fi_interlaced);
  hvec[2] = fi->fi_height >> (vshift + fi->fi_interlaced);


  glw_video_configure(gv, gve);
  
  gv_color_matrix_set(gv, fi);

  if((gvs = glw_video_get_surface(gv, NULL, NULL)) == NULL)
    return -1;

  surface_reset(gv, gvs);

  gvs->gvs_offset = fi->fi_pitch[0];
  gvs->gvs_size   = fi->fi_pitch[1];
  gvs->gvs_width[0]  = fi->fi_width;
  gvs->gvs_height[0] = fi->fi_height;

  int offset = gvs->gvs_offset;

  if(fi->fi_interlaced) {
    // Interlaced

    for(i = 0; i < 3; i++) {
      int w = wvec[i];
      int h = hvec[i];

      init_tex(&gvs->gvs_tex[i],
	       offset + !fi->fi_tff * wvec[i],
	       w, h, w*2,
	       NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	       NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	       NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	       NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	       NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	       );
      offset += w * (fi->fi_height >> (i ? vshift : 0));
    }
    glw_video_put_surface(gv, gvs, fi->fi_pts, fi->fi_epoch,
			  fi->fi_duration/2, 1, !fi->fi_tff);

    if((gvs = glw_video_get_surface(gv, NULL, NULL)) == NULL)
      return -1;
  
    surface_reset(gv, gvs);

    gvs->gvs_offset = fi->fi_pitch[0];
    gvs->gvs_size   = fi->fi_pitch[1];
    gvs->gvs_width[0]  = fi->fi_width;
    gvs->gvs_height[0] = fi->fi_height;

    offset = gvs->gvs_offset;

    for(i = 0; i < 3; i++) {
      int w = wvec[i];
      int h = hvec[i];

      init_tex(&gvs->gvs_tex[i],
	       offset + !!fi->fi_tff * wvec[i],
	       w, h, w*2,
	       NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	       NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	       NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	       NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	       NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	       );
      offset += w * (fi->fi_height >> (i ? vshift : 0));
    }

    glw_video_put_surface(gv, gvs, fi->fi_pts + fi->fi_duration, fi->fi_epoch,
			  fi->fi_duration/2, 1, fi->fi_tff);

  } else {
    // Progressive

    for(i = 0; i < 3; i++) {
コード例 #8
0
ファイル: ogl.cpp プロジェクト: keithw/ahab
void OpenGLDisplay::init_context( void ) {
  int attributes[] = { GLX_RGBA,
		       GLX_DOUBLEBUFFER, True,
		       GLX_RED_SIZE, 8,
		       GLX_GREEN_SIZE, 8,
		       GLX_BLUE_SIZE, 8,
		       None };

  XVisualInfo *visual = glXChooseVisual( state.display, 0, attributes );
  if ( visual == NULL ) {
    fprintf( stderr, "Could not open glX visual.\n" );
    throw DisplayError();
  }

  state.context = glXCreateContext( state.display, visual, NULL, True );
  if ( state.context == NULL ) {
    fprintf( stderr, "No glX context.\n" );
    throw DisplayError();
  }

  XFree( visual );

  if ( !glXMakeCurrent( state.display, state.window, state.context ) ) {
    fprintf( stderr, "Could not reactivate OpenGL.\n" );
    throw DisplayError();
  }

  GLcheck( "glXMakeCurrent" );

  /* initialize textures */
  init_tex( GL_TEXTURE0, GL_LUMINANCE8, &state.Y_tex,
	    state.framewidth, state.frameheight, GL_LINEAR );
  init_tex( GL_TEXTURE1, GL_LUMINANCE8, &state.Cb_tex,
	    state.framewidth/2, state.frameheight/2, GL_LINEAR );
  init_tex( GL_TEXTURE2, GL_LUMINANCE8, &state.Cr_tex,
	    state.framewidth/2, state.frameheight/2, GL_LINEAR );

  /* load the shader */
  GLint errorloc;  
  glEnable( GL_FRAGMENT_PROGRAM_ARB );
  glGenProgramsARB( 1, &shader );
  glBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, shader );
  glProgramStringARB( GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
		      strlen( ahab_fragment_program ),
		      ahab_fragment_program );
  glGetIntegerv( GL_PROGRAM_ERROR_POSITION_ARB, &errorloc );
  if ( errorloc != -1 ) {
    fprintf( stderr, "Error in fragment shader at position %d.\n", errorloc );
    fprintf( stderr, "Error string: %s\n",
	     glGetString( GL_PROGRAM_ERROR_STRING_ARB ) );
    throw DisplayError();
  }

  GLcheck( "glProgramString" );

  /* guess colors */
  if ( state.frameheight <= 480 ) {
    smpte170m.execute( state );
  } else {
    itu709.execute( state );
  }
}
コード例 #9
0
ファイル: glw_video_rsx.c プロジェクト: Allba/showtime
void
glw_video_input_rsx_mem(glw_video_t *gv, void *frame,
			const frame_info_t *fi)
{
  rsx_video_frame_t *rvf = frame;
  int hvec[3], wvec[3];
  int i;
  int hshift, vshift;
  glw_video_surface_t *gvs;

  avcodec_get_chroma_sub_sample(fi->fi_pix_fmt, &hshift, &vshift);

  wvec[0] = fi->fi_width;
  wvec[1] = fi->fi_width >> hshift;
  wvec[2] = fi->fi_width >> hshift;
  hvec[0] = fi->fi_height >> fi->fi_interlaced;
  hvec[1] = fi->fi_height >> (vshift + fi->fi_interlaced);
  hvec[2] = fi->fi_height >> (vshift + fi->fi_interlaced);


  if(glw_video_configure(gv, &glw_video_rsxmem, wvec, hvec, 3,
			 fi->fi_interlaced ? (GVC_YHALF | GVC_CUTBORDER) : 0))
    return;
  
  gv_color_matrix_set(gv, fi);

  if((gvs = glw_video_get_surface(gv)) == NULL)
    return;

  surface_reset(gv, gvs);

  gvs->gvs_size = rvf->rvf_size;
  gvs->gvs_offset = rvf->rvf_offset;

  int offset = gvs->gvs_offset;

  if(fi->fi_interlaced) {
    // Interlaced

    for(i = 0; i < 3; i++) {
      int w = wvec[i];
      int h = hvec[i];

      init_tex(&gvs->gvs_tex[i],
	       offset + !fi->fi_tff * wvec[i],
	       w, h, w*2,
	       NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	       NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	       NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	       NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	       NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	       );
      offset += w * (fi->fi_height >> (i ? vshift : 0));
    }
    glw_video_put_surface(gv, gvs, fi->fi_pts, fi->fi_epoch,
			  fi->fi_duration/2, 0);

    if((gvs = glw_video_get_surface(gv)) == NULL)
      return;
  
    surface_reset(gv, gvs);

    gvs->gvs_size = rvf->rvf_size;
    gvs->gvs_offset = rvf->rvf_offset;

    offset = gvs->gvs_offset;

    for(i = 0; i < 3; i++) {
      int w = wvec[i];
      int h = hvec[i];

      init_tex(&gvs->gvs_tex[i],
	       offset + !!fi->fi_tff * wvec[i],
	       w, h, w*2,
	       NV30_3D_TEX_FORMAT_FORMAT_I8, 0,
	       NV30_3D_TEX_SWIZZLE_S0_X_S1 | NV30_3D_TEX_SWIZZLE_S0_Y_S1 |
	       NV30_3D_TEX_SWIZZLE_S0_Z_S1 | NV30_3D_TEX_SWIZZLE_S0_W_S1 |
	       NV30_3D_TEX_SWIZZLE_S1_X_X | NV30_3D_TEX_SWIZZLE_S1_Y_Y |
	       NV30_3D_TEX_SWIZZLE_S1_Z_Z | NV30_3D_TEX_SWIZZLE_S1_W_W
	       );
      offset += w * (fi->fi_height >> (i ? vshift : 0));
    }

    glw_video_put_surface(gv, gvs, fi->fi_pts + fi->fi_duration, fi->fi_epoch,
			  fi->fi_duration/2, 0);

  } else {
    // Progressive

    for(i = 0; i < 3; i++) {