GLenum FramebufferD3D::getImplementationColorReadType() const { const gl::FramebufferAttachment *readAttachment = mData.getReadAttachment(); if (readAttachment == nullptr) { return GL_NONE; } RenderTargetD3D *attachmentRenderTarget = NULL; gl::Error error = GetAttachmentRenderTarget(readAttachment, &attachmentRenderTarget); if (error.isError()) { return GL_NONE; } GLenum implementationFormat = getRenderTargetImplementationFormat(attachmentRenderTarget); const gl::InternalFormat &implementationFormatInfo = gl::GetInternalFormatInfo(implementationFormat); return implementationFormatInfo.type; }
gl::Error Framebuffer11::blit(const gl::Rectangle &sourceArea, const gl::Rectangle &destArea, const gl::Rectangle *scissor, bool blitRenderTarget, bool blitDepth, bool blitStencil, GLenum filter, const gl::Framebuffer *sourceFramebuffer) { if (blitRenderTarget) { const gl::FramebufferAttachment *readBuffer = sourceFramebuffer->getReadColorbuffer(); ASSERT(readBuffer); RenderTargetD3D *readRenderTarget = NULL; gl::Error error = GetAttachmentRenderTarget(readBuffer, &readRenderTarget); if (error.isError()) { return error; } ASSERT(readRenderTarget); for (size_t colorAttachment = 0; colorAttachment < mDrawBuffers.size(); colorAttachment++) { if (mColorBuffers[colorAttachment] != nullptr && mDrawBuffers[colorAttachment] != GL_NONE) { const gl::FramebufferAttachment *drawBuffer = mColorBuffers[colorAttachment]; RenderTargetD3D *drawRenderTarget = NULL; error = GetAttachmentRenderTarget(drawBuffer, &drawRenderTarget); if (error.isError()) { return error; } ASSERT(drawRenderTarget); error = mRenderer->blitRenderbufferRect(sourceArea, destArea, readRenderTarget, drawRenderTarget, filter, scissor, blitRenderTarget, false, false); if (error.isError()) { return error; } } } } if (blitDepth || blitStencil) { gl::FramebufferAttachment *readBuffer = sourceFramebuffer->getDepthOrStencilbuffer(); ASSERT(readBuffer); RenderTargetD3D *readRenderTarget = NULL; gl::Error error = GetAttachmentRenderTarget(readBuffer, &readRenderTarget); if (error.isError()) { return error; } ASSERT(readRenderTarget); const gl::FramebufferAttachment *drawBuffer = (mDepthbuffer != nullptr) ? mDepthbuffer : mStencilbuffer; ASSERT(drawBuffer); RenderTargetD3D *drawRenderTarget = NULL; error = GetAttachmentRenderTarget(drawBuffer, &drawRenderTarget); if (error.isError()) { return error; } ASSERT(drawRenderTarget); error = mRenderer->blitRenderbufferRect(sourceArea, destArea, readRenderTarget, drawRenderTarget, filter, scissor, false, blitDepth, blitStencil); if (error.isError()) { return error; } } gl::Error error = invalidateSwizzles(); if (error.isError()) { return error; } return gl::Error(GL_NO_ERROR); }