Перейти к содержимому


Фото

Скоро можно будет отказаться от Borland С++ 3.1


  • Чтобы отвечать, сперва войдите на форум
45 ответов в теме

#21 гык-sse2 Опубликовано 08 Сентябрь 2010 - 12:41

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

Когда аппаратное ускорение не работает за дело берется софтверный рендерер из mesa3D. Тебе же OpenGL 3 не нужен?

3 не нужен, его и моя видюха (7300LE) не поддерживает.
Сами GL, GLU, SDL работают, а вот на выводе текста через GLUT, работающем в мак ос и в винде, с программным и аппаратным ускорением, в линуксе программа вываливается.
Однако графические эффекты в настройках системы тоже не удается включить.
Медведь громит каны!

#22 гык-sse2 Опубликовано 08 Сентябрь 2010 - 17:39

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Можно библиотеки ставить в систему, а инклюды прямо в VS, а можно все на диск Z, дллки подкладывать в папки Debug и Release шаблона, а папки прописывать в настройках проекта. Как делать? PeepEvents сложно, это надо все переписывать с использованием только PeepEvents, глобальной очередью, к тому же строгие требования к циклу. Короче, получается как на glut, очень ограниченные возможности. Там bioskey реализовался с полпинка, но зато getch невозможен Так что bioskey только от нуля будет.

Изменено: iMichael, 08 Сентябрь 2010 - 18:11

Медведь громит каны!

#23 гык-sse2 Опубликовано 09 Сентябрь 2010 - 17:23

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
bioskey сделал, но он требует в цикле дополнительной команды и запоминает только одну клавишу (буфер - одна переменная). Для обычного использования в девятом классе достаточно. Ну а тот, кому нужен bioskey(1) - это человек, пишущий Тектроникс, т.е. уже начавший программист. Одну команду вставить он уже может. Выявилась потребность в задержке - на полном экране работает очень быстро.
Медведь громит каны!

#24 гык-sse2 Опубликовано 10 Сентябрь 2010 - 16:55

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Сделал задержку... и увидел, что все совсем не так происходит.
В оконном режиме все ОК.
В полноэкранном двойная буферизация занимается ерундой:
Есть 2 буфера.
Вот я на один вывел текст, сделал SDL_GL_SwapBuffers. Он отобразился.
Но на втором буфере этот текст не появился! Рисую на втором куб. SDL_GL_SwapBuffers - куб появился, текст исчез. Еще раз меняю - куб исчез, тот текст появился.

Пока временное решение, несовместимое с delay (тоже по непонятной причине, но из-за этого мигает при задержке, хотя она не между рефрешами):
в инитграфе SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,1);
после каждой операции вызывается void refreshscreen() {
SDL_GL_SwapBuffers();
if(isFullScreen)
SDL_GL_SwapBuffers();
}

Хм, вроде так и должно быть.

SDL_GL_SetAttribute() can be used to select double/single buffering, but
in OpenGL, you really don't want to do a dirty rectangle thing...clear
the color buffer every frame, redraw the whole scene and swap buffers.
All modern hardware expects this, it's cleaner to code, and in some
cases, it can be faster, since the GL knows it can discard some previous
state.

Но "всю сцену" я рендерить не могу, т.к. я не знаю, что напишет пользователь. Вопрос другой тогда - почему в окне работает?

Изменено: iMichael, 10 Сентябрь 2010 - 17:00

Медведь громит каны!

#25 гык-sse2 Опубликовано 10 Сентябрь 2010 - 17:04

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Хотя нет, на полном экране один буфер работает. Но он не работает в окне! Проблема решена, надеюсь, что этого не будет в винде. Шторт, не решена! Если поставить-таки cleardevice и delay в цикле, то тогда очень мало отображается на экране из того, что создается. Ладно, пусть в окне будет. По крайней мере, окно всегда можно закрыть (хотя бы через терминал), а вот из полноэкранного терминал не откроется. Уже перезагружался пару раз из-за этого.

Изменено: iMichael, 10 Сентябрь 2010 - 17:16

Медведь громит каны!

#26 гык-sse2 Опубликовано 11 Сентябрь 2010 - 6:27

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

Copying and swapping both get the next frame on the screen. You only care about the difference if you are doing incremental updates of the frames. If SDL_Flip() is copying buffers, the back buffer always has a copy of the last frame that was drawn. If SDL_Flip() is doing page swapping, the back buffer usually contains the next-to-last frame. I say usually because double buffering can be implemented using a hidden third buffer to reduce the time spent waiting for the buffer swap to happen. You can find out what kind of swapping is being done by watching the value of the back buffer pointer (screen->pixels in hardware.cpp) to see if it changes and how many different values it has. If it never changes, then SDL_Flip() is copying the pixels. If it toggles back and forth between two values, then page swapping is being used.

Действительно, может копировать, а может и не копировать.
Медведь громит каны!

#27 гык-sse2 Опубликовано 11 Сентябрь 2010 - 6:27

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

Copying and swapping both get the next frame on the screen. You only care about the difference if you are doing incremental updates of the frames. If SDL_Flip() is copying buffers, the back buffer always has a copy of the last frame that was drawn. If SDL_Flip() is doing page swapping, the back buffer usually contains the next-to-last frame. I say usually because double buffering can be implemented using a hidden third buffer to reduce the time spent waiting for the buffer swap to happen. You can find out what kind of swapping is being done by watching the value of the back buffer pointer (screen->pixels in hardware.cpp) to see if it changes and how many different values it has. If it never changes, then SDL_Flip() is copying the pixels. If it toggles back and forth between two values, then page swapping is being used.

Действительно, может копировать, а может и не копировать.

Вот теперь решена - с одним буфером glFlush().
Двойную выключил совсем.

