Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
 Аватар для craftersmine
31 / 29 / 9
Регистрация: 06.06.2014
Сообщений: 373

SharpDX: NullReferenceException после ResizeBuffers

24.06.2019, 13:48. Показов 903. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток, даже не знаю куда писать, сюда или в раздел DirectX. Вообщем возникла проблема с изменением размера буферов, есть SwapChain в котором я вызываю ResizeBuffers, перед этим очистив все ресурсы с помощью Dispose() как говорится во многих примерах. Однако после того как я выполнил ресайз и создал ресурсы заново, при вызове RenderTarget.Clear() вываливается NullReferenceException, при этом если смотреть в отладчике, то все свойства имеют значения такие же как и до ресайза (ну за исключением размеров, они становятся такими какими я задал окно), отсюда понятно что NRE вываливается откуда-то из дебрей SharpDX. Возможно я неправильно делаю ресайз или еще что-то, не знаю

Код метода ресайза:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void ResizeTarget(WindowParameters windowParameters)
        {
            GameWindow.Current.WindowParameters = windowParameters;
            IsRendererSuppressed = true;
            D3DDevice.ImmediateContext.ClearState();
            RenderTarget.Dispose();
            Backbuffer.Dispose();
            RenderTargetView.Dispose();
            RenderTargetSurface.Dispose();
            SwapChain.ResizeBuffers(SwapChainDescription.BufferCount, 0, 0, DXGI.Format.Unknown, DXGI.SwapChainFlags.AllowModeSwitch);
            Backbuffer = D3D11.Texture2D.FromSwapChain<D3D11.Texture2D>(SwapChain, 0);
            RenderTargetView = new D3D11.RenderTargetView(D3DDevice, Backbuffer);
            RenderTargetSurface = Backbuffer.QueryInterface<DXGI.Surface>();
            RenderTarget = new D2D1.RenderTarget(D2DFactory, RenderTargetSurface, new D2D1.RenderTargetProperties(new D2D1.PixelFormat(DXGI.Format.Unknown, D2D1.AlphaMode.Premultiplied)));
            D3DDevice.ImmediateContext.OutputMerger.SetRenderTargets(RenderTargetView);
            //D3DDevice.ImmediateContext.Rasterizer.SetViewport(0, 0, GameWindow.Current.WindowParameters.Width, GameWindow.Current.WindowParameters.Height);
            IsRendererSuppressed = false;
        }
Сам рендерер:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
internal void Render()
        {
            if (RenderTarget != null || !RenderTarget.IsDisposed || !IsRendererSuppressed)
            {
                RenderTarget.BeginDraw();   // Здесь вываливается NRE
 
                RenderTarget.Clear(SceneManager.CurrentScene.BackgroundColor.Color4);
                RenderTarget.DrawRectangle(new RectangleF(10, 10, 100, 50), new D2D1.SolidColorBrush(RenderTarget, new Core.Color(.0f, 1f, .0f).Color4));
 
                RenderTarget.EndDraw();
 
                switch (GameWindow.Current.WindowParameters.VSyncMode)
                {
                    case VSyncMode.Off:
                        SwapChain.Present(0, DXGI.PresentFlags.None);
                        break;
                    case VSyncMode.On:
                        SwapChain.Present(1, DXGI.PresentFlags.None);
                        break;
                    case VSyncMode.Half:
                        SwapChain.Present(2, DXGI.PresentFlags.None);
                        break;
                }
            }
        }
До ResizeTarget

После ResizeTarget
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.06.2019, 13:48
Ответы с готовыми решениями:

SharpDX: ошибка при использовании swapChain.ResizeBuffers()
Здравствуйте! А проекте c SharpDX при изменении размера окна возникает ошибка в работе метода swapChain.ResizeBuffers(): HRESULT: , Module:...

NullReferenceException после удаления элементов в CheckedListBox
Здравствуйте! У меня возникла задача удалять те элементы в CheckedListBox, которые &quot;несовместимы&quot; с чекнутым (читать как...

Выбивает NullReferenceException после загрузки файла
запускаю проект, загружаю файл txt и бьет ошибку непонимаю в чем проблема, подскажите что исправить, первый проект и немного трудно, сдача...

1
 Аватар для craftersmine
31 / 29 / 9
Регистрация: 06.06.2014
Сообщений: 373
24.06.2019, 16:24  [ТС]
Сделал неким костылем, при смене разрешений память не очищается, то есть при смене разрешений использование памяти только растет, не важно разрешение изменилось в большую или меньшую сторону:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public void ResizeTarget(WindowParameters windowParameters)
        {
            GameWindow.Current.WindowParameters = windowParameters;
            IsRendererSuppressed = true;
            ReleaseDevices();
            InitializeDevices();
            IsRendererSuppressed = false;
        }
 
        public void ReleaseDevices()
        {
            RenderTarget.Dispose();
            Backbuffer.Dispose();
            RenderTargetSurface.Dispose();
            RenderTargetView.Dispose();
            D2DDeviceContext.Dispose();
            D2DDevice.Dispose();
            D2DFactory.Dispose();
            DXGIDevice.Dispose();
            D3DDevice.Dispose();
            D3DDefaultDevice.Dispose();
            SwapChain.Dispose();
            SwapChain = null;
            RenderTarget = null;
            RenderTargetSurface = null;
            Backbuffer = null;
            RenderTargetView = null;
            D2DDeviceContext = null;
            D2DFactory = null;
            D2DDevice = null;
            DXGIDevice = null;
            D3DDevice = null;
            D3DDefaultDevice = null;
        }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.06.2019, 16:24
Помогаю со студенческими работами здесь

SharpDx c#
Начал потихоньку изучать sharpdx Пытался сделать оверлей, но никак не получается очистить экран без потери прозрачности окна ...

Уроки SharpDX
Где можно найти уроки/книги по SharpDX?

Медленный SharpDX 2D
Привет всем! Есть задача: отрисовать около 150 многоугольников примерно по 100-200 точек, залитых однородным цветом (у каждого свой...

Падение SharpDX
Привет всем! Версия SharpDX 2.5.0, обновиться пока не могу, ибо много кода придется переделывать (как оказалось, очень плохо у 3 версии с...

Документация по SharpDX
Доброго времени суток уважаемые товарищи! Решил я заняться графикой, погуглил и понял что лучше всего SharpDX, но документации по нему...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru