Создание текстур на лету

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Создание текстур на лету

Сообщение d3drm » 15.03.2005 (Вт) 1:36

У меня проблемы немного сложнее, чем у Юрича. Если ему надо было просто загнать массив в текстуру на лету, то мне нужно это делать в цикле, что осложняет задачу. Или хотя бы каким-нибудь образом нарисовать на текстуре треугольник, но все это, повторюсь, не должно отнимать много времени.

Я хочу создать на карте динамические тени, но трабл с текстурами просто меня убивает. Снижает скорость более, чем в 4 раза.

Я вложил пример и скриншот сюда, можете посмотреть, но скорее всего у Юрича вылетит с automation error, так как у него, как я помню, не работает создание текстур из RGB массива.

На скриншоте - два треугольника. Один отбрасывает тень на другой, тень пока представлена как образ треугольника в 3 точках.
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Re: Создание текстур на лету

Сообщение Yurich » 15.03.2005 (Вт) 16:57

d3drm писал(а):Я вложил пример и скриншот сюда, можете посмотреть, но скорее всего у Юрича вылетит с automation error, так как у него, как я помню, не работает создание текстур из RGB массива...

Ну-ж, если влупить хотябы Radeon 9800, был бы полный ажур. Но башлей то, как всегда, нету. Остается довольствоваться D3DERR_NOTAVAILABLE. Причину окончательно не разобрал, но думаю что в моем случае ноги проблемы растут от поддержки только 3-х Depth/Stencil - форматов: D3DFMT_D24S8, D3DFMT_D16, D3DFMT_D24X8!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 15.03.2005 (Вт) 17:33

Врядли... У меня тоже самое, но работает. Формат буффера тут не играет никакой роли, по-моему
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 15.03.2005 (Вт) 18:34

У меня в оконном играет в зависимости от настроек экрана. Напр, если High Color 16 то CreateDevice работает только D16, на True - D24X8/S8
а отсюда ползет и CreateTexture. Если Device-D16, создать на нем текстуру A8R8G8B8 пока не получается.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 15.03.2005 (Вт) 18:45

а вообще у тебя хоть как-то при каких-либо настройках работала данная фича?
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 15.03.2005 (Вт) 22:07

d3drm писал(а):а вообще у тебя хоть как-то при каких-либо настройках работала данная фича?

Работает при True Color и все.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 15.03.2005 (Вт) 22:31

ты пробовал заменять CreateTextureFromFileInMemoryEx на CreateTextureFromFileInMemory? Она вроде должна сама выбирать режим для создания текстуры
ХЎ

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 15.03.2005 (Вт) 23:49

Хоть в лоб, хоть по лбу всё едино D3DXERR_INVALIDDATA
Нифига не пойму, почему.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 16.03.2005 (Ср) 21:48

Код: Выделить всё
Public Function CreateNewTexture(ColorArray() As Long, Width, Height) As Direct3DTexture8
  Dim Surface As Direct3DSurface8
  Dim Format As CONST_D3DFORMAT
  Dim RC As RECT
  RC.Left = 0:  RC.Top = 0:  RC.Right = Width - 1:  RC.bottom = Height - 1
  Format = D3DFMT_A8R8G8B8
  Set CreateNewTexture = D3DDevice.CreateTexture(Width, Height, 1, 0, Format, D3DPOOL_MANAGED)
  Set Surface = CreateNewTexture.GetSurfaceLevel(0)
  D3DX.LoadSurfaceFromMemory Surface, ByVal 0, RC, ColorArray(0), Format, Width * 4, ByVal 0, RC, D3DX_FILTER_NONE, &HFF000000
  D3DX.FilterTexture CreateNewTexture, ByVal 0, D3DX_DEFAULT, D3DX_FILTER_LINEAR
  Set Surface = Nothing
End Function
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 01.05.2005 (Вс) 17:44

Байда!!!
Код: Выделить всё
Width=25:Height=25
Set NewTexture = D3DX.CreateTexture(D3DDevice, Width, Height, 1, 0, Format, D3DPOOL_MANAGED)

Создает текстуру 32х32.
Как заставить делать правильные размеры?
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 01.05.2005 (Вс) 21:16

Yurich писал(а):Байда!!!
Код: Выделить всё
Width=25:Height=25
Set NewTexture = D3DX.CreateTexture(D3DDevice, Width, Height, 1, 0, Format, D3DPOOL_MANAGED)

