Ich bin im Moment ein wenig am herumprobieren, ob ich mit Effects11 oder direkt auf dem Geräte-Kontext arbeiten soll. Ich habe dazu ein paar Fragen.
1. Warum fällt meine Framerate von 1600 auf 300 wenn ich nichts zeichne, sondern nur mit Effects11 eine Textur an den Shader sende(SetResource)?
2. Ist Effects11 langsamer als das direkte arbeiten mit dem Geräte-Kontext? Ich fand folgenden Code in Effects11, um eine Textur an den Shader zu senden:
|
C-/C++-Quelltext
|
1
2
3
4
|
// Texture variables don't need to be dirtied.
SAFE_ADDREF(pResource);
SAFE_RELEASE(Data.pShaderResource->pShaderResource);
Data.pShaderResource->pShaderResource = pResource;
|
Das ganze wirkt mir ein wenig überladen, um es jedesmal aufzurufen, damit eine neue Textur gebunden wird.
3. Ist es möglich mit Effects11 zu prüfen, ob eine ganz bestimmte Textur gebunden ist? Oder sollte man sich eine Klasse schreiben, die beispielsweise eine ID3D11ShaderResourceView Variable widerspiegelt, damit man prüfen kann, ob die Textur schon gebunden ist?
4. Ist es möglich zu überprüfen, ob eine bestimmte Textur gebunden ist, ohne Effects11 zu nutzen? Also PSSetShaderResources(...)? Ist dies auch in einer akzeptablen Geschwindigkeit möglich?
5. Ist es möglich eine Textur mittels PSSetShaderResources an die Pipeline zu binden und sie dann mit zwei verschiedenen Shadern zu nutzen? In etwas so:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
deviceContext->PSSetShaderResources(0, 1, &texture);
deviceContext->PSSetShader(shader1, NULL, 0);
// zeichne was
deviceContext->PSSetShader(shader2, NULL, 0);
// zeichne was
|
Danke für mögliche Antworten!