Texturen funktionieren nicht [DirectX, Visual Studio, C++]



  • Das habe ich über die effect library geregelt: (in der vorletzten Zeile hole mir den textureBuffer)

    //---- Create Shader ----//
    	ID3D10Blob* errorMessage;
    	ID3D10Blob* shaderBuffer;
    
    	errorMessage = 0;
    	shaderBuffer = 0;
    	effect = 0;
    
    	WCHAR* fxFilename = L"Shader/default.fx";
    
    	result = D3DX11CompileFromFile(fxFilename, NULL, NULL, 0, "fx_5_0", NULL, NULL, NULL, &shaderBuffer, &errorMessage, NULL);
    	if (FAILED(result))
    	{
    		ShowCursor(TRUE);
    		MessageBox(NULL, buf, L"Error!", MB_ICONEXCLAMATION | MB_OK);
    		return false;
    	}
    
    	//---- Create effect ----//
    	result = D3DX11CreateEffectFromMemory(shaderBuffer->GetBufferPointer(), shaderBuffer->GetBufferSize(), 0, m_device, &effect);
    	if (FAILED(result))
    	{
    		ShowCursor(TRUE);
    		MessageBox(NULL, L"Failed to create shader!", L"Error!", MB_ICONEXCLAMATION | MB_OK);
    		return false;
    	}
    
    	textureBuffer = 0;
    
    	//---- Create techniques ----//
    	basicTechnique = effect->GetTechniqueByName("ColorTech");
    
    	//---- Create effect buffers ----//
    	matrixBuffer = effect->GetVariableByName("wvpMatrix")->AsMatrix();
    	lightBuffer = effect->GetVariableByName("pointLight");
    	eyePosBuffer = effect->GetVariableByName("eyePos");
    	textureBuffer = effect->GetVariableByName("textureBuffer")->AsShaderResource();
    	materialBuffer = effect->GetVariableByName("mat");
    

    Und mit:

    textureBuffer->SetResource(conductor->textureBuffer);
    

    weise ich dem Shader dann die Resource , also die Textur zu.



  • OK. Dann würd ich mal anfangen den Fehler etwas einzugrenzen.

    Also z.B. erstmal ne fixe Farbe nach "output" rausschreiben.
    Wenn das geht kannst du den Teil schonmal ausschliessen.

    Dann gucken ob die Texturkoordinaten stimmen, z.B. indem du die Texturkoordinaten einfach mal als Farbe interpretierst.
    Wenn das geht kannst du die Texturkoordinaten ausschliessen.



  • Das funktioniert. Hier die Texturkoordinaten farblich auf die Polygone projeziert:
    http://imgur.com/cZg9YF9



  • Returnwert von D3DX11CreateShaderResourceViewFromFile prüfen?
    Bzw. biste schonmal durchgesteppt und hast geguckt ob auch wirklich alles gut aussieht, z.B. ob conductor->textureBuffer auch wirklich != null ist?



  • Nein, hab ich auch schon ausprobiert.
    Vielen Dank übrigens für deine Hilfe.



  • Gerne, wobei ... Hilfe war's ja nicht, bisher bloss der Versuch 🙂

    Und ich bin dann auch bald mit meinem Latein am Ende - wie gesagt, mit D3D11 hab' ich noch nix gemacht.

    Ich würde vermutlich als nächstes mal gucken ob die Textur richtig geladen werden konnte. Also ob der Grund nicht vielleicht einfach ist dass D3DX11CreateShaderResourceViewFromFile aus irgend einem Grund einen vollständig weissen Texture-Buffer zurückgibt.

    Bzw. mal probieren ob es nen Unterschied macht wenn du die Textur mittels ": register t0" fix an ein Register bindest und dann ggf. noch die Textur für das Register setzt statt über die GetVariableByName("textureBuffer")->AsShaderResource() Sache.



  • Schon die Rückgabewerte geprüft, z.B. von "textureBuffer->SetResource" ?

    Kenne mich mit DirectX nicht so aus, aber kann es sein dass du "PSSetShaderResources" nutzen musst um Resourcen zu setzen ?

    Und wo setzt du die eigentliche Textur, also "textureMap" ?



  • @hustbaer:
    Das mit den Registern würde das Problem dennoch nicht lösen, da ich gerne mit der effect library arbeiten würde.

    @DarkShadow44:
    Genial!

    Mit diesem Code:

    HRESULT result = d3d->textureBuffer->SetResource(conductor->textureBuffer);
    if (FAILED(result))
    {
    	ShowCursor(TRUE);
    	MessageBox(NULL, L"failed to set resource", L"Error!", MB_ICONEXCLAMATION | MB_OK);
    	return false;
    }
    

    wird dann die Fehlermeldung ausgegeben. Jetzt können wir das ganze immerhin schon eingrenzen.

    Edit: Jedoch sind "conductor->textureBuffer" und "d3d->textureBuffer" nicht null

    Edit#2: Genauer gesagt gibt SetResource E_FAIL zurück. Im doc steht dazu folgendes: "Attempted to create a device with the debug layer enabled and the layer is not installed."



  • (schon seite einer Stunde unfassbar den Kopf schüttelnd):

    Im Shader habe ich die Textur "textureMap" genannt und wo ich den Buffer kreiere "textureBuffer".
    Es sind oft die einfachsten Dinge 😃 😃 😃

    Vielen Dank nochmal für eure Hilfe. 🙂

    LG lonol15



  • lonol15 schrieb:

    Im Shader habe ich die Textur "textureMap" genannt und wo ich den Buffer kreiere "textureBuffer".

    DarkShadow44 schrieb:

    Und wo setzt du die eigentliche Textur, also "textureMap" ?

    Genau das hatte ich auch vermutet, aber gut dass es jetzt klappt. 🙂



  • Ich finde es irgendwie komisch dass bei GetVariableByName in so einem Fall überhaupt was zurückkommt.


Anmelden zum Antworten