PMG

Форумы по созданию игр
Текущее время: 19 сен 2021 18:07

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5  След.
Автор Сообщение
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 12 июн 2009 17:57 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
У меня нет поддержки FBO:
Код:
                string extensions = Gl.glGetString(Gl.GL_EXTENSIONS);
                if (!extensions.Contains("GL_EXT_framebuffer_object"))
                {
                    return;
                }


Потому и FBO и PBuffer отпадает... даж не знаю что теперь делать...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 12 июн 2009 19:06 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
оффтоп
MagicWolf, у меня вопрос про multisampleFramebuffer раз речь зашла о фреймбуферах. Я наконец то сделал анти-алиасинг, все работает. Но почему то сглаживаются только грани фигур, а лесенки в текстурах не сглаживаются. Это так и должно быть?
Мне просто нужно рисовать модели в одну текстуру, декали в другую и полупрозрачные объекты в третью текстуру. А потом их склеиваю, ну а потом уже пост эффекты. Поэтому не хочется использовать три multisampleFramebuffer. Есть ли какой способ обойтись одним.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 12 июн 2009 20:59 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
И если не трудно, можешь объяснить как происходит сам процесс анти-алиасинга. Ну в смысле не как он "размазывает" пиксели, а отрисовывается ли при этом вся сцена? Или просто берется картинка из фреймбуфера и "размазывается"? Не знаю как это искать просто.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 08:49 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Vitone писал(а):
Немного погулил и выяснил что копать мне в сторону FBO. Только вот я не пойму, насколько хорошо это поддерживаются видяхами (в том числе ноутбучными)? Или с современными проблем не будет?


Я думаю найдутся видеокарты, вернее драйвера для них, которые не будут поддерживать FBO, но всегда можно указать на каком железе идет данная прога.

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 08:51 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Vitone писал(а):
У меня нет поддержки FBO:
Код:
                string extensions = Gl.glGetString(Gl.GL_EXTENSIONS);
                if (!extensions.Contains("GL_EXT_framebuffer_object"))
                {
                    return;
                }


Потому и FBO и PBuffer отпадает... даж не знаю что теперь делать...


Очень странно. Поставь http://www.realtech-vr.com/glview/index.html - GLview, посмотри какие у тебя есть расширения. Какая у тебя видюха? Драйвера последние?

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 08:53 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
bad_duck писал(а):
оффтоп
MagicWolf, у меня вопрос про multisampleFramebuffer раз речь зашла о фреймбуферах. Я наконец то сделал анти-алиасинг, все работает. Но почему то сглаживаются только грани фигур, а лесенки в текстурах не сглаживаются. Это так и должно быть?


Точно не знаю, но судя по смыслу сглаживание моделей проводится при выводе их на сцену. Значит сглаживание будет учитывать пикселы уже выведенных моделей.

bad_duck писал(а):
Мне просто нужно рисовать модели в одну текстуру, декали в другую и полупрозрачные объекты в третью текстуру. А потом их склеиваю, ну а потом уже пост эффекты. Поэтому не хочется использовать три multisampleFramebuffer. Есть ли какой способ обойтись одним.


Не знаю с такой техникой не работал ...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 12:34 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
Ну я всегда придумываю сложные пути ;)
Просто не хочу использовать GL_BLEND, я написал свои шейдеры.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 12:54 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Ну разве, что последовательно в один буфер выводить, потом склеивать, потом снова в этот же буфер вывести и снова с результирующим склеить. А если нужны три одновременно буфера, то увы, ничего не поделать.

Видно ты что-то хитрое затеял ... :dj:

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 20:20 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 04 июл 2008 10:11
Сообщения: 144
Откуда: Питер
точно, так и сделаю. Еще понадобится буфер для того, что должно находиться под водой (видел урок где можно и без этого обойтись, ну сначала так сделаю).
Делаю дьявольскую игру :deal:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 15 июн 2009 22:43 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
MagicWolf писал(а):
Какая у тебя видюха? Драйвера последние?

У меня ноут со встроенной видяхой Intel X3100, слабенькая канеш... но что есть то есть... Драйвера - с офф. сайта. Думаю что лучше сделать универсальное ПО чем выслушивать маты по поводу того, почему конкретное железо не поддерживается.
Реализовал перемещение блоков в виде реверсивных прямоугольников - дешево и сердито - не тормозит, хоть и не красиво, зато универсальный метод, хотя считается это дурным тоном. Какие у вас мнения по поводу этого?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 16 июн 2009 08:45 
Не в сети
Гуру
Аватара пользователя

Зарегистрирован: 03 авг 2004 10:37
Сообщения: 2694
Попробуй предусмотреть несколько вариантов: для слабых видеокарт, для нормальных, и для крутых...

_________________
С уважением, Сергей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 16 июн 2009 11:05 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
MagicWolf писал(а):
Попробуй предусмотреть несколько вариантов: для слабых видеокарт, для нормальных, и для крутых...

Это канеш, здорово и правильно, но как мне разрабатывать приложение под крутую видяху с поддержкой всего функционала, на компьютере со слабенькой? =)
Покупать для этих целей оборудование?
Это может просто не окупиться.
Пока что обойдусь ревересивными объектами, потом попробую использовать функцию сабжа - так будет приложение более переносимое.

