/* 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; }
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(); }
/* 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; }