2016-05-05 6 views
0

Mein Code hat funktioniert. Zuerst erstelle ich einen Puffer, um Puffer von Compute Shader von CopyResource zu bekommen.Wie übergebe ich das Ergebnis vom Compute Shader zum Vertex Shader?

Dann erstelle ich einen Zeiger Aufruf p1 und Ergebnis Zeiger aus MappedResource1. Danach erstelle ich Vertex-Puffer und render.

Aber ich glaube nicht, es ist der beste Weg, Eckpunktpufferspeicher von Compute-Shader zu erhalten:

D3D11_BUFFER_DESC desc; 
ZeroMemory(&desc, sizeof(desc)); 
mFirstBuffer->GetDesc(&desc); 
desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ; 
desc.Usage = D3D11_USAGE_STAGING; 
desc.BindFlags = 0; 
desc.MiscFlags = 0; 
if (SUCCEEDED(device->CreateBuffer(&desc, nullptr, &debugbuf))) 
{ 
    context->CopyResource(debugbuf, mFirstBuffer.Get()); 
} 
unsigned int stride = sizeof(InstanceData); 
unsigned int offset = 0; 
D3D11_MAPPED_SUBRESOURCE MappedResource1; 
InstanceData *p1; 

context->Map(debugbuf, 0, D3D11_MAP_READ, 0, &MappedResource1); 
p1 = (InstanceData*)MappedResource1.pData; 
context->Unmap(debugbuf, 0); 

D3D11_SUBRESOURCE_DATA VertexBufferData; 
VertexBufferData.pSysMem = p1; 
VertexBufferData.SysMemPitch = 0; 
VertexBufferData.SysMemSlicePitch = 0; 
D3D11_BUFFER_DESC desc2; 
desc2.ByteWidth = sizeof(InstanceData) * MillionParticleCount; 
desc2.Usage = D3D11_USAGE_DEFAULT; 
desc2.BindFlags = D3D11_BIND_VERTEX_BUFFER; 
desc2.CPUAccessFlags = 0; 
desc2.MiscFlags = 0; 
desc2.StructureByteStride = 0; 
device->CreateBuffer(&desc2, &VertexBufferData, &vertexBuffer); 

context->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset); 

ich viele Probe gelesen haben, von denen alle Compute Shader und Vertex-Shader zusammen in nur eine Datei schreiben und Dafür können sie direkt vom Compute Shader profitieren.

In meinem Code, compute Shader und Vertex-Shader sind in verschiedenen Dateien schreiben. Wie soll ich meinen Code optimieren?

+0

Putting den Vertex- und Pixel-Shader-Code in der gleichen Datei ist nicht das, was die Proben zum Austausch von Daten zwischen ihnen ermöglicht. – MooseBoys

+0

@MooseBoys Bitte helfen Sie mir, ich habe keinen Code darüber gefunden. – Yonghui

Antwort

0

Schließlich verwende ich meine alte Methode wie mein Beitrag

Verwandte Themen