|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 3, 2004 21:33:23 всем привет!!! мне хотелось бы узнать следующее: известно, что при программировании под DirectDraw, можно напрямую писать в видеопамять. можно ли как-нибудь это реализовать под OpenGL? Заранее спасибо! |
|
|
Дата: Июн 3, 2004 23:32:06 leopart Интересно знать, откуда известно? DD работает как ПОСРЕДНИК между программистом и железками, но полный доступ до ресурсов тебе никто не даст. ОГл работает точно так же, так что разницы особой нет. |
|
|
Дата: Июн 4, 2004 01:51:54 Из доки: IDirectDrawSurface::Lock The Lock method obtains a valid pointer to the surface memory... И если в этот poiner ченить писать это сразу оказывается на экране, т.е. в видеопамяти. OGL так не умеет. |
|
|
Дата: Июн 4, 2004 07:35:02 Хмм.. Интересно.. Вот уж не думал Корпорация принципами поступится ради особых экстремалов. :) |
|
|
Дата: Июн 4, 2004 09:14:10 leopart Если не пугают такие ф-ции win32k.sys как EngLockDirectDrawSurface, то вероятно можно и используя OGL. Хотя официально документирован только один способ - IDirectDrawSurface::Lock. Если не секрет, какой смысл работать напрямую с видеопамятью? Ведь это очень медленно. |
|
|
Дата: Июн 4, 2004 10:41:19 с win32k.sys я к сожалению незнаком :( зачем это нужно? например я хочу написать туже самую плазму. для этого придётся каждый раз вызывать glVertex и glColor, либо весь кадр занести в буффер и оттуда выводить с помощью на экран, а это гораздо медленнее, чем напрямую писать в пямять. по сути будет выполнятся двойная работа - сначала вычисление чего-либо в буффер, а затем вывод из буффера ан экран. |
|
|
Дата: Июн 4, 2004 11:18:37 Про win32k.sys я написал к слову. Стандартный IDirectDrawSurface::Lock всё одно сводится в конечном счёте к внутренним механизмам GDI. Возможно и к той ф-ции, возможно и нет, да ещё смотря в какой версии виндоса такое возможно. > весь кадр занести в буффер и оттуда выводить с помощью на экран, а это гораздо медленнее, чем напрямую писать в пямять IMHO как раз наоборот. Запись в видеопамять работает медленнее чуть ли не на порядок, а чтение оттуда лучше совсем не делать. Про OGL я мало знаю, но в DirectDraw самый быстрый способ - нарисовать плазму в оперативе, а потом копировать на экран блиттером. Работа с оперативой нормально кешируется процем - можно читать/писать используя различные техники оптимизации. А все операции с видеопамятью работают через медленный AGP. Можно так же вместо экранной поверхности использовать текстуру. |
|
|
Дата: Июн 4, 2004 11:35:33 >например я хочу написать туже самую плазму. для этого >придётся каждый раз вызывать glVertex и glColor, либо >весь кадр занести в буффер и оттуда выводить с помощью >на экран, а это гораздо медленнее, чем напрямую писать в >пямять. 1. Подавляющее большинство основного большинства очень большой массы людей все же используют в своих gl приложениях концепцию буферов и этому есть объяснение: для буфера кадра используются специальные типы микросхем - видеопамять с произвольным доступом(VRAM - video random-access memory) или микросхемы с динамической памяти с произвольным доступом(DRAM - dynamic random-access memory), которые позволяют бысто вывести картинку на экран. 2. в большинстве опенГЛ приложениях используют переключение буферов(SwapBuffers()), чтобы избавиться от артефактов изображения, при твоем способе(напрямую писать в пямять) ты этого лишаешься. 3. Вместо glVertex и glColor следует использовать glVertexPointer и glColorPointer 4. Посоветую найти(купить) хорошую книгу по OpenGL(у меня Interactive Computer Graphics by E. Angel) |
|
|
Дата: Июн 4, 2004 12:26:57 > для буфера кадра используются специальные типы микросхем На видеокартах используется та же DDR-SDRAM что и в мамку втыкается, только чипы там побыстрее (иногда). Если к видеопамяти обращается GPU, то естественно такие операции будут максимально быстрыми. Если же GPU обращается к системной памяти, то это будет работать медленнее. С CPU всё полностью наоборот. Отсюда простой вывод: если обработка аппаратная (GPU), то лучше данные хранить в video RAM, если программная (CPU) - то system RAM. > в большинстве опенГЛ приложениях используют переключение буферов(SwapBuffers()), чтобы избавиться от артефактов изображения, при твоем способе(напрямую писать в пямять) ты этого лишаешься. Один момент. SwapBuffers обычно просто переключает страницы видеопамяти. При этом BackBuffer становится активным (отображается), если он расположен в video RAM. Но если BackBuffer расположить в системной памяти, то помимо простого переключения, он будет скопирован в видеопамять, а уже потом произойдёт переключение страниц. Просто хочется разделить физическую память SystemRAM/VideoRAM и логические понятия PrimarySurface(всегда в VideoRAM) / BackBuffer(может находиться и там и там). |
|
|
Дата: Июн 4, 2004 12:38:53 я зная про glVertexPointer и glColorPointer и книга у меня тоже есть... меня интересовал именно этот вопрос. |
|
|
Дата: Июн 4, 2004 13:07:46 >На видеокартах используется та же DDR-SDRAM То есть теоретически я могу заменить память своей GeForce2-32Mb, скажем, на 64Mb ? На счет SwapBuffers меня переглючило, я почему-то подумал, что это функция OpenGL, и переключает gl-вские буферы :). |
|
|
Дата: Июн 4, 2004 16:37:23 leopart glTexSubImage2D |
|
|
Дата: Июн 4, 2004 17:24:46 [offtop] > То есть теоретически я могу заменить память своей GeForce2-32Mb, скажем, на 64Mb ? Не знаю, на сколько сложно будет паять, но теоретически это возможно :). |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.110 |