Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
#1

Тормоза в OpenGL - OpenGL

27.09.2013, 20:03. Просмотров 2078. Ответов 41
Метки нет (Все метки)

Народ почему у меня тормозит игра змейка...комп Win7 x64 MVS 2010...сразу скажу что у других игра норм робит тоесть дело не в коде, а в какой то библиотеке я думаю dll или что то в этом роде...месяц назад игра нормально работала.а теперь при запуске поле рисуется слева на право, очень медленно аж 5 сек, после идет рисование снизу вверх тоже 5 сек, а потом цикл опять повторяется. если убрать в коде фукнцию рисования поля то тормозов никаких нет, в чем же дело??? вот рабочий код

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include <GL\glut.h>
 
int W=20, H=20;
int Scale=30;
int w=Scale*W;
int h=Scale*H;
int dir=0, num=4;
struct
{
    int x;
    int y;
} s[100];
 
void DrawCell()
{
    glColor3f(0.0,1.0,0.0);
    glBegin(GL_LINES);
    for(int i=0; i<w; i+=Scale)
    {
        glVertex2f(i,0); 
        glVertex2f(i,h);
    }
    for(int i=0; i<h; i+=Scale)
    {
        glVertex2f(0,i);
        glVertex2f(w,i);
    }
    glEnd();
} 
 
void DrawSnake()
{
    glColor3f(0.0,0.0,1.0);
    for(int i=0; i<num; i++)
    {
            glRecti(s[i].x*Scale, s[i].y*Scale, (s[i].x+1)*Scale, (s[i].y+1)*Scale);
    }
 
}
 
void MyKeyboard(int key, int a, int b)
{
    switch(key)
    {
    case GLUT_KEY_UP: dir=0; break;
    case GLUT_KEY_DOWN: dir=1; break;
    case GLUT_KEY_LEFT: dir=2; break;
    case GLUT_KEY_RIGHT: dir=3; break;
    case GLUT_KEY_HOME: num++; break;
    }
}
 
void Tick()
{
    for(int i=num; i>0; --i)
    {
        s[i].x=s[i-1].x;
        s[i].y=s[i-1].y;
    }
 
    switch(dir)
    {
    case 0: s[0].y+=1; break;
    case 1: s[0].y-=1; break;
    case 2: s[0].x-=1; break;
    case 3: s[0].x+=1; break;
    }
}
 
void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    DrawSnake();
    DrawCell();
    glFlush();
}
 
void timer(int)
{
    display();
    Tick();
    glutTimerFunc(100,timer,0);
}
 
int main()
{
    glutInitDisplayMode(GLUT_SINGLE||GLUT_RGB);
    glutInitWindowSize(w,h);
    glutInitWindowPosition(400,100);
    glutCreateWindow("Snake");
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0,w,0,h);
    glutDisplayFunc(display);
    glutSpecialFunc(MyKeyboard);
    timer(0);
    glutMainLoop();
}

http://www.cyberforum.ru/opengl/thread350693.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2013, 20:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Тормоза в OpenGL (OpenGL):

(2 главы перевода книги доступно) OpenGL Programming Guide, Version 4.3, 8th Edition - OpenGL
Продолжая тему с переводом книги...

Ошибки при подключение opengl, немного не связанные с opengl
#include &lt;windows.h&gt; #include &quot;stdafx.h&quot; #include &lt;gl/gl.h&gt; #include...

Не загружается текстура в OpenGL (OpenGL + Классы)
Здравствуйте! Пишу движок для игры. Первый прототип я сделал процедурно. Все...

OpenGL + GlTools по книге OpenGL Суперкнига
В главе 4 есть пример с отрисовкой 3хмерного вращающегося тора. Вот код: void...

OpenGL - VS2008 Инициализация OpenGL (Glut)
Правильно ли я написал код для выведения 3d изображения на экран? Вот пару...

41
demover123
1 / 1 / 2
Регистрация: 16.08.2012
Сообщений: 80
28.09.2013, 13:09 #2
Возможно из-за видео карты, скорее всего она не подстроена на заводе для нормальное работы OpenGL
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
28.09.2013, 13:32 #3
Цитата Сообщение от xTIGRx Посмотреть сообщение
сразу скажу что у других игра норм робит тоесть дело не в коде
ИМХО, неверный вывод. Не значит, что ошибка в коде, но всё же последствия ошибок могут зависеть от железа, системы, драйверов, их настроек.
Цитата Сообщение от xTIGRx Посмотреть сообщение
C++
1
glutInitDisplayMode(GLUT_SINGLE||GLUT_RGB);
Не ||, а |. И лучше с двойной буферизацией.
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
28.09.2013, 19:14  [ТС] #4
пробывал, не вариант...я же говорю что месяц назад все норм работало....спустя время начило тормозить. значит что то с операционкой...вот только что????????????
0
demover123
1 / 1 / 2
Регистрация: 16.08.2012
Сообщений: 80
28.09.2013, 19:52 #5
xTIGRx, меняй драйвер, сноси ос
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
29.09.2013, 01:48  [ТС] #6
Я вот тоже думаю может что то с ОС или с дравами...ОС снести не смогу тут лицуха стоит, и комп не мой...насчет дров может что то типо Physix установить чтоли???
0
demover123
1 / 1 / 2
Регистрация: 16.08.2012
Сообщений: 80
29.09.2013, 01:50 #7
xTIGRx, физикс тут не при чём, а какая разница есть ли лицензия или нет? У странах СНГ почти всегда пиратки стоят.
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
29.09.2013, 01:54  [ТС] #8
Дружище комп не мой просто...

