/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "GrBackendSurface.h" #ifdef SK_VULKAN #include "vk/GrVkTypes.h" #include "vk/GrVkUtil.h" #endif #ifdef SK_VULKAN GrBackendTexture::GrBackendTexture(int width, int height, const GrVkImageInfo& vkInfo) : fWidth(width) , fHeight(height) , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat)) , fBackend(kVulkan_GrBackend) , fVkInfo(vkInfo) {} #endif GrBackendTexture::GrBackendTexture(int width, int height, GrPixelConfig config, const GrGLTextureInfo& glInfo) : fWidth(width) , fHeight(height) , fConfig(config) , fBackend(kOpenGL_GrBackend) , fGLInfo(glInfo) {} GrBackendTexture::GrBackendTexture(int width, int height, GrPixelConfig config, const GrMockTextureInfo& mockInfo) : fWidth(width) , fHeight(height) , fConfig(config) , fBackend(kMock_GrBackend) , fMockInfo(mockInfo) {} #ifdef SK_VULKAN const GrVkImageInfo* GrBackendTexture::getVkImageInfo() const { if (this->isValid() && kVulkan_GrBackend == fBackend) { return &fVkInfo; } return nullptr; } #endif const GrGLTextureInfo* GrBackendTexture::getGLTextureInfo() const { if (this->isValid() && kOpenGL_GrBackend == fBackend) { return &fGLInfo; } return nullptr; } const GrMockTextureInfo* GrBackendTexture::getMockTextureInfo() const { if (this->isValid() && kMock_GrBackend == fBackend) { return &fMockInfo; } return nullptr; } //////////////////////////////////////////////////////////////////////////////////////////////////// #ifdef SK_VULKAN GrBackendRenderTarget::GrBackendRenderTarget(int width, int height, int sampleCnt, int stencilBits, const GrVkImageInfo& vkInfo) : fWidth(width) , fHeight(height) , fSampleCnt(sampleCnt) , fStencilBits(stencilBits) , fConfig(GrVkFormatToPixelConfig(vkInfo.fFormat)) , fBackend(kVulkan_GrBackend) , fVkInfo(vkInfo) {} #endif GrBackendRenderTarget::GrBackendRenderTarget(int width, int height, int sampleCnt, int stencilBits, GrPixelConfig config, const GrGLFramebufferInfo& glInfo) : fWidth(width) , fHeight(height) , fSampleCnt(sampleCnt) , fStencilBits(stencilBits) , fConfig(config) , fBackend(kOpenGL_GrBackend) , fGLInfo(glInfo) {} GrBackendRenderTarget::GrBackendRenderTarget(const GrBackendRenderTargetDesc& desc, GrBackend backend) : fWidth(desc.fWidth) , fHeight(desc.fHeight) , fSampleCnt(desc.fSampleCnt) , fStencilBits(desc.fStencilBits) , fConfig(desc.fConfig) , fBackend(backend) { if (kOpenGL_GrBackend == backend) { fGLInfo.fFBOID = static_cast(desc.fRenderTargetHandle); } else { SkASSERT(kVulkan_GrBackend == backend); #ifdef SK_VULKAN const GrVkImageInfo* vkInfo = reinterpret_cast(desc.fRenderTargetHandle); fConfig = GrVkFormatToPixelConfig(vkInfo->fFormat); fVkInfo = *vkInfo; #else fConfig = kUnknown_GrPixelConfig; #endif } } #ifdef SK_VULKAN const GrVkImageInfo* GrBackendRenderTarget::getVkImageInfo() const { if (kVulkan_GrBackend == fBackend) { return &fVkInfo; } return nullptr; } #endif const GrGLFramebufferInfo* GrBackendRenderTarget::getGLFramebufferInfo() const { if (kOpenGL_GrBackend == fBackend) { return &fGLInfo; } return nullptr; }