Ich möchte den selben Constant Buffer in zwei Shadern verwenden, in unterschiedlichen Slots:
// Vertex shader:
cbuffer Light : register(b0) {
float3 pos : packoffset(c0);
float3 color : packoffset(c1);
};
// Pixel Shader:
cbuffer Light : register(b7) {
float3 pos : packoffset(c0);
float3 color : packoffset(c1);
};
Kriege ich das hin, ohne das Layout doppelt hinzuschreiben? Ich habe versucht, ihn zu deklarieren, aber ohne Erfolg:
// Gemeinsamer Header:
cbuffer Light {
float3 pos : packoffset(c0);
float3 color : packoffset(c1);
};
// Vertex Shader:
cbuffer Light : b0; // error
Pixel Shader:
cbuffer Light: b7; // error
grrrrnnnngh
[HLSL] cbuffer deklarieren
Re: [HLSL] cbuffer deklarieren
Sollte laut Doku mittels optionalem shader_profile/target möglich sein. Sollte. Nur kriegt man z.B. für sowas:
dann diese Fehlermeldung:
error X3515: User defined constant buffer slots cannot be target specific
Gurgelt man nach dieser Fehlermeldung kommt man auch nicht weiter.
In der Tat grrr. Sehe für einen workaround lediglich irgend einen Makro-Murks :/
Code: Alles auswählen
cbuffer SomeBuffer : register( ps, b0 ) : register( vs, b1 )
{
// whatever
};
error X3515: User defined constant buffer slots cannot be target specific
Gurgelt man nach dieser Fehlermeldung kommt man auch nicht weiter.
In der Tat grrr. Sehe für einen workaround lediglich irgend einen Makro-Murks :/
- Krishty
- Establishment
- Beiträge: 8305
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [HLSL] cbuffer deklarieren
Wow, die Syntax war mir nicht aufgefallen! Unter bestimmten Umständen ist die sicher nützlich. Bringt mich hier nicht weiter, aber ich habe zumindest was gelernt. Ich dupliziere die verdammten structs einfach … was soll’s … :(
Re: [HLSL] cbuffer deklarieren
Mir ist gerade eingefallen, dass ich damals ja auch mal kurze Zeit DX10 gemacht habe.
Also habe ich nun mal in meinem alten Projekt gestöbert: Tatsächlich hatte ich auch cbuffer genutzt. Jetzt weiß ich allerdings nicht, ob die Situation die gleiche ist. Ich hatte die in einem Effektfile.
Also scheinbar sind cbuffer gar nicht als Structs anzusehen, sondern eher als Gruppenname für eine Menge an Variablen.
Ich hatte da die Slots gar nicht spezifiziert...
Und später im Code wurden die Variablen direkt angesprochen... also da hieß es dann z.B. float4 col = vMeshColor;
Arrays:
Ich hoffe mal, das bringt dich weiter.
Also habe ich nun mal in meinem alten Projekt gestöbert: Tatsächlich hatte ich auch cbuffer genutzt. Jetzt weiß ich allerdings nicht, ob die Situation die gleiche ist. Ich hatte die in einem Effektfile.
Also scheinbar sind cbuffer gar nicht als Structs anzusehen, sondern eher als Gruppenname für eine Menge an Variablen.
Ich hatte da die Slots gar nicht spezifiziert...
Code: Alles auswählen
cbuffer cbObject
{
matrix World;
matrix WorldNor;
matrix WorldNorm;
float4 vMeshColor;
float4 Campos;
float4 Thickness;
bool bSingleColor;
bool bLighttrans;
bool bLight;
bool bAlphatest;
bool bFog;
bool bObjNor;
bool bNewTex;
float4 ObjNor;
float4 Time;
};
Arrays:
Code: Alles auswählen
cbuffer cbLight
{
float4 Light_Pos[256];
float4 Light_Color[256];
};
- Krishty
- Establishment
- Beiträge: 8305
- Registriert: 26.02.2009, 11:18
- Benutzertext: state is the enemy
- Kontaktdaten:
Re: [HLSL] cbuffer deklarieren
Nein, leider nicht – so bindest du die Buffer immer nur an den ersten Slot (b0). Ich möchte den selben Buffer je nach Verwendung an unterschiedliche Slots binden …