[c#] Ресайзинг окна

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

Модератор: Mikle

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

[c#] Ресайзинг окна

Сообщение DirectXManiac » 16.02.2011 (Ср) 12:57

Привет всем! Короче столкнулся с такой проблемой. Инициализирую D3DDevice, все нормально происходит, но только если инициализация происходит после InitializeComponent() и после установки размеров компонента. Если происходит ресайз - тогда изображения нет, пробовал по разному, в том числе и ловит Reset, делать Reset переставлять параметры, пока не выходит. Подскажите решение
Код: Выделить всё
params3D = new PresentParameters();
            //Buffer format
            params3D.AutoDepthStencilFormat = DepthFormat.D16;
 
            params3D.EnableAutoDepthStencil = true;
            params3D.Windowed = true;
            params3D.DeviceWindow = mainControl;
            //params3D.PresentationInterval = PresentInterval.Immediate;
            params3D.SwapEffect = SwapEffect.Discard;
            //Creating device
            mainDevice = new Device(0, DeviceType.Hardware, mainControl, CreateFlags.SoftwareVertexProcessing, params3D);
            mainDevice.DeviceReset += new EventHandler(mainDevice_DeviceReset);

static void mainDevice_DeviceReset(object sender, EventArgs e)
        {
            mainDevice = (Device)sender;
            SetFont("Arial", 8, FontStyle.Regular);
        }

Инициализация такая, пробовал даже высталять размеры и Handle окна
#define ROFL 0xDDDD

Dakovalev1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 23.02.2010 (Вт) 14:16

Re: [c#] Ресайзинг окна

Сообщение Dakovalev1 » 16.02.2011 (Ср) 15:30

А что значит нет изображения? Синий/зелёный/серо-буро-козявчатый экран?
Я имею в виду то, что у тебя окно заливается цветом, а геометрия не рисуется?
В книге Managed DirectX 9 сказано, что при изменении размеров окна устройство сбрасывается.
При сбросе все вершинные и индексные буферы перезагружаются с пустыми данными.
Поэтому в методе mainDevice_DeviceReset() надо перезагрузить геометрию. На счёт mesh`ей не помню точно, но вот в буферы надо заново пихать информацию о вершинах. Короче всю загрузку геометрии перемести в метод mainDevice_DeviceReset() и потом просто вызови его(после инициализации device`а).
Юзай гугл(например).

FireFenix
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1640
Зарегистрирован: 25.05.2007 (Пт) 10:24
Откуда: Mugen no Sora

Re: [c#] Ресайзинг окна

Сообщение FireFenix » 16.02.2011 (Ср) 15:39

Вроде нада установить стили типа
Код: Выделить всё
this.SetStyle(ControlStyles.Opaque | ControlStyles.AllPaintingInWmPaint, true);

И привязать ещё рендер на событие OnPaint
Птицей Гермеса меня называют, свои крылья пожирая... сам себя я укрощаю
私はヘルメスの鳥 私は自らの羽根を喰らい 飼い慣らされる

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: [c#] Ресайзинг окна

Сообщение DirectXManiac » 16.02.2011 (Ср) 16:45

Неужели я похож на того кто впервые открыл DirectX? :lol:
Я в курсе всех этих вещей, и рендер у меня в OnPaint, и все перестраивается, просто лажа в том что не рисовалось ничего, даже текст, который перестраивать не надо.
Сейчас проблема решилась, как - незнаю. Просто заново начал прикручивать ресайзинг повесил все хендлеры, в том числе и OnDeviceLost, OnDeviceResize и все заработало, на другом компе не проверял, но вот когда я компонент кидаю и ресайз делаю прямо в дизайнере у меня ничего не рисуется :) Это конечно не беда, но просто интересно почему так, неужели Invalidate не вызывается?(Мне не нужно постоянно прорисовывать графику, когда надо я перерисовал).
Сейчас проблема другая. Иногда прога подвисает, при этом не выкидывает Exception, все что нужно я поймал из моих try catch не вылазит ошибка, почему то виснет...
#define ROFL 0xDDDD

Dakovalev1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 23.02.2010 (Вт) 14:16

Re: [c#] Ресайзинг окна

Сообщение Dakovalev1 » 16.02.2011 (Ср) 16:47

Думаю onpaint on sam сделал.
Вообще он нам мало что рассказал о своём коде.
Это плохо, можно не понять в чём проблема.

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: [c#] Ресайзинг окна

Сообщение DirectXManiac » 16.02.2011 (Ср) 16:49

Кто он? Дизайнер форм? Стремная штука... на нем все криво как то :?
#define ROFL 0xDDDD

Dakovalev1
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 154
Зарегистрирован: 23.02.2010 (Вт) 14:16

Re: [c#] Ресайзинг окна

Сообщение Dakovalev1 » 16.02.2011 (Ср) 16:50

Это шутка? :)

Что за проект, если не секрет?

DirectXManiac
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1543
Зарегистрирован: 03.11.2005 (Чт) 13:32
Откуда: из DirectX SDK

Re: [c#] Ресайзинг окна

Сообщение DirectXManiac » 17.02.2011 (Чт) 13:18

Ну конечно шутка :wink:
Редактор прошивок для автомобилей - а компонент 3д график функции 2х переменных с возможностью редактирования и выделения мышкой :)
#define ROFL 0xDDDD


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

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

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

    TopList