Создает текстуру 32х32.
Как заставить делать правильные размеры?
Объясни, почему не катит D3DDevice и еще отнимаешь 1? В сдк они вроде не отнимают.... :roll:

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 01.05.2005 (Вс) 21:41

Провел тест насчет -1. Вот скрин....
Вообще, если подумать, то единицу отнимать все же надо, но выходит глюк... Причем если написать +1 - то вываливает ошибка, так что единицу не надо отнимать...... Вот скрин, в паинте увеличь и глянь...
У вас нет доступа для просмотра вложений в этом сообщении.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 01.05.2005 (Вс) 22:28

Vovik писал(а):Объясни, почему не катит D3DDevice и еще отнимаешь 1? В сдк они вроде не отнимают.... :roll:

Vovik
1. Нас так не поймут.
Еще раз. Надо создать текстуру с размерами не кратными 2^n, например 25х25. CreateTexture по каким-то причинам "подтягивает"
размер до 32х32. Как избавиться?
2. 1 отнимается в структуре RECT, т.к. индекс первого бита в ней не единица, а нуль
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 02.05.2005 (Пн) 7:39

1.
Код: Выделить всё
  Width=25:Height=25
   Set NewTexture = [b]D3DDevice[/b].CreateTexture(Width, Height, 1, 0, Format, D3DPOOL_MANAGED)
Чем тебя не устраивает D3DDevice? Так же все работает. В чем загвоздка - не въеду. Если D3DX создает только кратные 2^n (впрочем, работает с директиксовскими спрайтами тоже только кратными 2^n), то аналог ф-ции в D3DDevice справляется с этой задачей без проблем. :roll:
2. Если уж ты отнимаешь единицу в структуре RECT, то и при создании текстуры Width и Height должны быть уменьшены, т.к. CreateTexture создает текстуру тоже начиная с 0;0 а не 1;1 (но вообще не надо ничего отнимать! Сам попробуй... Ты не отнимай, а прибавь 1 - Ошибка!, а если не прибавлять и не отнимать, то все зеергуд. Сам подумай.... А ты скрины смотрел?). :roll:
Последний раз редактировалось Vovik 02.05.2005 (Пн) 17:00, всего редактировалось 1 раз.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 02.05.2005 (Пн) 14:02

А если вместо D3DX.CreateTexture использовать Direct3DDevice8.CreateTexture ?

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 02.05.2005 (Пн) 16:58

Mikle писал(а):А если вместо D3DX.CreateTexture использовать Direct3DDevice8.CreateTexture ?
Вот я от Юрича и пытаюсь добиться ответа, чем ему не подходит эта замена... :shock:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 02.05.2005 (Пн) 17:55

Mikle писал(а):А если вместо D3DX.CreateTexture использовать Direct3DDevice8.CreateTexture ?


D3DDevice.CreateTexture 32, 32, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED

=D3D_OK

D3DDevice.CreateTexture 25, 25, 1, 0, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED

=D3DERR_INVALIDCALL
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

RADIST(vb2ar23)
Новичок
Новичок
Аватара пользователя
 
Сообщения: 46
Зарегистрирован: 28.04.2005 (Чт) 14:06

Сообщение RADIST(vb2ar23) » 02.05.2005 (Пн) 19:56

