Jump to content

  • Log In with Google      Sign In   
  • Create Account


DX11 - Cube Texture Creation


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
10 replies to this topic

#1 Migi0027   Crossbones+   -  Reputation: 1408

Like
0Likes
Like

Posted 29 August 2013 - 02:44 PM

Hi guys!

 

So recently I needed a cube map, and I've never actually used one, so, this is my first try. But something goes wrong, some invalid parameters were passed, this is how I create the cube map:

 

PS. The other functions are from the library devIL (http://openil.sourceforge.net/)

// Will be filled and returned
ID3D11ShaderResourceView* pSRV = NULL;

ilInit();
 
// Load image from DevIL
ILuint idImage;
ilGenImages( 1, &idImage );
ilBindImage( idImage );
ilLoadImage( filePath.c_str() );
_ASSERT ( IL_NO_ERROR == ilGetError() );
 
// Fetch dimensions of image
int width = ilGetInteger( IL_IMAGE_WIDTH );
int height = ilGetInteger( IL_IMAGE_HEIGHT );
 
// Load the data
ilConvertImage( IL_RGBA,IL_UNSIGNED_BYTE );
unsigned char * pData = ilGetData();
 
// Build the texture header descriptor
D3D11_TEXTURE2D_DESC descTex;
descTex.Width = width;
descTex.Height = height;
descTex.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
descTex.Usage = D3D11_USAGE_DEFAULT;
descTex.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_RENDER_TARGET;
descTex.CPUAccessFlags = 0;
descTex.MipLevels = 1;
descTex.ArraySize = 1;
descTex.SampleDesc.Count = 1;
descTex.SampleDesc.Quality = 0;
descTex.MiscFlags = D3D10_RESOURCE_MISC_GENERATE_MIPS;
 
// Resource data descriptor
D3D11_SUBRESOURCE_DATA data ;
memset( &data, 0, sizeof(D3D11_SUBRESOURCE_DATA));
data.pSysMem = pData;
data.SysMemPitch = 4 * width;
 
// Create the 2d texture from data
ID3D11Texture2D * pTexture = NULL;
HV( pDevice->CreateTexture2D( &descTex, &data, &pTexture ));
 
// Create resource view descriptor
D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc;
srvDesc.Format = descTex.Format;
srvDesc.ViewDimension = dimension;

srvDesc.TextureCube.MostDetailedMip = 0;
srvDesc.TextureCube.MipLevels = D3D11_RESOURCE_MISC_GENERATE_MIPS;

srvDesc.Texture2D.MostDetailedMip = 0;
srvDesc.Texture2D.MipLevels = D3D11_RESOURCE_MISC_GENERATE_MIPS ;
 
// Create the shader resource view
HV( pDevice->CreateShaderResourceView( pTexture, &srvDesc, &pSRV ));
 
// Delete from IL buffer after image loaded correctly
ilDeleteImages( 1, &idImage );
idImage = 0;
 
return pSRV;

Where dimension is D3D11_SRV_DIMENSION_TEXTURECUBE, now what could I be doing wrong? (...Everything)

 

PS. I won't respond in the next 12-24 hours.

 

Thank You smile.png

-MIGI0027



Sponsor:

#2 Juliean   GDNet+   -  Reputation: 2205

Like
0Likes
Like

Posted 29 August 2013 - 02:55 PM

 

ArraySize

Type: UINT

Number of textures in the texture array. The range is from 1 to D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION (2048). For a texture cube-map, this value is a multiple of 6 (that is, 6 times the value in the NumCubes member of D3D11_TEXCUBE_ARRAY_SRV), and the range is from 6 to 2046. The range is actually constrained by the feature level at which you create the rendering device. For more information about restrictions, see Remarks.

 

I suppose this ought to be the issue, at least part of it. If you read what comes before the invalid_arguments line, it should tell you exactly whats wrong, if you enabled the debug device...


Edited by Juliean, 29 August 2013 - 02:55 PM.


#3 Migi0027   Crossbones+   -  Reputation: 1408

Like
0Likes
Like

Posted 29 August 2013 - 11:05 PM

Hmm:

 

 

D3D11: ERROR: ID3D11Device::CreateShaderResourceView: Resources created without D3D11_RESOURCE_MISC_TEXTURECUBE may not be treated as cubemap ShaderResourceViews. [ STATE_CREATION ERROR #126: CREATESHADERRESOURCEVIEW_INVALIDDESC ]



#4 Juliean   GDNet+   -  Reputation: 2205

Like
0Likes
Like

Posted 30 August 2013 - 07:08 AM

Why, as it says:

descTex.MiscFlags = D3D10_RESOURCE_MISC_GENERATE_MIPS | D3D11_RESOURCE_MISC_TEXTURECUBE;

Any other error?



#5 Migi0027   Crossbones+   -  Reputation: 1408

Like
0Likes
Like

Posted 30 August 2013 - 11:17 AM

It's almost perfect now, thanks for the help Juliean, the final code was nothing near the initial.

 

One final question:

 

Imagine I have these .bmp files:

  • back
  • down
  • front
  • left
  • right
  • up

If I had to combine these into an array (Cubemap) (Which I'm doing), what would be the correct order? (My order is wrong)



#6 Juliean   GDNet+   -  Reputation: 2205

Like
1Likes
Like

Posted 30 August 2013 - 11:34 AM


If I had to combine these into an array (Cubemap) (Which I'm doing), what would be the correct order? (My order is wrong)

 

Sorry, I haven't worked that much with cube textures myself, so I'll have to pass. Glad to see it now works though, maybe someone else can answer that question for you.



#7 MJP   Moderators   -  Reputation: 10033

Like
0Likes
Like

Posted 30 August 2013 - 12:04 PM

The order is in the docs. Go to the D3D10 overview, go to resources, and open the page for resource types. Scroll down to the section on cubemaps. I'm pretty sure the order is +x, -x, +y, -y, +z, -z.

I'd check myself and provide a link, but I'm on my phone at the moment.

#8 MJP   Moderators   -  Reputation: 10033

Like
0Likes
Like

Posted 30 August 2013 - 12:07 PM

Also I'm pretty sure that the Texassemble utility from DirectXTK can create a cubemap DDS from 6 separate images.

#9 Migi0027   Crossbones+   -  Reputation: 1408

Like
0Likes
Like

Posted 30 August 2013 - 04:19 PM

Almost perfect, if someone could guide me on this:

 

PS. The shadows are from another mesh inside the sphere, which casts shadows, but the sphere doesn't.

 

2j3gvma.png

 

As you can see It's like the cube map is upside down...



#10 Juliean   GDNet+   -  Reputation: 2205

Like
0Likes
Like

Posted 30 August 2013 - 06:59 PM


As you can see It's like the cube map is upside down...

 

How about flipping them around? +x gets -x, and vice versa? I mean, even brute force there is only 64 possible combinations, I quess that would be faster solved that way before someone could answer you here ;)



#11 Migi0027   Crossbones+   -  Reputation: 1408

Like
0Likes
Like

Posted 31 August 2013 - 01:35 AM

Somehow the order didn't matter in the up side down issue, but thanks!

 

I fixed it by reversing the .y component in the texture coordinates used to sample the map.

 

-MIGI0027






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS