void D3D11RenderTarget::clearColor(const vec4f& clearColor) { auto &context = m_graphics->getContext(); for (unsigned int i = 0; i < getNumTargets(); i++) { context.ClearRenderTargetView(m_targetsRTV[i], clearColor.array); } }
void D3D11RenderTarget::clear(const vec4f& clearColor, float clearDepth) { auto &context = m_graphics->getContext(); for (unsigned int i = 0; i < getNumTargets(); i++) { context.ClearRenderTargetView(m_targetsRTV[i], clearColor.array); } context.ClearDepthStencilView(m_depthStencilDSV, D3D11_CLEAR_DEPTH, clearDepth, 0); }
//_________________________________________________________________________________________________ void SwitchInst::verify() const { Inst::verify(); #ifdef _DEBUG for (U_32 i=0, n = getNumTargets(); i<n; ++i) { Node* target = getTarget(i); assert(target!=NULL && target->isBlockNode()); assert(node->isConnectedTo(true, target)); } #endif }
void D3D11RenderTarget::releaseGPU() { for (unsigned int i = 0; i < getNumTargets(); i++) { if (m_targets) SAFE_RELEASE(m_targets[i]); if (m_targetsRTV) SAFE_RELEASE(m_targetsRTV[i]); if (hasSRVs() && m_targetsSRV) SAFE_RELEASE(m_targetsSRV[i]); } SAFE_DELETE_ARRAY(m_targets); SAFE_DELETE_ARRAY(m_targetsRTV); SAFE_DELETE_ARRAY(m_targetsSRV); SAFE_RELEASE(m_depthStencil); SAFE_RELEASE(m_depthStencilDSV); if (hasSRVs()) SAFE_RELEASE(m_depthStencilSRV); for (unsigned int i = 0; i < getNumTargets(); i++) { if (m_captureTextures) SAFE_RELEASE(m_captureTextures[i]); } SAFE_DELETE_ARRAY(m_captureTextures); SAFE_RELEASE(m_captureDepth); }
void D3D11RenderTarget::bind() { MLIB_ASSERT(m_targets != nullptr); auto &context = m_graphics->getContext(); context.OMSetRenderTargets(getNumTargets(), m_targetsRTV, m_depthStencilDSV); D3D11_VIEWPORT viewport; viewport.Width = (FLOAT)m_width; viewport.Height = (FLOAT)m_height; viewport.MinDepth = 0.0f; viewport.MaxDepth = 1.0f; viewport.TopLeftX = 0; viewport.TopLeftY = 0; context.RSSetViewports(1, &viewport); }
//_________________________________________________________________________________________________ Edge::Kind SwitchInst::getEdgeKind(const Edge* edge) const { #ifdef _DEBUG Node* target = edge->getTargetNode(); assert(target->isBlockNode()); bool found = false; for (U_32 i =0 ; i < getNumTargets(); i++) { Node* myTarget = getTarget(i); if (myTarget == target) { found = true; break; } } assert(found); #endif return Edge::Kind_Unconditional; }
void ActionIce2Spell::onCastLogic() { myCastTime++; if (myCastTime > 40) { if (myTargetIndex >= 0) { Character* t = getTarget(myTargetIndex); t->damage(rand() % 100 + 30, Character::Damage_Ice); } myTargetIndex++; if (myTargetIndex == getNumTargets()) { return; } myCastTime = 0; Character* t = getTarget(myTargetIndex); Ice2Effect* i = new Ice2Effect(t->getCenterX(), t->getCenterY(), t->getZOrder() + 0.01f); getBattle()->addEntity(i); } }
void D3D11RenderTarget::createGPU() { releaseGPU(); if (m_width == 0 || m_height == 0) return; auto &device = m_graphics->getDevice(); auto &context = m_graphics->getContext(); // // Create the render target // m_targets = new ID3D11Texture2D*[getNumTargets()]; m_targetsRTV = new ID3D11RenderTargetView*[getNumTargets()]; if (hasSRVs()) m_targetsSRV = new ID3D11ShaderResourceView*[getNumTargets()]; m_captureTextures = new ID3D11Texture2D*[getNumTargets()]; for (unsigned int i = 0; i < getNumTargets(); i++) { D3D11_TEXTURE2D_DESC renderDesc; renderDesc.Width = m_width; renderDesc.Height = m_height; renderDesc.MipLevels = 1; renderDesc.ArraySize = 1; //renderDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; renderDesc.Format = m_textureFormats[i]; renderDesc.SampleDesc.Count = 1; renderDesc.SampleDesc.Quality = 0; renderDesc.Usage = D3D11_USAGE_DEFAULT; renderDesc.BindFlags = D3D11_BIND_RENDER_TARGET; if (hasSRVs()) renderDesc.BindFlags |= D3D11_BIND_SHADER_RESOURCE; renderDesc.CPUAccessFlags = 0; renderDesc.MiscFlags = 0; D3D_VALIDATE(device.CreateTexture2D(&renderDesc, nullptr, &m_targets[i])); // create the texture D3D_VALIDATE(device.CreateRenderTargetView(m_targets[i], nullptr, &m_targetsRTV[i])); // create the render target view if (hasSRVs()) D3D_VALIDATE(device.CreateShaderResourceView(m_targets[i], nullptr, &m_targetsSRV[i])); // create the shader resource view // Create the color capture buffer renderDesc.BindFlags = 0; renderDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; renderDesc.Usage = D3D11_USAGE_STAGING; D3D_VALIDATE(device.CreateTexture2D(&renderDesc, nullptr, &m_captureTextures[i])); } // Create the depth buffer D3D11_TEXTURE2D_DESC depthDesc; depthDesc.Width = m_width; depthDesc.Height = m_height; depthDesc.MipLevels = 1; depthDesc.ArraySize = 1; //depthDesc.Format = DXGI_FORMAT_D32_FLOAT; //we just assume the depth buffer to always have 32 bit depthDesc.Format = DXGI_FORMAT_R32_TYPELESS; depthDesc.SampleDesc.Count = 1; depthDesc.SampleDesc.Quality = 0; depthDesc.Usage = D3D11_USAGE_DEFAULT; depthDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL; if (hasSRVs()) depthDesc.BindFlags |= D3D11_BIND_SHADER_RESOURCE; depthDesc.CPUAccessFlags = 0; depthDesc.MiscFlags = 0; D3D_VALIDATE(device.CreateTexture2D(&depthDesc, nullptr, &m_depthStencil)); // Create the depth view D3D11_DEPTH_STENCIL_VIEW_DESC depthViewDSVDesc; depthViewDSVDesc.Flags = 0; depthViewDSVDesc.Format = DXGI_FORMAT_D32_FLOAT; depthViewDSVDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; depthViewDSVDesc.Texture2D.MipSlice = 0; D3D_VALIDATE(device.CreateDepthStencilView(m_depthStencil, &depthViewDSVDesc, &m_depthStencilDSV)); // Create the shader resource view D3D11_SHADER_RESOURCE_VIEW_DESC depthViewSRVDesc; depthViewSRVDesc.Format = DXGI_FORMAT_R32_FLOAT; depthViewSRVDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; depthViewSRVDesc.Texture2D.MipLevels = 1; depthViewSRVDesc.Texture2D.MostDetailedMip = 0; if (hasSRVs()) D3D_VALIDATE(device.CreateShaderResourceView(m_depthStencil, &depthViewSRVDesc, &m_depthStencilSRV)); // create the shader resource view // Create the depth capture buffer depthDesc.BindFlags = 0; depthDesc.CPUAccessFlags = D3D11_CPU_ACCESS_READ | D3D11_CPU_ACCESS_WRITE; depthDesc.Usage = D3D11_USAGE_STAGING; D3D_VALIDATE(device.CreateTexture2D(&depthDesc, nullptr, &m_captureDepth)); }
bool ActionIce2Spell::isCastDone() { return myTargetIndex == getNumTargets(); }