Servus, für simple Debugausgaben oder einfache geometrische Objekte hab ich angefangen die Vertices im Vertexshader per SV_VertexID festzulegen. Mir reichts einfach für jede Stelle im Code wo ich ein Vollbildrechteck benötige (oder vergleichbares) das ganze in einen VertexBuffer packen zu müssen (ist bestimmt ne Designfrage, aber naja). Prinzipiell funktioniert das auch super, ich render momentan Billboards (4 Vertices, Strip) und diese werden ohne Fehler dargestellt. Nun habe ich auch eine simple Debugausgabe für Spotlichtquellen in Form einer Pyramide. Die Pyramide wird mit 5 Vertices und einer Control Point Patchlist generiert, mittels eines Gemoetry-Shader durch ein Strip zu einer Pyramide geformt und die Ausgabe wird korrekt gerendert. Die Debug-Runtime liefert mir jedoch einen Fehler, der meiner Meinung nach Schwachsinn ist.
Kurz beide Draw-Calls (sind meine State-Wrapper-Klassen, Funktionsweise sollte klar sein):
Code: Alles auswählen
// Punktlichter
states::input_assembler_stage(context)
.setPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP)
.setLayout(nullptr)
.setVertexBuffers(0, nullptr, 0, 0);
context->DrawInstanced(4, 512, 0, 0);
// Spotlichter
states::input_assembler_stage(context)
.setPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_5_CONTROL_POINT_PATCHLIST)
.setLayout(nullptr)
.setVertexBuffers(0, nullptr, 0, 0);
context->DrawInstanced(5, 512, 0, 0);
Fehlermeldung:
D3D11 ERROR: ID3D11DeviceContext::DrawInstanced: Rasterization Unit is enabled (PixelShader is not NULL or Depth/Stencil test is enabled and RasterizedStream is not D3D11_SO_NO_RASTERIZED_STREAM) but the input topology is Patch Control Points. You need either a Hull Shader and Domain Shader, or a Geometry Shader. [ EXECUTION ERROR #349: DEVICE_DRAW_INPUTLAYOUT_NOT_SET]
Signatur des Vertex Shader:
Code: Alles auswählen
void vs_debug_spotlight(in uint vertexID : SV_VertexID, in uint instanceID : SV_InstanceID, out vs_spotlight_output output) {
Die selbe Eingabesignatur verwende ich ohne Probleme auch bei den Billboards. Wie gesagt, wird die Pyramide korrekt gerendert, bedeutet es ist ein Geometry-Shader gesetzt. Der Vertex-Shader besitzt keine Vertex bezogenen Eingabeparameter, demnach ist es valide ein null InputLayout zu setzen und dementsprechend keinen Vertex-Buffer zu binden. Kann jemand sich einen Reim auf diese Fehlermeldung machen?
Mit freundlichem Gruß,
RazorX