Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование игр, графики и искусственного интеллекта > Генерирование текстуры из примитивов в OpenGL


Автор: Anyone 3.6.2009, 00:18
Рисую объекты, которые состоят из линий, текста, и пр., в общем - из примитивов. И таких объектов много и перерисовывать их приходится достаточно часто (при перемещении мыши), потому все тормозит (В жди+ и то быстрее). Тормозит собсно изза текста, но я уже и не знаю как его оптимизировать - все символы кешируются в списке отображения.

Есть идея генерировать динамически для каждого объекта  текстуру (или хотябы делать текстуру, которая содержит только текст, а все остальное - прозрачные области и накладывать поверх примитивов). 
Это можно как-то осуществить?
Есть другие идеи?

Использую С#+Tao.Framework+Tao.FreeType

Автор: Anyone 4.6.2009, 13:55
Придется самому отвечать...
Думаю http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/copyteximage2d.html то, что мне нужно

Автор: Anyone 4.6.2009, 23:16
Никого не хочу обидеть, но здесь есть люди, которые хорошо разбираются в ОЖЛ, или у меня вопросы тупые?
задаю вопрос с последней надеждой на то что я ошибаюсь.
Нигде не могу найти пример как использовать команду glCopyTexImage2D.
Вот мой код:
 
Код

          bool startMouseMove=false;
            int RenderTex;
            private void glControl_MouseMove(object sender, MouseEventArgs e)
            {
                Gl.glReadBuffer(Gl.GL_FRONT);
                Gl.glDrawBuffer(Gl.GL_FRONT);
                if (startMouseMove)
                {
                    Gl.glBegin(Gl.GL_QUADS);                           // Black rectangle!!!
                    Gl.glTexCoord2dv(new double[] { 0.0, 0.0 });
                    Gl.glVertex2d(mousePositionPrev.X-35, mousePositionPrev.Y-60);
                    Gl.glTexCoord2dv(new double[] { 1.0, 0.0 });
                    Gl.glVertex2d(mousePositionPrev.X-35 + 70, mousePositionPrev.Y-60);
                    Gl.glTexCoord2dv(new double[] { 1.0, 1.0 });
                    Gl.glVertex2d(mousePositionPrev.X-35 + 70, mousePositionPrev.Y -60 + 120);
                    Gl.glTexCoord2dv(new double[] { 0.0, 1.0 });
                    Gl.glVertex2d(mousePositionPrev.X-35, mousePositionPrev.Y -60 + 120);
                    Gl.glEnd();
                }
                else
                {
                    startMouseMove = true;
                    mousePosition = glControl.PointToClient(Cursor.Position);
                }
                mousePositionPrev = mousePosition;
                mousePosition = glControl.PointToClient(Cursor.Position);
                 DrawFrames(mousePosition, 1);
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, RenderTex);
                Gl.glCopyTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA,
                  mousePosition.X, mousePosition.Y, 70, 120, 0);
                Gl.glFlush();
                Gl.glDrawBuffer(Gl.GL_BACK);

            } 


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

Автор: galileopro 20.6.2009, 12:23
Может попробовать посмотреть в примерах самого Tao? (Сори, ответил, что смог. Сам не профи.) 
А еще может перед наложением текстуры добавить Gl.glReadBuffer(Gl.GL_BACK); ?

Автор: Anyone 21.6.2009, 23:17
Цитата(galileopro @  20.6.2009,  12:23 Найти цитируемый пост)
А еще может перед наложением текстуры добавить Gl.glReadBuffer(Gl.GL_BACK); ? 

Спасибо за ответ. Да, это была одной из моих ошибок. Эту проблему я решил (сохраняю в текстуру весь экран), но возникли новые)))) 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)