LINUX.ORG.RU
ФорумTalks

Давайте померяемся: простой тест OpenGL


0

0

"Тысяча чортовых кубиков" крутятся вокруг фиксированной оси с постоянной угловой скоростью

Исходник + Makefile здесь: http://www.ptlan.com/~pacify/download/test-gcc-opengl-linux.org.ru.tar.bz2 (7 kB)

После замера напишите, пожалуйста, следующую информацию:
Тип и частота процессора (например, P4, 2800 MHz)
Наименование карточки (например, S3 Trio 64V+)
Версия X-сервера (например, xorg 7.1)
Драйвер видеоадаптера
Библиотека OpenGL
Номер версии компилятора*
Номер версии libc*
Количество FPS, которое выдает программа в консоль
* опционально

У меня: Duron 700 MHz, GF4 MX440-SE, Xorg 7.1.1, nv, freeglut 2.4.0,
gcc 4.1.2, glibc 2.3.6; FPS = 5-6

P.S. Входить из программы по Esc

★★★★★

Для тех, кто не любит ходить по ссылкам.

%--- test.c
// This software is under BSD license, author: xmpp:pacify@jabber.ru

#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

#include <pthread.h> // pthread_create()
#include <unistd.h>  // usleep()
#include <stdio.h>   // printf()
#include <stdlib.h>  // exit()

#define TRUE 1
unsigned int FPS = 0;
double angle = 0;

void reshapeWindow(int w, int h) {
  // настройка системы координат
  glViewport(0, 0, 800, 800);
  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluPerspective(60.0, 1.0, 0.5, 120.0);
  glMatrixMode(GL_MODELVIEW);
}

void drawCube(float size) {
  glBegin(GL_QUADS);
    glColor4f(0.25, 0.75, 0.25, 0.0);
    glVertex3f(-size, -size, -size);
    glVertex3f(size, -size, -size);
    glVertex3f(size, -size, size);
    glVertex3f(-size, -size, size);

    glColor4f(0.30, 0.30, 0.30, 0.0);
    glVertex3f(-size, -size, -size);
    glVertex3f(size, -size, -size);
    glVertex3f(size, size, -size);
    glVertex3f(-size, size, -size);

    glColor4f(0.35, 0.75, 0.75, 0.0);
    glVertex3f(size, -size, -size);
    glVertex3f(size, size, -size);
    glVertex3f(size, size, size);
    glVertex3f(size, -size, size);

    glColor4f(0.40, 0.40, 0.40, 0.0);
    glVertex3f(-size, -size, size);
    glVertex3f(size, -size, size);
    glVertex3f(size, size, size);
    glVertex3f(-size, size, size);

    glColor4f(0.75, 0.45, 0.45, 0.0);
    glVertex3f(-size, -size, -size);
    glVertex3f(-size, -size, size);
    glVertex3f(-size, size, size);
    glVertex3f(-size, size, -size);

    glColor4f(0.50, 0.50, 0.50, 0.0);
    glVertex3f(-size, size, -size);
    glVertex3f(size, size, -size);
    glVertex3f(size, size, size);
    glVertex3f(-size, size, size);
  glEnd();
}

void drawWindow() {

  int i,j,k;

  // рисование
  glClearColor(0.0, 0.0, 0.0, 0.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  GLfloat lightAmbient[] = {0.12, 0.25, 0.25, 1.0};
  GLfloat lightDiffuse[] = {0.12, 0.25, 0.25, 1.0};
  GLfloat lightPosition[] = {-15.0, 15.0, -15.0, 0.0};
  glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);
  glLightfv(GL_LIGHT0, GL_DIFFUSE, lightDiffuse);
  glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
  glEnable(GL_LIGHT0);
  glEnable(GL_LIGHTING);

  glDisable(GL_BLEND);
  glDisable(GL_ALPHA_TEST);

  glPolygonMode(GL_FRONT, GL_FILL);
  glShadeModel(GL_SMOOTH);
  glEnable(GL_DEPTH_TEST);
  glEnable(GL_COLOR_MATERIAL);
  glColorMaterial(GL_FRONT,GL_EMISSION);

  glLoadIdentity();
  gluLookAt(
    2.0, 2.0, 2.0,
    0.0, 0.0, 0.0,
    0.0, 1.0, 0.0
  );

  for(i = 0; i < 10; i++) {
    for(j = 0; j < 10; j++) {
      for(k = 0; k < 10; k++) {
        glPushMatrix();
        glTranslated(i-15, j-15, k-15);
        glRotatef(angle, 1.0, 1.0, 0.0);
        angle = angle+0.005;
        drawCube(0.25);
        glPopMatrix();
      }
    }
  }
  glFlush();
  glutSwapBuffers();
}

void idle() {
  FPS++;
  glutPostRedisplay();
}

void keyWindow(unsigned char k, int x, int y) {
  switch(k) {
    case 0x1B : exit(0);
  }
}

void visibleWindow(int v) {
  if(v == GLUT_VISIBLE) glutIdleFunc(idle);
  else glutIdleFunc(NULL);
}

void *printFPS(void *p) {
  while(TRUE) {
    printf("%d\n",FPS);
    FPS=0;
    usleep(1000*1000);
  }
}

int main(int argc, char **argv) {

  pthread_t threadprintFPS;

  // инициализация нити
  pthread_create(&threadprintFPS, NULL, printFPS, NULL);

  // инициализация библиотеки
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH | GLUT_RGB);

  // создание окна
  glutInitWindowPosition(0, 0);
  glutInitWindowSize(800, 800);
  glutCreateWindow("test");

  // настройка обработчиков событий
  glutDisplayFunc(drawWindow);
  glutReshapeFunc(reshapeWindow);
  glutVisibilityFunc(visibleWindow);
  glutKeyboardFunc(keyWindow);

  glutMainLoop();

  return 0;
}

%--- Makefile
NAME=test

$(NAME):        $(NAME).c
                gcc -Wall -lGL -lGLU -lglut -lpthread -o $(NAME) $(NAME).c

edit:           $(NAME).c
                vi $(NAME).c

html:           $(NAME).c
                vim -n -c ':so /usr/share/vim/vim63/syntax/2html.vim' -c ':wqa' $(NAME).c
%---

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

'AMD Sempron 2600+' 1607 MHz, ATI Radeon 9250 (rv280), xorg 7.1.0-8, ati, freeglut 2.4.0-5, gcc 4.1.1-13, glibc 2.3.6, FPS=100-105

anonymous
()

CPU: Athlon64 4000+/2.4GHz
Video: Nvidia GF6100 (встроенная)
X: Xorg 7.2
Driver: nvidia
GL: 2.1.0 NVIDIA 97.55, а freeglut какой-то непонятной версии...
gcc: 4.1.2
libc: 2.5
FPS: ~125

ЗЫ Мне понадобился freeglut-devel...

Bebop ★★
()
Ответ на: комментарий от slav

> p3-100

Т. е. не 100 а 1000 конечно. Это ноутбук thinkpad T23.

slav ★★
()

> nv > FPS = 5-6

ну а чего-ж вы хотели..

dmiceman ★★★★★
()
Ответ на: комментарий от slackerr

попутал топик %) это про линии. -lGLU ща лень искать. Утром :)

slackerr
()
Ответ на: комментарий от pacify

вручную грани рисовать - мазохизм

почитай о glDrawElements

Pi ★★★★★
()

P4-2400 MHz, GeForce4 MX 440 AGP, fc6, XOrg 7.1.1, nvidia driver, freeglut-2.4.0, gcc-4.1.1, glibc-2.5; FPS = 180 ~ 185

mator ★★★★★
()
Ответ на: комментарий от jr_A

AMD Athlon64 2800+
nVidia 6600GT 128Mb
Xorg 7.1
nvidia 96.31
GLX: 1.3, Mesa 6.5.1
freeglut: 2.5.0
gcc 3.4.6
glibc 1.2.10
FPS: 375-390

divenvrsk
()

CPU: celeron-1200MHz VIDEO: GF4 mx440 DRIVER: NVIDIA 9631 X-server: XORG 6.9 FPS: 170 Не компилировал

manntes ★★
()

AthlonXP 1800+ (разогнанный до 2400+@2000Mhz)
GF Ti4200
xorg 7.2
nvidia-drivers-9631
GLX 1.4, glut 3.7.1
gcc-3.4.6
glibc-2.5
FPS: 193

rip_someday
()

AMD Athlon 2200+ (1800 MHz)

Nvidia GeForce 6600GT (1.0.9746)

Xorg 7.1.1

freeglut3 2.4.0

gcc 4.1.1

glibc 2.4

FPS = 225-240

Spacer
()
Ответ на: комментарий от frame

>glut бяка, xlib наше фсио!

что мы курим? как можно сравнивать узконаправленную библиотеку утилит для опенгла с библиотекой растровой отрисовки иксов?

lester_dev ★★★★★
()

И сюда запишемся...

A64 x2 2.0Ghz

X.Org version: 7.1.1

OpenGL vendor string: NVIDIA Corporation

OpenGL renderer string: GeForce 6100/PCI/SSE2

OpenGL version string: 2.1.0 NVIDIA 97.55

freeglut-2.4.0

gcc 4.1.1

glibc 2.5

~128 FPS

anonymous
()

вот правильный результат:)

AMD Athlon 2200+ 1800Mhz
Radeon 9100/64Mb
Xorg 6,9
radeon(opensource)
1,3 Mesa 6.4.1
gcc 3.4.5
glibc 2.3.6

135-145

slackerr
()

Sony VAIO VGN-S2XP: - Pentium M 745 1800Hz - ATI Mobility Radeon 9700 (64MB)

xUbuntu 6.10: - Xorg 7.1.1 - ati - MesaLib 6.5.1 - gcc 4.1.2 - glibc 2.4

Results: 59-61 FPS

tostep
()
Ответ на: комментарий от lester_dev

glut сама по себе ничего не отрисовывает (как GL/GLU) - это обвязка под x/winapi/etc. для организации каркаса OpenGL-приложения

frame ★★★
()
Ответ на: комментарий от frame

Там ещё могут находиться функции рисования различных фигур вроде чайника или тора, но они всё равно рендерят через GL/GLU

frame ★★★
()

Intel Pentium M 1.7 GHz, Radeon 9600, Mesa DRI, 60 fps

именно так, без закрытых драйверов.

anonymous
()

Intel(R) Celeron(R) M processor         1.40GHz
ATI Mobility Radeon X600
Xorg 7.2.0
radeon(opensource)
glibc 2.5
gcc version 4.1.3 20070218
Mesa 6.5.2
ОЗУ: 512 Mb

FPS: 29-30

axiz
()

intel core 2 duo T5600, ati X1400, fglrx 8.34.8, debian testing amd64,
gcc 4.1.2

FPS: 230-250

free_serj ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.