/* Apply smaplerstate setting */ void nlUpdateSamplerState(nlEngineContext&cxt) { ID3D11SamplerState* samplerState; cxt.d3dDevice->CreateSamplerState(&cxt.samplerDesc, &samplerState); cxt.d3dContext->PSSetSamplers(0, 1, &samplerState); samplerState->Release(); }
//------------------------------------------------------------------------------- // @ IvTextureD3D11::MakeActive() //------------------------------------------------------------------------------- // Binds the texture to the desired unit //------------------------------------------------------------------------------- void IvTextureD3D11::MakeActive(unsigned int textureUnit, unsigned int samplerUnit, ID3D11Device* device) { // For now, just create sampler state every time // D3D11 should check for duplicates and return matching handle D3D11_SAMPLER_DESC samplerDesc; memset(&samplerDesc, 0, sizeof(D3D11_SAMPLER_DESC)); samplerDesc.Filter = mFilter; samplerDesc.AddressU = mUAddrMode; samplerDesc.AddressV = mVAddrMode; samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.MipLODBias = 0; samplerDesc.MaxAnisotropy = 1; samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; samplerDesc.MinLOD = 0; samplerDesc.MaxLOD = mEnableMip ? (FLOAT)mLevelCount : 0; ID3D11SamplerState* samplerState; if (S_OK != device->CreateSamplerState(&samplerDesc, &samplerState)) { //*** some error state here? return; } ID3D11DeviceContext* d3dContext = ((IvRendererD3D11*)IvRenderer::mRenderer)->GetContext(); d3dContext->PSSetSamplers(samplerUnit, 1, &samplerState); samplerState->Release(); d3dContext->PSSetShaderResources(textureUnit, 1, &mShaderResourceView); }
void Graphics::setTextureAddressing(TextureUnit unit, TexDir dir, TextureAddressing addressing) { D3D11_SAMPLER_DESC samplerDesc; ZeroMemory(&samplerDesc, sizeof(samplerDesc)); samplerDesc.AddressU = convertAddressing(addressing); samplerDesc.AddressV = convertAddressing(addressing); samplerDesc.AddressW = convertAddressing(addressing); samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; ID3D11SamplerState* sampler; affirm(device->CreateSamplerState(&samplerDesc, &sampler)); context->PSSetSamplers(unit.unit, 1, &sampler); sampler->Release(); }
void TgcDX11Effect::dispose() { //Constant buffers for (unordered_map<string, ID3D11Buffer*>::iterator it = this->dxConstantBuffers.begin(); it != this->dxConstantBuffers.end(); ++it) { ID3D11Buffer* cBuffer = it->second; if(cBuffer) { cBuffer->Release(); cBuffer = 0; } } //Sampler states for (unordered_map<string, ID3D11SamplerState*>::iterator it = this->dxSampleStates.begin(); it != this->dxSampleStates.end(); ++it) { ID3D11SamplerState* sampler = it->second; if(sampler) { sampler->Release(); sampler = 0; } } //vertexShaderBuffer if(this->vertexShaderBuffer) { this->vertexShaderBuffer->Release(); this->vertexShaderBuffer = 0; } //vertexShader if(this->vertexShader) { this->vertexShader->Release(); this->vertexShader = 0; } //pixelShader if(this->pixelShader) { this->pixelShader->Release(); this->pixelShader = 0; } }
// Create render states HRESULT CFW1GlyphRenderStates::createRenderStates(bool anisotropicFiltering) { // Create blend-state D3D11_BLEND_DESC blendDesc; ID3D11BlendState *pBlendState; ZeroMemory(&blendDesc, sizeof(blendDesc)); for(int i=0; i < 4; ++i) { blendDesc.RenderTarget[i].BlendEnable = TRUE; blendDesc.RenderTarget[i].SrcBlend = D3D11_BLEND_ONE; blendDesc.RenderTarget[i].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; blendDesc.RenderTarget[i].BlendOp = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[i].SrcBlendAlpha = D3D11_BLEND_ONE; blendDesc.RenderTarget[i].DestBlendAlpha = D3D11_BLEND_ZERO; blendDesc.RenderTarget[i].BlendOpAlpha = D3D11_BLEND_OP_ADD; blendDesc.RenderTarget[i].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; } HRESULT hResult = m_pDevice->CreateBlendState(&blendDesc, &pBlendState); if(FAILED(hResult)) { m_lastError = L"Failed to create blend state"; } else { // Create sampler state D3D11_SAMPLER_DESC samplerDesc; ID3D11SamplerState *pSamplerState; ZeroMemory(&samplerDesc, sizeof(samplerDesc)); if(anisotropicFiltering) { samplerDesc.Filter = D3D11_FILTER_ANISOTROPIC; samplerDesc.MaxAnisotropy = 2; if(m_featureLevel >= D3D_FEATURE_LEVEL_9_2) samplerDesc.MaxAnisotropy = 5; } else samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; hResult = m_pDevice->CreateSamplerState(&samplerDesc, &pSamplerState); if(FAILED(hResult)) { m_lastError = L"Failed to create sampler state"; } else { // Create rasterizer state D3D11_RASTERIZER_DESC rasterizerDesc; ID3D11RasterizerState *pRasterizerState; ZeroMemory(&rasterizerDesc, sizeof(rasterizerDesc)); rasterizerDesc.FillMode = D3D11_FILL_SOLID; rasterizerDesc.CullMode = D3D11_CULL_NONE; rasterizerDesc.FrontCounterClockwise = FALSE; rasterizerDesc.DepthClipEnable = TRUE; hResult = m_pDevice->CreateRasterizerState(&rasterizerDesc, &pRasterizerState); if(FAILED(hResult)) { m_lastError = L"Failed to create rasterizer state"; } else { // Create depth-stencil state D3D11_DEPTH_STENCIL_DESC depthStencilDesc; ID3D11DepthStencilState *pDepthStencilState; ZeroMemory(&depthStencilDesc, sizeof(depthStencilDesc)); depthStencilDesc.DepthEnable = FALSE; hResult = m_pDevice->CreateDepthStencilState(&depthStencilDesc, &pDepthStencilState); if(FAILED(hResult)) { m_lastError = L"Failed to create depth stencil state"; } else { // Success m_pBlendState = pBlendState; m_pSamplerState = pSamplerState; m_pRasterizerState = pRasterizerState; m_pDepthStencilState = pDepthStencilState; hResult = S_OK; } if(FAILED(hResult)) pRasterizerState->Release(); } if(FAILED(hResult)) pSamplerState->Release(); } if(FAILED(hResult)) pBlendState->Release(); } return hResult; }
bool DeviceDirect3D::create() { HMODULE libD3D11 = LoadLibrary("d3d11.dll"); if(!libD3D11) { Logger() << "Could not load d3d11.dll, you probably do not have DirectX 11 installed."; return false; } HMODULE libCompiler43 = LoadLibrary("d3dcompiler_43.dll"); if(!libCompiler43) { Logger() << "Could not load d3dcompiler_43.dll, try updating your DirectX"; return false; } //Release handles FreeLibrary(libD3D11); FreeLibrary(libCompiler43); std::vector<IDXGIAdapter1*> adapters; if(!getAdapterHandle(&adapters)) { return false; } UINT createDeviceFlags = 0; #if defined(_DEBUG) createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; #endif const D3D_FEATURE_LEVEL featureLevels[] = { D3D_FEATURE_LEVEL_11_0 /*, D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL_10_0*/ }; DXGI_SWAP_CHAIN_DESC sd; ZeroMemory(&sd,sizeof(sd)); const WindowSettings& ws = getWindow()->getWindowSettings(); sd.BufferCount = 1; sd.BufferDesc.Width = (UINT)ws.width; sd.BufferDesc.Height = (UINT)ws.height; sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; //_SRGB; sd.BufferDesc.RefreshRate.Numerator = 60; sd.BufferDesc.RefreshRate.Denominator = 1; sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT | DXGI_USAGE_UNORDERED_ACCESS; sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; sd.OutputWindow = static_cast<WindowWinAPI*>(getWindow())->getHandle(); sd.SampleDesc.Count = 1; sd.SampleDesc.Quality = 0; sd.Windowed = ws.fullscreen ? FALSE : TRUE; int selectedAdapterId = ws.gpu; IDXGIAdapter* selectedAdapter = nullptr; if(selectedAdapterId >= 0) { if(selectedAdapterId < (int)adapters.size()) { selectedAdapter = adapters[selectedAdapterId]; } else { LOGFUNCERROR("Selected graphics card " << selectedAdapterId << " does not exist"); } } HRESULT result = D3D11CreateDeviceAndSwapChain(selectedAdapter, selectedAdapter ? D3D_DRIVER_TYPE_UNKNOWN : D3D_DRIVER_TYPE_HARDWARE, 0, createDeviceFlags, featureLevels, _countof(featureLevels), D3D11_SDK_VERSION, &sd, &swapChain, &device, &featureLevel, &context); if(result != S_OK) { if(result == DXGI_ERROR_UNSUPPORTED) { LOGFUNCERROR("Your videocard does not appear to support DirectX 11"); } else { LOGERROR(result, "D3D11CreateDeviceAndSwapChain"); } return false; } //D3D11_SHADER_RESOURCE_VIEW_DESC srvDesc; /*result = device->CreateShaderResourceView(swapBackBuffer, 0, &swapBackBufferSRV); if(result != S_OK){ LOGERROR(result, "ID3D11Device::CreateShaderResourceView"); return false; }*/ D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS dxHwOpt; result = device->CheckFeatureSupport(D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS, &dxHwOpt, sizeof(dxHwOpt)); if(FAILED(result)) { LOGERROR(result, "CheckFeatureSupport"); return false; } if(!dxHwOpt.ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x) { Logger() << "ComputeShaders are not supported on this device"; return false; } //Get the buffer from the swapchain result = swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&swapBackBuffer); if(result != S_OK) { LOGERROR(result, "IDXGISwapChain::GetBuffer"); return false; } //Create trace result texture/RT swapStaging = static_cast<TextureDirect3D*>(createTexture()); swapStaging->create(TextureDimensions::Texture2D, TextureFormat::R8G8B8A8_UNORM, sd.BufferDesc.Width, sd.BufferDesc.Height, nullptr, TextureBinding::Staging, CPUAccess::Read); /*result = device->CreateRenderTargetView(traceResultTexture->getResource(), nullptr, &traceResultRT); if(FAILED(result)) { LOGERROR(result, "CreateRenderTargetView"); return false; }*/ //Create the UAV for the trace result D3D11_UNORDERED_ACCESS_VIEW_DESC uavDesc; ZeroMemory(&uavDesc, sizeof(uavDesc)); uavDesc.Format = sd.BufferDesc.Format; uavDesc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D; uavDesc.Buffer.FirstElement = 0; uavDesc.Buffer.NumElements = sd.BufferDesc.Width * sd.BufferDesc.Height; result = device->CreateUnorderedAccessView(swapBackBuffer, &uavDesc, &uavSwapBuffer); if(FAILED(result)) { LOGERROR(result, "CreateUnorderedAccessView"); return false; } //Setup sampler D3D11_SAMPLER_DESC samplerDesc; ZeroMemory(&samplerDesc, sizeof(samplerDesc)); samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; //D3D11_FILTER_ANISOTROPIC; samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_WRAP; samplerDesc.MinLOD = 0; samplerDesc.MaxLOD = D3D11_FLOAT32_MAX; samplerDesc.MipLODBias = 0.0f; samplerDesc.MaxAnisotropy = 0; samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER; ID3D11SamplerState* sampler; device->CreateSamplerState(&samplerDesc, &sampler); context->CSSetSamplers(0, 1, &sampler); sampler->Release(); return true; }
/////////////////////////////////////////////////////////////////////////////////////////////////// /// CelShadeApp::CelShadeD3D /// /// @brief /// Render a cel-shading demo using Direct3D /// @return /// N/A /////////////////////////////////////////////////////////////////////////////////////////////////// void CelShadeApp::CelShadeD3D() { ID3D11DeviceContext* pContext = m_pDxData->pD3D11Context; ID3D11Device* pDevice = m_pDxData->pD3D11Device; D3DX11_IMAGE_LOAD_INFO imageLoadInfo; memset( &imageLoadInfo, 0, sizeof(D3DX11_IMAGE_LOAD_INFO) ); imageLoadInfo.BindFlags = D3D11_BIND_SHADER_RESOURCE; imageLoadInfo.Format = DXGI_FORMAT_R8G8B8A8_UNORM; DxTextureCreateInfo shadeTexInfo; memset(&shadeTexInfo, 0, sizeof(DxTextureCreateInfo)); shadeTexInfo.flags.RenderTarget = TRUE; shadeTexInfo.flags.ShaderInput = TRUE; shadeTexInfo.format = DXGI_FORMAT_R8G8B8A8_UNORM; shadeTexInfo.width = m_screenWidth; shadeTexInfo.height = m_screenHeight; DxTexture* pShadeTex = DxTexture::Create(pDevice, &shadeTexInfo); DxTextureCreateInfo edgeTexInfo; memset(&edgeTexInfo, 0, sizeof(DxTextureCreateInfo)); edgeTexInfo.flags.RenderTarget = TRUE; edgeTexInfo.flags.ShaderInput = TRUE; edgeTexInfo.format = DXGI_FORMAT_R8G8B8A8_UNORM; edgeTexInfo.width = m_screenWidth; edgeTexInfo.height = m_screenHeight; DxTexture* pEdgeTex = DxTexture::Create(pDevice, &edgeTexInfo); // Samplers ///////////////////////////////////////////////////////////////////////////// // SamplerState PointSampler : register(s0); D3D11_SAMPLER_DESC pointSamplerDesc; memset(&pointSamplerDesc, 0, sizeof(D3D11_SAMPLER_DESC)); pointSamplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_POINT; pointSamplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_WRAP; pointSamplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_WRAP; pointSamplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; pointSamplerDesc.MinLOD = -FLT_MAX; pointSamplerDesc.MaxLOD = FLT_MAX; pointSamplerDesc.MipLODBias = 0.0f; pointSamplerDesc.MaxAnisotropy = 16; ID3D11SamplerState* pPointSampler = NULL; pDevice->CreateSamplerState(&pointSamplerDesc, &pPointSampler); // UINT numVertices = 0, numIndices = 0; VertexPTN* pVB = NULL; UINT* pIB = NULL; ImportPly("Content/dragon_vrip_res3.ply", numVertices, &pVB, numIndices, &pIB); //ImportPly("Content/bun_zipper_res4.ply", numVertices, &pVB, numIndices, &pIB); DxMeshCreateInfo meshCreateInfo = {0}; meshCreateInfo.indexCount = numIndices; meshCreateInfo.pIndexArray = pIB; meshCreateInfo.indexFormat = DXGI_FORMAT_R32_UINT; meshCreateInfo.pVertexArray = pVB; meshCreateInfo.vertexCount = numVertices; meshCreateInfo.vertexElementSize = sizeof(VertexPTN); DxMesh* pMesh = DxMesh::Create(pDevice, &meshCreateInfo); Plane p; DxMeshCreateInfo planeMeshInfo; memset(&planeMeshInfo, 0, sizeof(planeMeshInfo)); planeMeshInfo.pVertexArray = p.GetVB(); planeMeshInfo.vertexCount = p.NumVertices(); planeMeshInfo.vertexElementSize = sizeof(VertexPTN); DxMesh* pPlaneMesh = DxMesh::Create(pDevice, &planeMeshInfo); Cube c; DxMeshCreateInfo cubeMeshInfo; memset(&cubeMeshInfo, 0, sizeof(cubeMeshInfo)); cubeMeshInfo.pVertexArray = c.GetVB(); cubeMeshInfo.vertexCount = c.NumVertices(); cubeMeshInfo.vertexElementSize = sizeof(VertexPT); DxMesh* pCubeMesh = DxMesh::Create(pDevice, &cubeMeshInfo); D3D11_SUBRESOURCE_DATA cbInitData; memset(&cbInitData, 0, sizeof(D3D11_SUBRESOURCE_DATA)); // Camera Buffer CameraBufferData cameraData; memset(&cameraData, 0, sizeof(CameraBufferData)); DxBufferCreateInfo cameraBufferCreateInfo = {0}; cameraBufferCreateInfo.flags.cpuWriteable = TRUE; cameraBufferCreateInfo.elemSizeBytes = sizeof(CameraBufferData); cameraBufferCreateInfo.pInitialData = &cameraData; DxBuffer* pCameraBuffer = DxBuffer::Create(pDevice, &cameraBufferCreateInfo); // Shaders //////////////////////////////////////////////////////////////////////////////////// m_pPosTexTriVS = DxShader::CreateFromFile(pDevice, "PosTexTri", "Content/shaders/CelShade.hlsl", PosTexVertexDesc, PosTexElements); m_pPosTexNormVS = DxShader::CreateFromFile(pDevice, "PosTexNorm", "Content/shaders/CelShade.hlsl", PosTexNormVertexDesc, PosTexNormElements); m_pCelShadePS = DxShader::CreateFromFile(pDevice, "CelShade", "Content/shaders/CelShade.hlsl"); DxShader* pDetectEdges = DxShader::CreateFromFile(pDevice, "DetectEdges", "Content/shaders/CelShade.hlsl"); DxShader* pApplyTexPS = DxShader::CreateFromFile(pDevice, "ApplyTex", "Content/shaders/CelShade.hlsl"); DxShader* pCubeVS = DxShader::CreateFromFile(pDevice, "PosTex", "Content/shaders/CelShade.hlsl", PosTexVertexDesc, PosTexElements); DxShader* pCubePS = DxShader::CreateFromFile(pDevice, "CubePS", "Content/shaders/CelShade.hlsl"); //////////////////////////////////////////////////////////////////////////////////////// pContext->ClearState(); // SET RENDER STATE FLOAT clearColor[4]; clearColor[0] = 0.2f; clearColor[1] = 0.2f; clearColor[2] = 0.2f; clearColor[3] = 1.0f; D3D11_RASTERIZER_DESC shadeDesc; shadeDesc.FillMode = D3D11_FILL_SOLID; shadeDesc.CullMode = D3D11_CULL_BACK; shadeDesc.FrontCounterClockwise = FALSE; shadeDesc.DepthBias = 0; shadeDesc.DepthBiasClamp = 0.0f; shadeDesc.SlopeScaledDepthBias = 0; shadeDesc.DepthClipEnable = false; shadeDesc.ScissorEnable = false; shadeDesc.MultisampleEnable = false; shadeDesc.AntialiasedLineEnable = false; ID3D11RasterizerState* pShadeRS = NULL; pDevice->CreateRasterizerState(&shadeDesc, &pShadeRS); pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); m_pWindow->Show(); BOOL quit = false; FLOAT yRotationAngle = 0.0f; while (!quit) { ProcessUpdates(); BeginFrame(); CameraBufferData* pCameraData = NULL; // new frame, clear state pContext->ClearState(); pContext->RSSetViewports(1, &m_pDxData->viewport); pContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); pContext->RSSetState(pShadeRS); pContext->PSSetSamplers(0, 1, &pPointSampler); pContext->OMSetRenderTargets(1, &m_pDxData->pAppRenderTargetView, m_pDxData->pAppDepthStencilTex->GetDepthStencilView()); pContext->ClearRenderTargetView(m_pDxData->pAppRenderTargetView, clearColor); pContext->ClearDepthStencilView(m_pDxData->pAppDepthStencilTex->GetDepthStencilView(), D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0, 0); ///// Draw Mesh /////////////////////////////////////////////////////////////////////////// FLOAT viewRotationY = (GetMousePos().x - (m_screenWidth / 2.0f)) /(m_screenWidth / 2.0f); viewRotationY *= (3.14159f / 4.0f); FLOAT viewRotationZ = (GetMousePos().y - (m_screenHeight / 2.0f)) /(m_screenHeight / 2.0f); viewRotationZ *= (3.14159f / 4.0f); pCameraData = reinterpret_cast<CameraBufferData*>(pCameraBuffer->Map(pContext)); pCameraData->worldMatrix = XMMatrixScaling(25, 25, 25) * XMMatrixRotationY(yRotationAngle) * XMMatrixTranslation(m_pCamera->Position().x, m_pCamera->Position().y, m_pCamera->Position().z) ; // translate world +6 in Z to position camera -9 from world origin pCameraData->viewMatrix = m_pCamera->W2C(); pCameraData->projectionMatrix = m_pCamera->C2S(); pCameraBuffer->Unmap(pContext); pCameraBuffer->BindVS(pContext, 0); pMesh->Bind(pContext); m_pPosTexNormVS->Bind(pContext); m_pCelShadePS->Bind(pContext); pMesh->Draw(pContext); ///// Detect Edges /////////////////////////////////////////////////////////////////////////// ///// Draw Light Position //////////////////////////////////////////////////////////////////// //yRotationAngle = 0; pCameraData = reinterpret_cast<CameraBufferData*>(pCameraBuffer->Map(pContext)); pCameraData->worldMatrix = XMMatrixScaling(1, 1, 1); // XMMatrixRotationY(yRotationAngle); // XMMatrixTranslation(-10, 10, 10); // translate world +6 in Z to position camera -9 from world origin pCameraData->viewMatrix = XMMatrixTranslation(0, 0, 10) * m_pCamera->W2C(); pCameraData->projectionMatrix = m_pCamera->C2S(); pCameraBuffer->Unmap(pContext); pCameraBuffer->BindVS(pContext, 0); pCubeVS->Bind(pContext); pCubePS->Bind(pContext); pCubeMesh->Bind(pContext); pCubeMesh->Draw(pContext); ///// Draw UI //////////////////////////////////////////////////////////////////////////////// ///@todo Consider moving the following UI drawing to Draw2D() m_pUI->Begin(); // Draw UI stuff m_pUI->RenderRect(); m_pUI->RenderText(); m_pUI->End(); /// Blend UI onto final image DrawUI(); m_pDxData->pDXGISwapChain->Present(0,0); EndFrame(); Sleep(50); yRotationAngle += 3.14159f / 60.0f; } // Shader Resource Views pCameraBuffer->Destroy(); // Shaders m_pCelShadePS->Destroy(); m_pCelShadePS = NULL; m_pPosTexTriVS->Destroy(); m_pPosTexTriVS = NULL; m_pPosTexNormVS->Destroy(); m_pPosTexNormVS = NULL; pApplyTexPS->Destroy(); pApplyTexPS = NULL; pPlaneMesh->Destroy(); pPlaneMesh = NULL; // Samplers pPointSampler->Release(); // Rasterizer State pShadeRS->Release(); m_pDxData->pD3D11Context->ClearState(); m_pDxData->pD3D11Context->Flush(); }
~Texture() { m_ResourceView->Release(); m_SamplerState->Release(); }