~compiz-team/compiz/0.9.12

« back to all changes in this revision

Viewing changes to plugins/text/src/text.cpp

  • Committer: Sam Spilsbury
  • Date: 2012-08-22 10:07:45 UTC
  • mfrom: (3201.2.177 gles2)
  • mto: (3248.1.29 compiz)
  • mto: This revision was merged to the branch mainline in revision 3451.
  • Revision ID: sam.spilsbury@canonical.com-20120822100745-j5bofdehkq79wcvq
Merge

Show diffs side-by-side

added added

removed removed

Lines of Context:
487
487
}
488
488
 
489
489
void
490
 
CompText::draw (float x,
 
490
CompText::draw (const GLMatrix &transform,
 
491
                float           x,
491
492
                float y,
492
493
                float alpha) const
493
494
{
494
 
    GLboolean  wasBlend;
495
495
    GLint      oldBlendSrc, oldBlendDst;
 
496
    GLushort        colorData[4];
 
497
    GLfloat         textureData[8];
 
498
    GLfloat         vertexData[12];
 
499
    GLVertexBuffer *streamingBuffer = GLVertexBuffer::streamingBuffer ();
496
500
 
497
501
    if (texture.empty ())
498
502
        return;
499
503
 
 
504
#ifdef USE_GLES
 
505
    GLint           oldBlendSrcAlpha, oldBlendDstAlpha;
 
506
    glGetIntegerv (GL_BLEND_SRC_RGB, &oldBlendSrc);
 
507
    glGetIntegerv (GL_BLEND_DST_RGB, &oldBlendDst);
 
508
    glGetIntegerv (GL_BLEND_SRC_ALPHA, &oldBlendSrcAlpha);
 
509
    glGetIntegerv (GL_BLEND_DST_ALPHA, &oldBlendDstAlpha);
 
510
#else
500
511
    glGetIntegerv (GL_BLEND_SRC, &oldBlendSrc);
501
512
    glGetIntegerv (GL_BLEND_DST, &oldBlendDst);
502
 
 
503
 
    wasBlend = glIsEnabled (GL_BLEND);
504
 
    if (!wasBlend)
505
 
        glEnable (GL_BLEND);
 
513
#endif
506
514
 
507
515
    glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
508
516
 
509
 
    glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
510
 
    glColor4f (alpha, alpha, alpha, alpha);
 
517
    colorData[0] = alpha * 65535;
 
518
    colorData[1] = alpha * 65535;
 
519
    colorData[2] = alpha * 65535;
 
520
    colorData[3] = alpha * 65535;
511
521
 
512
522
    for (unsigned int i = 0; i < texture.size (); i++)
513
523
    {
516
526
 
517
527
        tex->enable (GLTexture::Good);
518
528
 
519
 
        glBegin (GL_QUADS);
520
 
 
521
 
        glTexCoord2f (COMP_TEX_COORD_X (m, 0), COMP_TEX_COORD_Y (m, 0));
522
 
        glVertex2f (x, y - height);
523
 
        glTexCoord2f (COMP_TEX_COORD_X (m, 0), COMP_TEX_COORD_Y (m, height));
524
 
        glVertex2f (x, y);
525
 
        glTexCoord2f (COMP_TEX_COORD_X (m, width), COMP_TEX_COORD_Y (m, height));
526
 
        glVertex2f (x + width, y);
527
 
        glTexCoord2f (COMP_TEX_COORD_X (m, width), COMP_TEX_COORD_Y (m, 0));
528
 
        glVertex2f (x + width, y - height);
529
 
 
530
 
        glEnd ();
 
529
        streamingBuffer->begin (GL_TRIANGLE_STRIP);
 
530
 
 
531
        vertexData[0]  = x;
 
532
        vertexData[1]  = y - height;
 
533
        vertexData[2]  = 0;
 
534
        vertexData[3]  = x;
 
535
        vertexData[4]  = y;
 
536
        vertexData[5]  = 0;
 
537
        vertexData[6]  = x + width;
 
538
        vertexData[7]  = y - height;
 
539
        vertexData[8]  = 0;
 
540
        vertexData[9]  = x + width;
 
541
        vertexData[10] = y;
 
542
        vertexData[11] = 0;
 
543
 
 
544
        textureData[0] = COMP_TEX_COORD_X (m, 0);
 
545
        textureData[1] = COMP_TEX_COORD_Y (m, 0);
 
546
        textureData[2] = COMP_TEX_COORD_X (m, 0);
 
547
        textureData[3] = COMP_TEX_COORD_Y (m, height);
 
548
        textureData[4] = COMP_TEX_COORD_X (m, width);
 
549
        textureData[5] = COMP_TEX_COORD_Y (m, 0);
 
550
        textureData[6] = COMP_TEX_COORD_X (m, width);
 
551
        textureData[7] = COMP_TEX_COORD_Y (m, height);
 
552
 
 
553
        streamingBuffer->addColors (1, colorData);
 
554
        streamingBuffer->addVertices (4, vertexData);
 
555
        streamingBuffer->addTexCoords (0, 4, textureData);
 
556
 
 
557
        streamingBuffer->end ();
 
558
        streamingBuffer->render (transform);
531
559
 
532
560
        tex->disable ();
533
561
    }
534
562
 
535
 
    glColor4usv (defaultColor);
536
 
 
537
 
    if (!wasBlend)
538
 
        glDisable (GL_BLEND);
 
563
#ifdef USE_GLES
 
564
    glBlendFuncSeparate (oldBlendSrc, oldBlendDst,
 
565
                         oldBlendSrcAlpha, oldBlendDstAlpha);
 
566
#else
539
567
    glBlendFunc (oldBlendSrc, oldBlendDst);
 
568
#endif
540
569
}
541
570
 
542
571
CompText::CompText () :