Работа с буфером вершин с несколькими потоками в вычислительном шейдереC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Работа с буфером вершин с несколькими потоками в вычислительном шейдере

Сообщение Anonymous »


Изображение

Здравствуйте. Я пытаюсь работать в вычислительном шейдере с буфером вершин, содержащим множество потоков
Позиция в первом потоке
Касательная и цвет во втором
Координаты UV в третьем
Как передать эти данные в вычислить шейдер и повторно получить его там?
P.S: Если я помещу все данные в один поток, все будет работать нормально.
Вот код Unity C# для одного потока:var mesh = meshFilter.mesh;
var vertexBuffer = meshFilter.graphicsBuffer;
m_paintMeshShader.SetBuffer(m_paintKernelHandle, Vertices, vertexBuffer);
m_paintMeshShader.SetInt(VertexCount, mesh.vertexCount);
m_paintMeshShader.SetInt(TargetVertexOffset, mesh.GetVertexAttributeOffset(VertexAttribute.Position));
m_paintMeshShader.SetInt(TargetColorOffset, mesh.GetVertexAttributeOffset(VertexAttribute.Color));
m_paintMeshShader.SetInt(TangentOffset, mesh.GetVertexAttributeOffset(VertexAttribute.Tangent));
m_paintMeshShader.SetInt(TargetMaxOffset, vertexBuffer.stride);
m_paintMeshShader.Dispatch(m_paintKernelHandle, (mesh.vertexCount + 31) / 31, 1, 1);

Вот код вычислительного шейдера hlsl для одного потока:
int vertexCount;
int targetVertexOffset;
int targetColorOffset;
int tangentOffset;
int targetMaxOffset;
RWByteAddressBuffer vertices;

[numthreads(32, 1, 1)]
void Paint(uint3 id : SV_DispatchThreadID)
{
uint index = id.x;
if (index >= asuint(vertexCount))
return;

int targetIndex = index * targetMaxOffset;
float2 positionDefaultPacked = asfloat(vertices.Load2(targetIndex + targetVertexOffset));
uint colorDefalutPacked = asuint(vertices.Load(targetIndex + targetColorOffset)));
uint2 tangentDefalutPacked = asuint(vertices.Load2(targetIndex + tangentOffset)));
//...do some work
}


Подробнее здесь: https://stackoverflow.com/questions/790 ... ute-shader
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Чтение текстуры трафарета в вычислительном шейдере
    Anonymous » » в форуме C++
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • OpenGL Ray Tracer и BVH в вычислительном шейдере
    Anonymous » » в форуме C++
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Как отфильтровать список (случайных) вершин по расстоянию между каждой из двух соседних вершин?
    Anonymous » » в форуме C++
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Неустранимая ошибка Python при использовании универсального класса с потоками и буфером stdin
    Гость » » в форуме Python
    0 Ответы
    57 Просмотры
    Последнее сообщение Гость
  • Что не так в вычислительном заголовке для ISO8583?
    Anonymous » » в форуме JAVA
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»