Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2013, 06:10   #1
Kukurudza
Форумчанин
 
Регистрация: 02.06.2011
Сообщений: 282
По умолчанию Правильная память для текстуры

У меня есть две текстуры. В главном потоке первую из них я отображаю на экране (натягиваю на несколько треугольников). Примерно один раз за секунду мне нужно обновить текстуру. Во втором потоке я локаю вторую текстуру, пишу в нее нужную мне инфу и анлокаю. А далее в первом потоке подменяю указатели. И теперь отображаю в главном потоке вторую текстуру, а во втором потоке обновляю первую.
создаю так (главный поток):
Код:
device->CreateTexture(x, y, 1, D3DUSAGE_DYNAMIC, D3DFMT_DXT1, D3DPOOL_DEFAULT, &texture[0], NULL));
device->CreateTexture(x, y, 1, D3DUSAGE_DYNAMIC, D3DFMT_DXT1, D3DPOOL_DEFAULT, &texture[1], NULL));
локаю так (второй поток):
Код:
	HRESULT hr = S_OK;
	D3DLOCKED_RECT rect;
	hr = texture[i]->LockRect(0, &rect, NULL, D3DLOCK_DISCARD | D3DLOCK_NOSYSLOCK);
	if (!FAILED(hr) && NULL != rect.pBits) {
		//вот по этому указателю пишу то что мне надо rect.pBits
		hr = info.texture->UnlockRect(0);
	}
и все клево, но. лок/анлок занимает много времени (копирование из видеопамяти в системную / запись нужных мне данных / обратно копирование из системной в видеопамять) и вдобавок у меня это происходит не в главном потоке (а в это время в главном потоке может происходить рендеринг сцены и тогда происходит кирдык (из двух потоков не синхронизованных дергаю девайс)).
как можно решить проблему? мне видится такой вариант: во втором потоке писать в какой нить левый буферок (правильного размера ессно) нужные мне данные, а в главном потоке перед рендерингом сцены как-то говорить текстуре что вот тебе указатель на данные, теперь используй их (копировать из систмной в видеопамять все равно придется, но зато не нужна вторая текстура и самое главное не надо локать текстуру (копировать из видеопамяти в системную)). такое можно сделать?
Kukurudza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая память для двумерного массива Bugrimov Общие вопросы C/C++ 16 28.10.2012 03:44
как резервируется память для переменной assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.12.2010 15:42
Память для Thin client Hp t5545 vr83 Компьютерное железо 0 11.10.2010 18:01
Память для динамической строки Tirendus Общие вопросы C/C++ 11 29.04.2010 15:40
Правильная организация класса для работы с таблицей mysql Choo PHP 10 08.08.2008 08:55