Seite 1 von 1

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

Verfasst: 16.01.2015, 22:36
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.

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 17.01.2015, 01:40
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.

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 17.01.2015, 12:35
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.

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 17.01.2015, 17:26
von Schrompf
Das sieht durchaus vernünftig aus. Und die Input Declaration? Passt die bytegenau auf Deine struct SMeshTexture?

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 17.01.2015, 17:48
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();
	}
};

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 17.01.2015, 17:54
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.

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 17.01.2015, 19:01
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

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 21.01.2015, 14:48
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:

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 21.01.2015, 15:01
von Schrompf
Wenn das Ergebnis im Release anders ist als im Debug, hast Du uninitialisierte Variablen oder nicht beschriebenen Speicher.

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 22.01.2015, 15:42
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.

Re: Probleme nach Umstieg von Windows SDK 7 auf 8.1

Verfasst: 24.01.2015, 18:56
von BlackArma
Gelöst!

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