ПрограммированиеФорумГрафика

OpenGL Вопросы (93 стр)

Страницы: 190 91 92 93 94 95 Следующая »
#1380
1:37, 25 июля 2024

AMM1AK
> А каким образом?
Сейчас перечитал и понял, что не правильно понял твой вопрос.
В таком случае я вижу только один вариант, linked list на атомиках. Если у тебя овердроу не сильно большой, то поидее будет не сильный оверхед.
Знаешь как линкедлист делается на атомиках?

#1381
6:46, 25 июля 2024

MrShoor
Да видел примеры. R32ui image надо дополнительно. Перед чтением пишем 1, после записи возвращаем 0. Хотим читать, ждём пока не будет 0.. оно?)

#1382
(Правка: 26 июля 2024, 0:38) 22:02, 25 июля 2024

AMM1AK
> Перед чтением пишем 1, после записи возвращаем 0. Хотим читать, ждём пока не будет 0.. оно?)
Если ты про спинлок, то его тоже можно через atomicCompSwap

while (true) {
  if (atomicCompSwap(thread_data[fragcoord.xy], 0, thread_id)) continue;
  //делаешь то что тебе надо
  thread_data[fragcoord.xy] = 0;
  break;
}

Но я говорил про несколько другое, про линкед листы (как например в Order Independent Transparency)

#1383
1:04, 26 июля 2024

MrShoor
> Но я говорил про несколько другое, про линкед листы (как например в Order Independent Transparency)
Так там идея в том, что для каждого фрагмента выделяется свой кусок в ssbo и фрагмент уже работает с ним. А у меня как раз прикол в том, что пачка фрагментов с одинаковыми координатами должны работать с одним куском в ssbo.. отсюда и затык..

#1384
6:14, 26 июля 2024

А имедж на атомиках у меня и так есть, там как раз и хранится индекс для чтения из ssbo.
По сути, как oit, только для каждого фрагмента лист длинной 1 элемент, который и надо перезаписывать.

#1385
6:48, 26 июля 2024

AMM1AK
Если овердров не большой, то поидее спинлок выше должен неплохо сработать

#1386
4:06, 9 сен 2024

  Есть ли в OpenGL возможность слить текстуры в одну (не наложить друг на друга, а создать большую из маленьких)? Будут ли подобные проблемы если я буду использовать DX или Vulkan? Точнее есть ли в них подобные реализации?

#1387
(Правка: 5:00) 4:57, 9 сен 2024

Mirrel
> Есть ли в OpenGL возможность слить текстуры в одну (не наложить друг на друга, а создать большую из маленьких)?
Есть. Создаешь большую, вызываешь glTexSubImage2D для своих маленьких изображений с нужными координатами.
> Будут ли подобные проблемы если я буду использовать DX или Vulkan? Точнее есть ли в них подобные реализации?
Есть. Действовать точно так же как и в случае с OpenGL. Только вызывать вместо glTexSubImage2D надо будет ID3D11DeviceContext::UpdateSubresource. В случае с DX12/Vulkan нужно будет еще промежуточный буфер создать, и из него уже звать CopyTextureRegion/vkCmdCopyBufferToImage

#1388
7:38, 9 сен 2024

MrShoor
> В случае с DX12/Vulkan нужно будет еще промежуточный буфер создать, и из него уже звать CopyTextureRegion/vkCmdCopyBufferToImage
Можно и напрямую из имэджа в имэдж:
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html… opyImage.html
https://learn.microsoft.com/en-us/windows/win32/api/d3d12/nf-d3d1… textureregion

#1389
7:47, 9 сен 2024

HolyDel
> Можно и напрямую из имэджа в имэдж:
Ну в любом случае придется создать промежуточный имейдж/буфер

#1390
15:16, 9 сен 2024

  Благодарю, буду так же рассматривать и этот вариант.

  Я видел как создаётся FBO и данные записываются в текстуру. Ну и ещё, лично я, выводил в буфер экрана, не выводя изображения, считывал данные.

  Какой метод будет лучше использовать?

#1391
15:48, 9 сен 2024

Mirrel
Хочешь конкретно ты что?

#1392
(Правка: 16:06) 15:58, 9 сен 2024

innuendo

слить текстуры в одну (не наложить друг на друга, а создать большую из маленьких)


  А по сути, я хочу сделать диалог. Чтоб я мог вывести любую часть диалога, насколько длинным бы он не был. И не тратить на это много времени, рисуя каждый символ. Закинуть весь текст в текстуру и выводить текстуру по координатам.
  А, ну и да, чтоб я потом много времени на шейдеры не тратил, чтоб переделать данную функциональность. Желательно чтоб одинаково работало как в "устаревшем" OpenGL, так и с использованием шейдеров.
  Точнее, чтоб я, как минимум,  произведённые вычисления мог применить к шейдерам (это будет уже моя проблема).

#1393
16:17, 9 сен 2024

MrShoor
> while (true) {
> if (atomicCompSwap(thread_data[fragcoord.xy], 0, thread_id)) continue;
> //делаешь то что тебе надо
> thread_data[fragcoord.xy] = 0;
> break;
> }
Какой-то очень умный код, а почему не так?:

while (atomicCompSwap(thread_data[fragcoord.xy], 0, thread_id)) { /* spinlock */ }
//делаешь то что тебе надо
thread_data[fragcoord.xy] = 0;
#1394
16:41, 9 сен 2024

Имбирная Ведьмочка
да, это то же самое посути

Страницы: 190 91 92 93 94 95 Следующая »
ПрограммированиеФорумГрафика