Добавлено через 1 минуту
Хотя я смотрю другого выбора нету поэтому придется сделать побыстринькому это до утра)). лан отвечу через 2 часа, глянем чо выйдет
0
demover123
1 / 1 / 2
Регистрация: 16.08.2012
Сообщений: 80
29.09.2013, 01:55 #9
xTIGRx, давай
1
PetyaVasechkin
117 / 117 / 1
Регистрация: 27.09.2013
Сообщений: 702
29.09.2013, 02:00 #10
Рисование поля это DrawCell() ?
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
29.09.2013, 13:15  [ТС] #11
Все снес, терь норм робит...всем спасибо.
да рисование поля это DrawCell
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
20.01.2014, 03:58  [ТС] #12
Простите ребята но придется поднять эту тему опять...спустя некоторое время опять такая же штука получается((. винду снес но на этот раз не помогло все также тормозит...мистика какая то...Может это уже дело в видюхе...хотя OpenGL неужели такая прожорливая что 256 метров со всему графическими ускорителями не помогает...или это дело в библиотеке GLUT которрый скачал с офф сайта??? есть идеи
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.01.2014, 11:28 #13
Частоты видеокарты меняли? Признавайтесь!

Добавлено через 1 минуту
256 мб, может утечка памяти? Посмотрите в диспетчере процессов, память растет линейно?
0
snake32
1641 / 1095 / 191
Регистрация: 26.02.2009
Сообщений: 4,058
Записей в блоге: 5
20.01.2014, 12:31 #14
Попробуйте обновить драйвера видеокатры
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
20.01.2014, 18:22  [ТС] #15
programina, Частота с 60 на 75 как всегда...я так всегда на всех мониторах ставлю, говорят зрение не портится от этого (портится вообще от всего ну получше чем на 60)...

snake32 а что менять видеокарта встроенная AMD Radeon X700
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
20.01.2014, 22:59 #16
Цитата Сообщение от xTIGRx Посмотреть сообщение
Частота с 60 на 75 как всегда...я так всегда на всех мониторах ставлю

Частота вашего монитора вообще никак не отражается на рисовании изображения окном с опенглом, я про частоту видеокарты в биосе или специальных утилитах типа каталист для АТИ. Может копмьютер разгоняли или наоборот тормозили для экономии электроэнергии. Может в самом виндовсе поменяли план электропитания в панели управления.
0
PetyaVasechkin
117 / 117 / 1
Регистрация: 27.09.2013
Сообщений: 702
21.01.2014, 05:42 #17
Цитата Сообщение от xTIGRx Посмотреть сообщение
Может это уже дело в видюхе
Не в видюхе, иначе тормозило бы всё, что использует OpenGL, все программы, которые не на DirectDraw работают.

Попробуйте обновить драйвера видеокарты, сбросить всё по-умолчанию.
В диспетчере задач глянуть на ресурсы, которые кушает процесс во время выполнения.
0
snake32
1641 / 1095 / 191
Регистрация: 26.02.2009
Сообщений: 4,058
Записей в блоге: 5
21.01.2014, 11:07 #18
Короче установил Visual C++, собрал проект. Процесс стабильно кушает память. Причём виноват судя по всему GLUT, так как в коде вообще нет выделений памяти.

Скачал вообще другой код добавил туда буквально несколько строк:
C++
1
2
3
4
5
6
7
8
9
10
11
12
void timer( int id )
{
  glutPostRedisplay();
  glutTimerFunc( 100, timer, id );
}
 
int main()
{
  //...
  glutTimerFunc( 100, timer, 1 );
  //...
}
И опять стабильно начало кушать. Вопрос:
Как зациклить таймер и при этом не терять память использовав GLUT?

ЗЫ: Тестил на ноуте HD4000 и GT640M - жрёт одинаково.
0
xTIGRx
292 / 198 / 6
Регистрация: 23.10.2010
Сообщений: 1,173
Записей в блоге: 1
21.01.2014, 20:11  [ТС] #19
programina, тогда вопрос для вас...а почему тогда контра с OpenGL со всей его нагрузкой не тормозит...чо там мульти супер пупер эксперты програмимисты его сделали в обход всем законам!!!, чем мое гребанное окно с 6 полосками три вниз три вправо, так жестко грузит мою видеокарту чтоли...чо за бред!!!

Добавлено через 2 минуты
snake32, я после ОС подумал как раз таки про GLUT, может правда дело в нем в GLUT...хотя скачивал я его с офф сайта...может версию пониже скачать????

Добавлено через 42 секунды
snake32, если не трудно выложите ваш код хочу потестить на своем пк и еще раз убедиться в GLUT дело или нет...
0
programina
2049 / 604 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
21.01.2014, 20:56 #20
Цитата Сообщение от xTIGRx Посмотреть сообщение
programina, тогда вопрос для вас...а почему тогда контра с OpenGL со всей его нагрузкой не тормозит...чо там мульти супер пупер эксперты програмимисты его сделали в обход всем законам!!!, чем мое гребанное окно с 6 полосками три вниз три вправо, так жестко грузит мою видеокарту чтоли...чо за бред!!!
glut

Добавлено через 1 минуту
Цитата Сообщение от xTIGRx Посмотреть сообщение
а почему тогда контра с OpenGL со всей его нагрузкой не тормозит...чо там мульти супер пупер эксперты програмимисты его сделали в обход всем законам!!!
Они не пользуются глутом.

Добавлено через 2 минуты
У вас есть glut32.dll?

Добавлено через 20 минут
Цитата Сообщение от xTIGRx Посмотреть сообщение
C++
struct // безымянная структура?
{ 
int x; 
int y; 
} s[100];
Структура-аноним.

Цитата Сообщение от xTIGRx Посмотреть сообщение
C++
int main() 
{ 
  glutInitDisplayMode(GLUT_SINGLE||GLUT_RGB); 
  glutInitWindowSize(w,h); 
  glutInitWindowPosition(400,100); 
  glutCreateWindow("Snake"); 
  glMatrixMode(GL_PROJECTION); 
  glLoadIdentity(); 
  gluOrtho2D(0,w,0,h); 
  glutDisplayFunc(display); 
  glutSpecialFunc(MyKeyboard); 
  timer(0); 
  glutMainLoop(); 
}
glutInit'а нету

Добавлено через 1 минуту
Цитата Сообщение от xTIGRx Посмотреть сообщение
C++
#include <GL\glut.h>
Слеш не в ту сторону.

Добавлено через 5 минут
Цитата Сообщение от snake32 Посмотреть сообщение
Как зациклить таймер и при этом не терять память использовав GLUT?
У меня на freeglut на линукс ничего не "жрет", память держится стабильно на одной отметке.
0
21.01.2014, 20:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2014, 20:56
Привет! Вот еще темы с решениями:

OpenGL.Урок 1. простой OpenGL-проект
Не компилируется кодю #include &lt;GL\glut.h&gt; void DrawLine() { ...

Сильно отличаются OpenGL ES и OpenGL и как?
Сильно отличаются OpenGL ES и OpenGL и как?

Перевод OpenGL Programming Guide: The Official Guide to Learning OpenGL, Version 4.3, 8th Edition
Уважаемые форумчане! У вас есть возможность выразить свою активную позицию по...

Тормоза (возможно при числе окон больше 4)
Здравствуйте В какой-то момент gDrawElements начинает дико тормозить, время...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru