[Gelöst] Probleme nach Umstieg von Windows SDK 7 auf 8.1

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

[Gelöst] Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Gute Abend zusammen,

nachdem ich von Window 7 auf 8.1 gewechselt habe dachte ich mir ich wechsel gleich mal das Windows SDK mit, von 7 auf 8.1.
Dabei ist es mir nicht entgangen das Microsoft das DirectX SDK in das Windows SDK integriert hat und zugleich ein paar Teile davon entfernt hat wie Effects11, D3DX11 und mehr.
Nachdem ich mein Framework abgeändert hatte und Effects11 sowie D3DX11 wieder eingebunden habe verhaut es mir, selbst beim rendern eines Würfels, alles und ich kann mir nicht erklären woher das kommt.

Hier mal zwei Screenshots in SOLID und WIREFRAME:
Bild

Bild
Ich würde gerne etwas Code posten wenn ich ungefähr wüsste woher das kommt.
Zuletzt geändert von BlackArma am 24.01.2015, 18:56, insgesamt 1-mal geändert.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von Schrompf »

Das riecht nach der Vertex Declaration. Poste mal, wie Du Deinen Vertexbuffer zusammenbaust und wie Du ihn anbindest - also auch Eingaberegister des VertexShaders.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Gerne!

Hier baue ich meine Buffer:

Code: Alles auswählen

void Object::BuildBuffers()
{
	RELEASE_COM( m_vertexBuffer );
	RELEASE_COM( m_indexBuffer );
	
	D3D11_BUFFER_DESC vertexBufferDesc = {};
	vertexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE;
	vertexBufferDesc.ByteWidth = sizeof(SMeshTexture)* m_meshData.vertices.size( );
	vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
	D3D11_SUBRESOURCE_DATA vertexInitData = {};
	vertexInitData.pSysMem = &m_meshData.vertices[0];
	HR( m_deviceRef->CreateBuffer( &vertexBufferDesc, &vertexInitData, &m_vertexBuffer ) );

	D3D11_BUFFER_DESC indexBufferDesc = {};
	indexBufferDesc.Usage = D3D11_USAGE_IMMUTABLE;
	indexBufferDesc.ByteWidth = sizeof(unsigned int)* m_meshData.indices.size( );
	indexBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
	D3D11_SUBRESOURCE_DATA indexInitData = {};
	indexInitData.pSysMem = &m_meshData.indices[0];
	HR( m_deviceRef->CreateBuffer( &indexBufferDesc, &indexInitData, &m_indexBuffer ) );
}
Hier binde ich sie an (ich denke mal dass du das hier meinst):

Code: Alles auswählen

void Object::Render()
{
	UINT stride = sizeof( m_meshData );
	UINT offset = 0;

	m_deviceContextRef->IASetInputLayout( m_inputLayout );
	m_deviceContextRef->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST );
	m_deviceContextRef->IASetVertexBuffers( 0, 1, &m_vertexBuffer, &stride, &offset );
	m_deviceContextRef->IASetIndexBuffer( m_indexBuffer, DXGI_FORMAT_R32_UINT, 0 );

	XMMATRIX world = GetWorldMatrix( );
	m_pFXWorld->SetMatrix( reinterpret_cast<float*>( &world ) );
	m_pFXTexture->SetResource( m_texture );
	m_pFXTextureSampler->SetSampler( 0, m_pTextureSampler );

	D3DX11_TECHNIQUE_DESC techDesc = {};
	m_effectTech->GetDesc( &techDesc );

	for(UINT p = 0; p < techDesc.Passes; ++p)
	{
		m_effectTech->GetPassByIndex( p )->Apply( 0, m_deviceContextRef );

		m_deviceContextRef->DrawIndexed( m_meshData.indices.size( ), 0, 0 );
	}
}
Was ich halt irgendwie total seltsam finde ist dass der Code schon mal funktioniert hat und ich eigentlich nichts großartig geändert habe.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von Schrompf »

Das sieht durchaus vernünftig aus. Und die Input Declaration? Passt die bytegenau auf Deine struct SMeshTexture?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Jap, die sollte passen.

Momentan übergebe ich lediglich die Vertex Position was natürlich ein XMFLOAT3 ist und die UV Koordinaten was ein XMFLOAT2 ist.

Hier die Input Description:

Code: Alles auswählen

const D3D11_INPUT_ELEMENT_DESC CInputDesc::texture[2] =
{
	{ "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
	{ "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
};
EDIT:

Oh, stimmt, die Struktur:

Code: Alles auswählen

struct SMeshTexture
{
	SMeshTexture( )
	{
	};
	SMeshTexture( const DirectX::XMFLOAT3& _v, const DirectX::XMFLOAT2& _c )
		: pos( _v ), texCoord( _c )
	{
	}
	SMeshTexture( float _vx, float _vy, float _vz, float _ux, float _uy )
		: pos( _vx, _vy, _vz ), texCoord( _ux, _uy )
	{
	}

	DirectX::XMFLOAT3 pos;
	DirectX::XMFLOAT2 texCoord;
};


struct SMeshData
{
	std::vector<SMeshTexture> vertices;
	std::vector<unsigned int> indices;

	void clear()
	{
		vertices.clear();
		indices.clear();
	}
};
Zuletzt geändert von BlackArma am 17.01.2015, 17:57, insgesamt 2-mal geändert.
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von Schrompf »

Da Du die Struktur nicht gepostet hast, muss ich Dir das glauben. Der Rest sieht soweit erstmal korrekt aus. Probiere mal aus, ob Du mit PIX was rausfindet. Oder alternativ NVidia NSight, falls Du eine NVidia-Karte hast, oder das entsprechende ATI-Äquivalent.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Ich habe eine nVidia Karte und ich habe mal mit NSight auch etwas herum probiert aber ich wüsste jetzt nicht worauf ich da achten soll.
Was ist außerdem PIX? Habe zwar gegoogelt aber irgendwie nichts gefunden.

Btw. ich habe mal von Debug auf Release gestellt und seltsamerweise kommt ein komplett anderes Ergebnis dabei raus :shock:
Bild

Bild
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Inzwischen konnte ich mit RenderDoc feststellen dass anscheinend die Vertex und Index Buffer total verschoben bis uninitialisiert am Shader ankommen.
Ich habe keinen Plan warum :cry:
Benutzeravatar
Schrompf
Moderator
Beiträge: 4884
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von Schrompf »

Wenn das Ergebnis im Release anders ist als im Debug, hast Du uninitialisierte Variablen oder nicht beschriebenen Speicher.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Wurde mir auch schon gesagt dass ich mir mal sämtliche Variablen und Pointer anschauen soll, habe beim besten Willen nichts gefunden.
Ich habe auch schon überall wo es interessant ist Breakpoints gesetzt und mir den Inhalt angeschaut aber ich werde irgendwie nicht fündig.
BlackArma
Beiträge: 12
Registriert: 06.02.2014, 15:10

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Beitrag von BlackArma »

Gelöst!

Beim berechnen vom "stride" habe ich die falshe Struktur verwendete -.-
Anstatt "SMeshData" hätte ich "SMeshTexture" nehmen müssen.
Antworten