Michel Dänzer wrote:
> On Mon, 2007-04-09 at 16:44 +0200, Agustin Rubio Mingorance wrote:
>   
>> I'm writting a 2D-app with double buffering. I use the env variable 
>> vblank_mode=3
>> for syncing to vblank and avoiding tearing. The monitor VertRefresh is 
>> set at 60 Hz.
>>
>> I'm using Xorg 7.1.1 + mesa 6.51 + i810 1.7.2
>>     
>
> A lot of improvements have been made in this area recently. I recommend
> at least Mesa 6.5.2 or git and i915 DRM 1.6 or newer, possibly also a
> newer version of xf86-video-intel.
>
>
>   
Hi,

I still have the problem with the new versions of Mesa and DRM.

I have noticed that the problem only appears in apps where I use textures.

I send a example below that get 27 FPS, no matter what value vblank_mode 
has (vert refresh is 60 Hz).

¿Any idea?


Thanks in advance


//main.cpp
extern "C"{
#include <GL/gl.h>
#include <GL/glut.h>
}

#include <iostream>

int fps_time = 0;
int fps_timebase = 0;
int frame = 0;
int sleep_time = 0;

#define TEXT_NUM 1
#define TEXT_SIZE 256
GLuint textures[TEXT_NUM];

void initGL (int argc, char* argv[])
{
  unsigned char* bitmap = new unsigned char [TEXT_SIZE * TEXT_SIZE * 3];

  //Color
  for (int i = 0; i < TEXT_SIZE * TEXT_SIZE * 3; i += 3){
    bitmap[i] = (i * 4) % 256;
    bitmap[i + 1] = 0;
    bitmap[i + 2] = 0;

  glGenTextures (TEXT_NUM , textures);
  glEnable (GL_TEXTURE_2D);

  for (int i = 0; i < TEXT_NUM; i++){
    glBindTexture (GL_TEXTURE_2D, textures[i]);

    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);


    glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA, TEXT_SIZE, TEXT_SIZE,
                  0, GL_RGB, GL_UNSIGNED_BYTE, bitmap);
  }
  delete[] bitmap;
}

void
keyPressed(unsigned char key, int x, int y)
{
  if (key == 'q') {
    exit (0);
  }
}

void
drawGLScene()
{

  frame++;
  fps_time = glutGet (GLUT_ELAPSED_TIME);
  if((fps_time - fps_timebase) > 1000){
    std::cout << "FPS:" << (1000 * frame) / (fps_time - fps_timebase)
              << std::endl;
    frame = 0;
    fps_timebase = fps_time;
  }



  float w = 200;
  float h = 75;
  float x = 0.0;
  for (int i = 0; i < 4; i++){
    float y = 0.0;
    for (int j = 0; j < 8; j++){
      glBindTexture (GL_TEXTURE_2D, textures[(j * 4) % TEXT_NUM]);
      glBegin (GL_QUADS);
      glVertex3f (x, y, -5);
      glTexCoord2f (0.0, 0.0);
      glVertex3f (x + w, y, -5);
      glTexCoord2f (1.0, 0.0);
      glVertex3f (x +w, y +h, -5);
      glTexCoord2f (1.0, 1.0);
      glVertex3f (x, y + h, -5);
      glTexCoord2f (0.0, 1.0);
      glEnd();
      y += h;
    }
    x += w;
  }

  glutSwapBuffers();
}

void
idle()
{
  glutPostRedisplay ();
}


int
main (int argc, char* argv[])
{
  glutInit (&argc, argv);
  glutInitDisplayMode (GLUT_RGBA| GLUT_DOUBLE  );
  glutInitWindowSize (800, 600);
  glutInitWindowPosition (100, 100);
  glutCreateWindow ("");

  glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
  glMatrixMode (GL_PROJECTION);
  glLoadIdentity ();

  glOrtho (0, 800, 0, 600, 0, 500);
  glMatrixMode (GL_MODELVIEW);

  glutSetCursor(GLUT_CURSOR_NONE);
  glShadeModel (GL_FLAT);
  glDisable (GL_DITHER);
  glEnable (GL_BLEND);
  glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glDisable(GL_DITHER);

  initGL (argc, argv);

  glutIdleFunc (idle);
  glutReshapeFunc (0);
  glutKeyboardFunc (keyPressed);
  glutDisplayFunc (drawGLScene);
  glutMainLoop ();

  return 0;
}

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mesa3d-dev mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/mesa3d-dev

Reply via email to