コード例 #1
0
/*
	Name		SimplexNoise::createRandomTexture
	Syntax		SimplexNoise::createRandomTexture(ID3D10ShaderResourceView* _texRV)
	Param		ID3D10ShaderResourceView* _texRV - The texture resource view
	Brief		Builds a random 1D texture used for generating
				random values in effect files
*/
ID3D10ShaderResourceView* SimplexNoise::createRandomTexture()
{
	// Create random data
	D3DXVECTOR4 randomValues[1024];

	for (int i = 0; i < 1024; ++i)
	{
		randomValues[i].x = randFloat(-1.0f, 1.0f);
		randomValues[i].y = randFloat(-1.0f, 1.0f);
		randomValues[i].z = randFloat(-1.0f, 1.0f);
		randomValues[i].w = randFloat(-1.0f, 1.0f);
	}

	D3D10_SUBRESOURCE_DATA initData;
	initData.pSysMem = randomValues;
	initData.SysMemPitch = 1024 * sizeof(D3DXVECTOR4);
	initData.SysMemSlicePitch = 1024 * sizeof(D3DXVECTOR4);

	// Create the texture
	D3D10_TEXTURE1D_DESC texDesc;
	texDesc.Width = 1024;
	texDesc.MipLevels = 1;
	texDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
	texDesc.Usage = D3D10_USAGE_IMMUTABLE;
	texDesc.BindFlags = D3D10_BIND_SHADER_RESOURCE;
	texDesc.CPUAccessFlags = 0;
	texDesc.MiscFlags = 0;
	texDesc.ArraySize = 1;

	ID3D10Texture1D* randomTex = 0;
	ID3D10Device* d3dDevice = Scene::instance()->getDevice();
	HRESULT hr = d3dDevice->CreateTexture1D(&texDesc, &initData, &randomTex);
	if (FAILED(hr))
	{
		MessageBox(0, "Create random texture - Failed", "Error", MB_OK);
		return 0;
	}

	// Create the resource view
	D3D10_SHADER_RESOURCE_VIEW_DESC viewDesc;
	viewDesc.Format = texDesc.Format;
	viewDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE1D;
	viewDesc.Texture1D.MipLevels = texDesc.MipLevels;
	viewDesc.Texture1D.MostDetailedMip = 0;

	ID3D10ShaderResourceView* texRV;
	hr = d3dDevice->CreateShaderResourceView(randomTex, &viewDesc, &texRV);

	if (FAILED(hr))
	{
		MessageBox(0, "Create random tex RV - Failed", "Error", MB_OK);
		return 0;
	}

	randomTex->Release();
	randomTex = 0;

	return texRV;
}
コード例 #2
0
void ParticleEngine::CreateRandomTex()
{
	HRESULT hr;

	D3DXVECTOR4 randomValues[1024];

	for(int i = 0; i < 1024; i++)
	{
		randomValues[i].x = RandF(-1.0f, 1.f);
		randomValues[i].y = RandF(-1.0f, 1.f);
		randomValues[i].z = RandF(-1.0f, 1.f);
		randomValues[i].w = RandF(-1.0f, 1.f);
	}

	D3D10_SUBRESOURCE_DATA initData;
	initData.pSysMem			= randomValues;
	initData.SysMemPitch		= sizeof(D3DXVECTOR4)*1024;
	initData.SysMemSlicePitch	= sizeof(D3DXVECTOR4)*1024;

	D3D10_TEXTURE1D_DESC texDesc;
	texDesc.Width			= 1024;
	texDesc.MipLevels		= 1;
	texDesc.Format			= DXGI_FORMAT_R32G32B32A32_FLOAT;
	texDesc.Usage			= D3D10_USAGE_IMMUTABLE;
	texDesc.BindFlags		= D3D10_BIND_SHADER_RESOURCE;
	texDesc.CPUAccessFlags	= 0;
	texDesc.MiscFlags		= 0;
	texDesc.ArraySize		= 1;

	ID3D10Texture1D* randTex = 0;
	hr = device->CreateTexture1D(&texDesc, &initData, &randTex);
	if(FAILED(hr))
		MessageBox(NULL, "( ParticleEngine ) Failed to create Random Texture", NULL, NULL);

	D3D10_SHADER_RESOURCE_VIEW_DESC rViewDesc;
	rViewDesc.Format					= texDesc.Format;
	rViewDesc.ViewDimension				= D3D10_SRV_DIMENSION_TEXTURE1D;
	rViewDesc.Texture1D.MipLevels		= texDesc.MipLevels;
	rViewDesc.Texture1D.MostDetailedMip = 0;

	hr = device->CreateShaderResourceView(randTex, &rViewDesc, &randomTex);
	if(FAILED(hr))
		MessageBox(NULL, "( ParticleEngine ) Failed to create Random Texture ResourceView", NULL, NULL);

	randTex->Release();
}
コード例 #3
0
/*
	Name		SimplexNoise::createSimplexTexture
	Syntax		SimplexNoise::createSimplexTexture()
	Return		ID3D10ShaderResourceView* - A pointer to a simplex lookup resource
	Brief		Creates a 1D texture simplex lookup  resource used for finding the 
				current simplex
*/
ID3D10ShaderResourceView* SimplexNoise::createSimplexTexture()
{
	// Simplex look up table for determining which simplex a point is in
	unsigned char simplex4[][4] = {{0,64,128,192},{0,64,192,128},{0,0,0,0},{0,128,192,64},
								  {0,0,0,0},{0,0,0,0},{0,0,0,0},{64,128,192,0},
								  {0,128,64,192},{0,0,0,0},{0,192,64,128},{0,192,128,64},
								  {0,0,0,0},{0,0,0,0},{0,0,0,0},{64,192,128,0},
								  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},
								  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},
								  {64,128,0,192},{0,0,0,0},{64,192,0,128},{0,0,0,0},
								  {0,0,0,0},{0,0,0,0},{128,192,0,64},{128,192,64,0},
								  {64,0,128,192},{64,0,192,128},{0,0,0,0},{0,0,0,0},
								  {0,0,0,0},{128,0,192,64},{0,0,0,0},{128,64,192,0},
								  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},
								  {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0},
								  {128,0,64,192},{0,0,0,0},{0,0,0,0},{0,0,0,0},
								  {192,0,64,128},{192,0,128,64},{0,0,0,0},{192,64,128,0},
								  {128,64,0,192},{0,0,0,0},{0,0,0,0},{0,0,0,0},
								  {192,64,0,128},{0,0,0,0},{192,128,0,64},{192,128,64,0}};

	D3D10_SUBRESOURCE_DATA initData;
	initData.pSysMem = simplex4;
	initData.SysMemPitch = 64 * 4 * sizeof(char);
	initData.SysMemSlicePitch = 64 * 4 * sizeof(char);

	// Create the texture
	D3D10_TEXTURE1D_DESC texDesc;
	texDesc.Width = 64;
	texDesc.MipLevels = 1;
	texDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
	texDesc.Usage = D3D10_USAGE_IMMUTABLE;
	texDesc.BindFlags = D3D10_BIND_SHADER_RESOURCE;
	texDesc.CPUAccessFlags = 0;
	texDesc.MiscFlags = 0;
	texDesc.ArraySize = 1;

	ID3D10Texture1D* simplexTex = 0;
	ID3D10Device* d3dDevice = Scene::instance()->getDevice();
	HRESULT hr = d3dDevice->CreateTexture1D(&texDesc, &initData, &simplexTex);
	if (FAILED(hr))
	{
		MessageBox(0, "Create simplex texture - Failed", "Error", MB_OK);
		return 0;
	}

	// Create the resource view
	D3D10_SHADER_RESOURCE_VIEW_DESC viewDesc;
	viewDesc.Format = texDesc.Format;
	viewDesc.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE1D;
	viewDesc.Texture1D.MipLevels = texDesc.MipLevels;
	viewDesc.Texture1D.MostDetailedMip = 0;

	ID3D10ShaderResourceView* texRV;
	hr = d3dDevice->CreateShaderResourceView(simplexTex, &viewDesc, &texRV);

	if (FAILED(hr))
	{
		MessageBox(0, "Create random tex RV - Failed", "Error", MB_OK);
		return 0;
	}

	simplexTex->Release();
	simplexTex = 0;

	return texRV;
}