DX11 Vertex und Pixel Shader

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Icon
Beiträge: 4
Registriert: 10.08.2011, 17:45

DX11 Vertex und Pixel Shader

Beitrag von Icon »

Servus,
ich bin noch ein Frischling in Sachen DirectX und kämpf mich gerade durch das DirectXTutorial.com: http://directxtutorial.com/Tutorial11/B ... aspx#still

Der Code sollte bis jetzt ein Fenster erstellen, DirectX intialisieren und ein Dreieck zeichnen. Die Datei "shader.hlsl" befindet sich natürlich im selben Verzeichnis wie der restliche Code und ich benutze VC++ 2010.

Ich habe den Code von diesem Tutorial 1 zu 1 übernommen und bekomme ihn einfach nicht zu laufen. Ich vermute den Fehler in folgender Funktion. Das Tutorial ist bis zu dieser Stelle noch kostenlos, wer möchte sich kann unter dem Link oben den kompletten Code anschauen (Einfach nach ganz unten scrollen und auf [Show Code] klicken).

Code: Alles auswählen

void InitPipeline(void)
{
	ID3D10Blob *VS, *PS;

	HRESULT res = 0;
	res = D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, 0, 0);
	res = D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PShader", "ps_5_0", 0, 0, 0, &PS, 0, 0);
			   	
	res = dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS);
	res = dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pPS);
			
	VS->GetBufferPointer();

	devcon->VSSetShader(pVS, 0, 0);
	devcon->PSSetShader(pPS, 0, 0);

	D3D11_INPUT_ELEMENT_DESC ied[] = 
	{
		{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
		{ "COLOR", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }
	};

	dev->CreateInputLayout(ied, 2, VS->GetBufferPointer(), VS->GetBufferSize(), &pLayout);
	devcon->IASetInputLayout(pLayout);
}
Nach dem Compilieren bekomme ich immer eine "Zugriffsverletzung an Position 0x00000000" an der Stelle

Code: Alles auswählen

devcon->Draw()
Kommentiere ich die Stelle aus, bekomme ich den selben Fehler bei:

Code: Alles auswählen

pVS->Release();
pPS->Release();
Ich habe keine Ahnung was Falsch ist, ich Hoffe ihr könnt mir Helfen. Vielen Dank schonmal für alle Antworten.
MfG Icon
gdsWizard
Establishment
Beiträge: 237
Registriert: 04.02.2005, 09:12
Benutzertext: www.gamedevstudio.com
Echter Name: Thomas Mittelsdorf
Wohnort: Meiningen
Kontaktdaten:

Re: DX11 Vertex und Pixel Shader

Beitrag von gdsWizard »

Hallo,


also bei mir hat es sofort geklappt. Sicher das du die "shaders" Datei in das richtige Verzeichnis kopiert hast ? Hast du auch auf das "s" am Ende bei der Vergabe des Namens "shaders.hlsl" geachtet ?

Wenn du ein Projekt bei VS2010 erstellst und das Projekt DX11 nennst, dann muß das shader file in DX11\\DX11.


mfg gdsWizard
Icon
Beiträge: 4
Registriert: 10.08.2011, 17:45

Re: DX11 Vertex und Pixel Shader

Beitrag von Icon »

Nein die Shader-Datei liegt im richtigen Order, direkt neben der "main.cpp". Wenn ich im Debugger schaue, dann haben pVS und pPS in der Release-Funktion beide die Adresse 0x000000, ich weiß aber nicht wieso. Hier meine Fehlersuche:

Code: Alles auswählen

HRESULT res;
ID3D10Blob *VS, *PS;
res = D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, 0, 0); // res = S_OK
res = D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PShader", "ps_5_0", 0, 0, 0, &PS, 0, 0); // res = S_OK

res = dev->CreateVertexShader(VS->GetBufferPointer(), VS->GetBufferSize(), NULL, &pVS); // res = E_INVALIDARG
res = dev->CreatePixelShader(PS->GetBufferPointer(), PS->GetBufferSize(), NULL, &pPS); // res = E_INVALIDARG


Woran kann das Liegen, dass CompileFromFile die Shader richtig lädt, DX die Schaderobjekte dann aber nicht erstellen kann?
Benutzeravatar
Krishty
Establishment
Beiträge: 8355
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: DX11 Vertex und Pixel Shader

Beitrag von Krishty »

Daran, dass deine GPU zu alt ist, um Shader Model 5 zu unterstützen?

Gruß, Ky
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Icon
Beiträge: 4
Registriert: 10.08.2011, 17:45

Re: DX11 Vertex und Pixel Shader

Beitrag von Icon »

Ahh verdammt .. Danke! Auf die Idee wäre ich nie gekommen .. Hab ne Geforce GTS 250 .. die Unterstützt nur bis Shader Model. 4.1. Ich kenn mich mit Shadern Null aus, wie groß sind die Unterschiede zwischen 4.0 und 5.0? Kann ich das Tutorial, dass durchgängig 5.0 benutzt einfach weitermachen ?
Benutzeravatar
Krishty
Establishment
Beiträge: 8355
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: DX11 Vertex und Pixel Shader

Beitrag von Krishty »

Die Unterschiede liegen fast ausschließlich in den Ressourcen; du kannst in 4.1 keine GPGPU-Ressourcen wie RWStructuredBuffer() benutzen. So lange das Tutorial aber keine superkomplizierten Sachen macht, sondern bloß Texturierung, Schattierung und gängige Spezialeffekte, müsstest du die Shader ohne Einschränkungen auf 4.1 übernehmen können.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Icon
Beiträge: 4
Registriert: 10.08.2011, 17:45

Re: DX11 Vertex und Pixel Shader

Beitrag von Icon »

Wenn nicht meld ich mich hier wieder ^^ Danke
Antworten