示例#1
0
static void switch_font_render_msg(
    video_frame_info_t *video_info,
    void *data, const char *msg,
    const struct font_params *params)
{
      float x, y, scale, drop_mod, drop_alpha;
      int drop_x, drop_y;
      unsigned max_glyphs;
      enum text_alignment text_align;
      unsigned color, color_dark, r, g, b,
          alpha, r_dark, g_dark, b_dark, alpha_dark;
      switch_font_t *font = (switch_font_t *)data;
      unsigned width = video_info->width;
      unsigned height = video_info->height;

      if (!font || !msg || msg && !*msg)
            return;

      if (params)
      {
            x = params->x;
            y = params->y;
            scale = params->scale;
            text_align = params->text_align;
            drop_x = params->drop_x;
            drop_y = params->drop_y;
            drop_mod = params->drop_mod;
            drop_alpha = params->drop_alpha;

            r = FONT_COLOR_GET_RED(params->color);
            g = FONT_COLOR_GET_GREEN(params->color);
            b = FONT_COLOR_GET_BLUE(params->color);
            alpha = FONT_COLOR_GET_ALPHA(params->color);

            color = params->color;
      }
      else
      {
            x = 0.0f;
            y = 0.0f;
            scale = 1.0f;
            text_align = TEXT_ALIGN_LEFT;

            r = (video_info->font_msg_color_r * 255);
            g = (video_info->font_msg_color_g * 255);
            b = (video_info->font_msg_color_b * 255);
            alpha = 255;
            color = COLOR_ABGR(r, g, b, alpha);

            drop_x = -2;
            drop_y = -2;
            drop_mod = 0.3f;
            drop_alpha = 1.0f;
      }

      max_glyphs = strlen(msg);

      /*if (drop_x || drop_y)
      max_glyphs    *= 2;

   if (drop_x || drop_y)
   {
      r_dark         = r * drop_mod;
      g_dark         = g * drop_mod;
      b_dark         = b * drop_mod;
      alpha_dark     = alpha * drop_alpha;
      color_dark     = COLOR_ABGR(r_dark, g_dark, b_dark, alpha_dark);

      switch_font_render_message(video_info, font, msg, scale, color_dark,
                              x + scale * drop_x / width, y +
                              scale * drop_y / height, text_align);
   }*/

      switch_font_render_message(video_info, font, msg, scale,
                                 color, x, y, text_align);
}
示例#2
0
static void menu_display_ctr_draw(void *data)
{
    struct ctr_texture *texture = NULL;
    const float *color          = NULL;
    ctr_video_t             *ctr = (ctr_video_t*)video_driver_get_ptr(false);
    menu_display_ctx_draw_t *draw    = (menu_display_ctx_draw_t*)data;

   if (!ctr || !draw)
      return;

    texture            = (struct ctr_texture*)draw->texture;
    color              = draw->coords->color;

    if (!texture)
       return;

    ctr_scale_vector_t scale_vector;
    ctr_set_scale_vector(&scale_vector,
                         CTR_TOP_FRAMEBUFFER_WIDTH, CTR_TOP_FRAMEBUFFER_HEIGHT,
                         texture->width, texture->height);
    ctrGuSetVertexShaderFloatUniform(0, (float*)&scale_vector, 1);

    if ((ctr->vertex_cache.size - (ctr->vertex_cache.current - ctr->vertex_cache.buffer)) < 1)
       ctr->vertex_cache.current = ctr->vertex_cache.buffer;

    ctr_vertex_t* v = ctr->vertex_cache.current++;

    v->x0 = draw->x;
    v->y0 = 240 - draw->height - draw->y;
    v->x1 = v->x0 + draw->width;
    v->y1 = v->y0 + draw->height;
    v->u0 = 0;
    v->v0 = 0;
    v->u1 = texture->active_width;
    v->v1 = texture->active_height;

    ctrGuSetAttributeBuffers(2,
                             VIRT_TO_PHYS(v),
                             CTRGU_ATTRIBFMT(GPU_SHORT, 4) << 0 |
                             CTRGU_ATTRIBFMT(GPU_SHORT, 4) << 4,
                             sizeof(ctr_vertex_t));

    color = draw->coords->color;
    int colorR = (int)((*color++)*255.f);
    int colorG = (int)((*color++)*255.f);
    int colorB = (int)((*color++)*255.f);
    int colorA = (int)((*color++)*255.f);

    GPU_SetTexEnv(0,
                  GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, 0),
                  GPU_TEVSOURCES(GPU_TEXTURE0, GPU_CONSTANT, 0),
                  0,
                  0,
                  GPU_MODULATE, GPU_MODULATE,
                  COLOR_ABGR(colorR,colorG,colorB,colorA)
                  );
//    GPU_SetTexEnv(0,
//                  GPU_TEVSOURCES(GPU_CONSTANT, GPU_CONSTANT, 0),
//                  GPU_TEVSOURCES(GPU_CONSTANT, GPU_CONSTANT, 0),
//                  0,
//                  GPU_TEVOPERANDS(GPU_TEVOP_RGB_SRC_COLOR, GPU_TEVOP_RGB_SRC_COLOR, 0),
//                  GPU_REPLACE, GPU_REPLACE,
//                  0x3FFFFFFF);

    ctrGuSetTexture(GPU_TEXUNIT0, VIRT_TO_PHYS(texture->data), texture->width, texture->height,
                    GPU_TEXTURE_MAG_FILTER(GPU_LINEAR)  | GPU_TEXTURE_MIN_FILTER(GPU_LINEAR) |
                    GPU_TEXTURE_WRAP_S(GPU_CLAMP_TO_EDGE) | GPU_TEXTURE_WRAP_T(GPU_CLAMP_TO_EDGE),
                    GPU_RGBA8);


    GPU_SetViewport(NULL,
                    VIRT_TO_PHYS(ctr->drawbuffers.top.left),
                    0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT,
                    ctr->video_mode == CTR_VIDEO_MODE_800x240 ? CTR_TOP_FRAMEBUFFER_WIDTH * 2 : CTR_TOP_FRAMEBUFFER_WIDTH);

    GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1);

    if (ctr->video_mode == CTR_VIDEO_MODE_3D)
    {
       GPU_SetViewport(NULL,
                       VIRT_TO_PHYS(ctr->drawbuffers.top.right),
                       0, 0, CTR_TOP_FRAMEBUFFER_HEIGHT,
                       CTR_TOP_FRAMEBUFFER_WIDTH);
       GPU_DrawArray(GPU_GEOMETRY_PRIM, 0, 1);
    }

    GPU_SetTexEnv(0, GPU_TEXTURE0, GPU_TEXTURE0, 0, 0, GPU_REPLACE, GPU_REPLACE, 0);
//    printf("(%i,%i,%i,%i) , (%i,%i)\n", (int)draw->x, (int)draw->y, (int)draw->width, (int)draw->height, texture->width, texture->height);
}
示例#3
0
void CRadarArea::SetColor ( unsigned char ucRed, unsigned char ucGreen, unsigned char ucBlue, unsigned char ucAlpha )
{
    SetColor ( COLOR_ABGR ( ucAlpha, ucBlue, ucGreen, ucRed ) );
}