Изменено: iMichael, 11 Сентябрь 2010 - 6:37

Медведь громит каны!

#28 KiberGus Опубликовано 11 Сентябрь 2010 - 17:04

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов
А зачем там вообще д:ойная буферизация? Она нужна чтобы не мигало при перерисовке всей сцены. Так оно и в досе мигало. Более того, сцену никто не перерисовывает. Можно использовать один буфер и в него же и рисовать по мере поступления команд.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#29 гык-sse2 Опубликовано 11 Сентябрь 2010 - 17:25

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

А зачем там вообще д:ойная буферизация? Она нужна чтобы не мигало при перерисовке всей сцены. Так оно и в досе мигало. Более того, сцену никто не перерисовывает. Можно использовать один буфер и в него же и рисовать по мере поступления команд.

Да все уже, убрал двойную. Просто у меня одинарная вообще не работала, как оказалось - забыл glFlush();
Сейчас другая проблема - в Mac OS X нормальный ptscanf написал, а в винде нет vsscanf:( долго гуглил, в результате получил только то, что придется писать gets и sscanf. А это неудобно.
Медведь громит каны!

#30 гык-sse2 Опубликовано 12 Сентябрь 2010 - 10:41

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Сделал еще один неудобный способ ввода - через поток gin. Причем gout не работает. Т.е. нужно получить указатель на поток, в цикле (как и для bioskey) catchevents();, которая заносит все с клавиатуры в поток, и потом читать из потока, причем нет никакой гарантии, что юзер уже ввел данные. Зато переполнения буфера не будет.

Изменено: iMichael, 12 Сентябрь 2010 - 10:41

Медведь громит каны!

#31 starcev Опубликовано 13 Сентябрь 2010 - 17:36

starcev
  • Свои
  • 448 Сообщений:
  • . .
хм.. полезная вещь, можно на гуглкод положить, авось популярность обретёт. ибо многим привычно все делать в родной vs

#32 гык-sse2 Опубликовано 13 Сентябрь 2010 - 17:43

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Итак, вот она. Не на гуглокоде и не на assembla.com, на котором я уже работал над мониторинговыми плагинами (см. applelife.ru, под ником гык-sse2), а в обычном архиве. С инструкцией по установке и настройке (html), пока только под Visual Studio 2008 и только на 32-битных Windows, т.к. у 64-битных папка C:\Program Files (x86) и C:\Windows\SysWOW64 по-моему.

Прикрепленные файлы:


Медведь громит каны!

#33 starcev Опубликовано 14 Сентябрь 2010 - 16:13

starcev
  • Свои
  • 448 Сообщений:
  • . .

Visual Studio 2008 и только на 32-битных Windows

какое недоразумение. и почему же именно я поставил недавно именно 64!

#34 гык-sse2 Опубликовано 14 Сентябрь 2010 - 16:16

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев

какое недоразумение. и почему же именно я поставил недавно именно 64!

Да нет, на 64 тоже должно работать, только там папка установки Visual Studio отличается, поэтому инсталлятор не сможет установить. Посмотрите, какие у вас пути, и отредактируйте .cmd-файл (и выложите, запакую в архив, как install64.cmd)
Медведь громит каны!

#35 гык-sse2 Опубликовано 22 Сентябрь 2010 - 14:02

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
В Ubuntu уже тоже все работает, причина была в пропущенном glutInit. Не знаю, почему оно работало в остальных ОС. Изменен initgraph - теперь ему нужны еще и argc и argv.
Медведь громит каны!

#36 гык-sse2 Опубликовано 22 Сентябрь 2010 - 16:45

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
А вот и обновление. Теперь есть установочный скрипт для Ubuntu. Исправлена ошибка glutInit, изменены параметры у initgraph (теперь у int main обязательно должны быть параметры int argc и char** argv!), обновлена недодокументация.

Прикрепленные файлы:


Изменено: гык-sse2, 22 Сентябрь 2010 - 17:02

Медведь громит каны!

#37 гык-sse2 Опубликовано 25 Сентябрь 2010 - 14:35

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Поток (точнее, он не поток, а просто объект с операторами << и >>) ptio (замена cin и cout): Coming Soon.
Медведь громит каны!

#38 гык-sse2 Опубликовано 25 Сентябрь 2010 - 16:30

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
А можно как-то сдвинуть все, что уже нарисовано на окне, наверх на 13 пикселей? (Как делает cout<<'\n'; если места на экране нет, то он двигает и консольный вывод, и графику). Или оно нигде не сохраняется? А то баг серьезный: при \n на последней строке происходит clrscr(), и все теряется. Пользователь не видит, что вернула программа. Также в следующей версии: textattr. Он будет влиять на весь вывод текста, кроме outtext и outtextxy.

Изменено: гык-sse2, 25 Сентябрь 2010 - 16:53

Медведь громит каны!

#39 KiberGus Опубликовано 25 Сентябрь 2010 - 17:00

KiberGus
  • Genius loci
  • 6 561 Сообщений:
  • Алексей Гусейнов
Боюсь, что OpenGL на такие извращения не рассчитан. Но есть команды чтения и записи значения пикселя в буфере. Можно попиксельно сдвинуть. Для тех программ, которые пишут лицеисты этого вполне достаточно.
Зато, обладая единственной в мире подводной орбитальной группировкой спутников глонасс...
gentoo.gif

#40 гык-sse2 Опубликовано 25 Сентябрь 2010 - 17:42

гык-sse2
  • Свои
  • 377 Сообщений:
  • Михаил Беляев
Опа! Нашел, рассчитан!
http://www.talisman....CopyPixels.html
Пока не работает, буду разбираться.

Изменено: гык-sse2, 25 Сентябрь 2010 - 17:51

Медведь громит каны!




0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 невидимых