Большое спасибо за советы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 16 июн 2009 14:27 
Не в сети
Опытный
Аватара пользователя

Зарегистрирован: 28 янв 2008 19:24
Сообщения: 230
Откуда: Санкт Петербург
Цитата:
У меня ноут со встроенной видяхой Intel X3100

А на моём ноуте дискретная видео карта ati mobility radeon x1400.
Цитата:
Это канеш, здорово и правильно, но как мне разрабатывать приложение под крутую видяху с поддержкой всего функционала, на компьютере со слабенькой?

Поменять старый ноут на новый. С хорошей видео картой.

_________________
С уважением, Андрей


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 19 июн 2009 15:56 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
В общем, решил все статические объекты сохранять в текстуру, а перемещаемые блоки рисовать поверх нее. Работает относительно быстро, несмотря на слабую видяху и большой размер текстуры, в общем, меня бы это удовлетворило, если бы текстура не содержала черный цвет (иногда с небольшой полоской сверху слева, залитая текущим цветом) вместо скрина экрана.

Привожу код.
Инициализация текстуры при изменении размеров формы:
Код:
            private void InitTexture()
            {
                Gl.glEnable(Gl.GL_TEXTURE_2D);
                Gl.glGenTextures(1, out RenderTex);
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, RenderTex);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
                Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, 2048, 2048, 0, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, null);
                err = Gl.glGetError();
                Gl.glDisable(Gl.GL_TEXTURE_2D);
            }

Рисование сцены:
Код:
           
             private void Draw()
            {
                Gl.glClear(Gl.GL_COLOR_BUFFER_BIT /*| Gl.GL_DEPTH_BUFFER_BIT*/);
                Gl.glCallList(_genList);        // Background
                Gl.glCallList(_genList + 1);    // Grid
                DrawBlocks();                   // Objects
                if (needTexInit)
                {
                    Gl.glReadBuffer(Gl.GL_BACK);
                    Gl.glBindTexture(Gl.GL_TEXTURE_2D, RenderTex);
                    Gl.glCopyTexSubImage2D(Gl.GL_TEXTURE_2D, 0, 0, 0, 0, 0, 2048, 2048); //ScreenShot
                    needTexInit = false;
                }
               
                glControl.SwapBuffers();
                allowMouseMove = true;
            }

И перемещение объектов:
Код:
            private void glControl_MouseMove(object sender, MouseEventArgs e)
            {
                if (!allowMouseMove)
                    return;
                mousePosition = glControl.PointToClient(Cursor.Position);
                Gl.glClear(Gl.GL_COLOR_BUFFER_BIT /*| Gl.GL_DEPTH_BUFFER_BIT*/);
                 Gl.glColor4f(1f, 1f, 1f, 1f); // Current color
                 if (startMouseMove)
                 {
                     Gl.glEnable(Gl.GL_TEXTURE_2D);
                     Gl.glBindTexture(Gl.GL_TEXTURE_2D, RenderTex);
                     Gl.glBegin(Gl.GL_QUADS);
                     Gl.glTexCoord2dv(new double[] { 0.0, 0.0 });
                     Gl.glVertex2d(0, 0);
                     Gl.glTexCoord2dv(new double[] { 1.0, 0.0 });
                     Gl.glVertex2d(2048, 0);
                     Gl.glTexCoord2dv(new double[] { 1.0, 1.0 });
                     Gl.glVertex2d(2048, 2048);
                     Gl.glTexCoord2dv(new double[] { 0.0, 1.0 });
                     Gl.glVertex2d(0, 2048);
                     Gl.glEnd();
                     Gl.glDisable(Gl.GL_TEXTURE_2D);
                 }
                 else
                 {
                     startMouseMove = true;
                 }


                DrawFramesFill(mousePosition, 1);
                glControl.SwapBuffers();

                mousePositionPrev = mousePosition;
            }

На ошибки проверял - их нету.
Что может быть не так?
У меня подозрение, что та полосочка - и есть наложенная текстура, но почему тогда она таких размеров и однородным цветом?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: glCopyTexImage2D: востановление поврежденных участков экрана
СообщениеДобавлено: 19 июн 2009 17:32 
Не в сети
Любитель

Зарегистрирован: 02 июн 2009 15:53
Сообщения: 27
Немного изменил функцию генерации структуры:
Код:
            private void InitTexture()
            {
                Gl.glEnable(Gl.GL_TEXTURE_2D);
                if (RenderTex!=0)
                    Gl.glDeleteTextures(1, ref RenderTex);
                Gl.glGenTextures(1, out RenderTex);
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, RenderTex);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
                Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
                Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGB, size, size, 0, Gl.GL_RGB, Gl.GL_UNSIGNED_BYTE, null);
                Gl.glDisable(Gl.GL_TEXTURE_2D);
            }

То есть, перед созданием новой текстуры, удаляем старую.
После этого изменение размеров формы перестало сопровождаться сильными тормозами (но они есть), а текстура вместо скрина всегда содержит мусор.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4, 5  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB