RenderTarget11::RenderTarget11(Renderer *renderer, ID3D11DepthStencilView *dsv, ID3D11Texture2D *tex, ID3D11ShaderResourceView *srv, GLsizei width, GLsizei height) { mRenderer = Renderer11::makeRenderer11(renderer); mTexture = tex; mRenderTarget = NULL; mDepthStencil = dsv; mShaderResource = srv; mSubresourceIndex = 0; if (mDepthStencil && mTexture) { D3D11_DEPTH_STENCIL_VIEW_DESC desc; mDepthStencil->GetDesc(&desc); D3D11_TEXTURE2D_DESC texDesc; mTexture->GetDesc(&texDesc); mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil); mWidth = width; mHeight = height; mSamples = (texDesc.SampleDesc.Count > 1) ? texDesc.SampleDesc.Count : 0; mInternalFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format); mActualFormat = d3d11_gl::ConvertTextureInternalFormat(desc.Format); } }
TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLenum internalFormat, d3d11::ANGLEFormat angleFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei samples) : RenderTarget11(angleFormat), mWidth(width), mHeight(height), mDepth(depth), mInternalFormat(internalFormat), mSamples(samples), mSubresourceIndex(0), mTexture(resource), mRenderTarget(NULL), mDepthStencil(dsv), mShaderResource(srv), mBlitShaderResource(nullptr) { if (mTexture) { mTexture->AddRef(); } if (mDepthStencil) { mDepthStencil->AddRef(); } if (mShaderResource) { mShaderResource->AddRef(); } if (mDepthStencil && mTexture) { mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil); } ASSERT(mANGLEFormat != d3d11::ANGLE_FORMAT_NONE || mWidth == 0 || mHeight == 0); }
TextureRenderTarget11::TextureRenderTarget11(ID3D11DepthStencilView *dsv, ID3D11Resource *resource, ID3D11ShaderResourceView *srv, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLsizei samples) : mWidth(width), mHeight(height), mDepth(depth), mInternalFormat(internalFormat), mActualFormat(internalFormat), mSamples(samples), mSubresourceIndex(0), mTexture(resource), mRenderTarget(NULL), mDepthStencil(dsv), mShaderResource(srv) { if (mTexture) { mTexture->AddRef(); } if (mDepthStencil) { mDepthStencil->AddRef(); } if (mShaderResource) { mShaderResource->AddRef(); } if (mDepthStencil && mTexture) { mSubresourceIndex = getDSVSubresourceIndex(mTexture, mDepthStencil); D3D11_DEPTH_STENCIL_VIEW_DESC desc; mDepthStencil->GetDesc(&desc); const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(desc.Format); mActualFormat = dxgiFormatInfo.internalFormat; } }