Sign in to follow this  

Shader Error

This topic is 3624 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hello, Im trying to render a skybox with 8 vertices and a Texture2D which contains six Textures (dstex.ArraySize = 6;) - dont know if this is called a Texture2DArray. I try to render the first face of the cube with this code:
skyBoxFaceTextureSC->SetResource(envMapShaderView);
for(int i=0; i < 1; i++) {		
   skyBoxFaceIndexSC->SetFloat( (float)i);
   d3d10device->Draw(4, 4*i);
}

envMapShaderView is a view onto the Texture2D(Array) and skyBoxFaceIndex is the index of the face, that should be chosen from the array (0=front, 1=back etc.) But if I run this code I get this error all the time the app is running:
Quote:
D3D10: ERROR: ID3D10Device::Draw: The view dimension declared in the shader code does not match the view type bound to slot 0 of the Pixel Shader unit. [ EXECUTION ERROR #354: DEVICE_DRAW_VIEW_DIMENSION_MISMATCH ]
My Pixelshader looks like this:
Texture2DArray skyBoxTextures;
SamplerState samSkyBoxTexture {
    Filter = MIN_MAG_MIP_LINEAR;
    AddressU = Clamp;
    AddressV = Clamp; 
};
float skyBoxFaceIndex;

float4 SkyBox_Render_PS(SKYBOX_VS_OUTPUT input) : SV_Target {
//return starTexture.Sample( samLinear, input.starTexCoord );
return skyBoxTextures.Sample(samSkyBoxTexture, float3(input.starTexCoord, skyBoxFaceIndex));
}
All I do is using the float2 texture coordinates input.starTexCoord and skyBoxFaceIndex as the index into the Texture2DArray to sample my Texture2DArray. If I comment the line out and use the line above with the sampling of a simple Texture (starTexture.Sample(...) then I DONT get the error. Anyone has an idea what this error means and how to fix it? Thanks!

Share this post


Link to post
Share on other sites
How are you creating your shader resource view? It should be something like this:

D3D10_TEXTURE2D_DESC desc;
pSkyboxTexture->GetDesc(&desc);

D3D10_SHADER_RESOURCE_VIEW_DESC viewDesc;
viewDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
viewDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2DARRAY;
viewDesc.Texture2DArray.MostDetailedMip = 0;
viewDesc.Texture2DArray.MipLevels = desc.MipLevels;
viewDesc.Texture2DArray.FirstArraySlice = 0
viewDesc.Texture2DArray.ArraySize = desc.ArraySize;
pDevice->CreateShaderResourceView(pSkyboxTexture, &viewDesc, &envMapShaderView);

Another way to do it would be to load the texture and create the shader resource view for it in one call, using D3DX10CreateShaderResourceViewFromFile. Make sure to fill in the D3DX10_IMAGE_INFO parameter of the D3DX10_IMAGE_LOAD_INFO structure.

neneboricua

Share this post


Link to post
Share on other sites

This topic is 3624 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this