Может я не в тему, а вот у меня почему-то FPS порядка 275-300. И не пойму почему у тебя так мало.
ЗЫ Видяха GeForce 5200 FX, всегото, совсемем не радеон(к сожалению :( ).

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 03.05.2005 (Вт) 15:04

Yurich вот и ответ нашелся. просто устройство не позволяет создавать текстуры не кратные по ширине и высоте степеням двойки.
ХЎ

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 03.05.2005 (Вт) 15:36

d3drm писал(а):Yurich вот и ответ нашелся. просто устройство не позволяет создавать текстуры не кратные по ширине и высоте степеням двойки.
А мне кажется, баг заключается совсем не в этом... У нас с Юричем одинаковые видеокарты, но у меня создается без проблем, а у него ошибка вылазит... Может чет не то при создании самого девайса? :roll: Вообще, это попа какая-то :shock:

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 03.05.2005 (Вт) 20:30

Vovik писал(а):
d3drm писал(а):Yurich вот и ответ нашелся. просто устройство не позволяет создавать текстуры не кратные по ширине и высоте степеням двойки.
А мне кажется, баг заключается совсем не в этом... У нас с Юричем одинаковые видеокарты, но у меня создается без проблем, а у него ошибка вылазит... Может чет не то при создании самого девайса? :roll: Вообще, это попа какая-то :shock:

Код применяем одинаковый. Карты одинаковые. Что еще может быть?
Vovik
Кинь свои капсы в тему по возможностям карт.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 04.05.2005 (Ср) 17:09

Yurich
Может у тебя что-то не то с дровами. Например может зависеть от драйвера на чипсет мамки. Помню у тебя и HardWareT&L не пускался, а должен.
А текстуры, не кратные по размерам степеням двойки, не создаются при создании нескольких мип-уровней, а тут 1 мип-уровень.

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 05.05.2005 (Чт) 2:58

Mikle писал(а):Yurich
Может у тебя что-то не то с дровами. Например может зависеть от драйвера на чипсет мамки. Помню у тебя и HardWareT&L не пускался, а должен.

М.., да, должен. Подобный глюк замечал у себя в клубе. Карты все были МХ. Матери на VIA KT133A (у меня MSI K7TPro2A на том-же чипсете). Игруха, уже забыл, типа "балбесы против полиции". Нигде не включался аппаратный T&L. Вернее, вроде включался, но от колес оставались видны только шины. Приходилось включать программный. Дрова стояли родные. Потом как-то про глюк подзабылось, в остальных играх было нормально.
Тут еще проблема. Делаю ПО для учебных заведений, а техника там, сами знаете, далеко не современная. Хочется чтоб работало на минимуме!
Mikle писал(а):А текстуры, не кратные по размерам степеням двойки, не создаются при создании нескольких мип-уровней, а тут 1 мип-уровень.

Фразу не совсем понял. Мип-уровней не должны быть, или не более одного? Пробовал ставить при вызове нуль - не катит, та-же ошибка.
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 05.05.2005 (Чт) 14:25

Мип-уровней не может быть меньше одного, если ставить при вызове ноль - генерируется максимально возможное число мип-уровней.

Vovik
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 643
Зарегистрирован: 02.08.2003 (Сб) 15:14
Откуда: Belarus, Minsk

Сообщение Vovik » 07.05.2005 (Сб) 9:12

Юрич, может ради эксперемента скачать обновленные дрова и посмотреть, изменится ли положение? :?

Yurich
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 675
Зарегистрирован: 05.03.2003 (Ср) 3:43
Откуда: DONBASS/Gorlovka

Сообщение Yurich » 07.05.2005 (Сб) 12:57

Vovik писал(а):Юрич, может ради эксперемента скачать обновленные дрова и посмотреть, изменится ли положение? :?

Карточка "Inno3D GeForce2 MX/MX 400"
Для сравнения, у Вовика представляется чисто - "NVIDIA GeForce 2 MX 400"
Уже это должно наводить на размышления - либо чип разный (что маловероятно), либо биос.
Не охота мне париться с установкой новых дров. Nvidia, к примеру, в своих ForceWare, начиная с версии 7x.xx отказалась поддерживать модели, у которых не реализован ДХ9.0, то есть серию Ti 4xxx и её предшественников. Совместимость с моделями 5ххх пока остается, но не рекомендовал бы владельцам этих карт заботиться об обновлении дров по причине явной ориентации последних на на серию 6ххх.
Поставил дрова Inno3D, поддерживающие Ti 4200.
D3DPTEXTURECAPS_NONPOW2CONDITIONAL=Yes
Несмотря на это вылет с ошибкой остался!!!
- Какой треугольник не подвластен законам геометрии?
- У которого все углы тупые!

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 07.05.2005 (Сб) 17:56

Yurich
4 in 1 ставил? Попробуй переставить. При установке будет выбор:
Normal Mode
Turbo Mode
Uninstall....
Выбирай Turbo.
Убедись, что 4 in 1 соответствует версии чипсета. А вот Detonator для MX400 достаточно 40.72.
Проверь, что в BIOS все в порядке с AGP и с Assign IRQ for VGA. Проверь, что в Windows в свойствах экрана движек использования аппаратного ускорения стоит на максимум.
Еще, если нет - поставь RivaTuner - рульная штука.


Вернуться в Мультимедиа

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

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

    TopList