// Copyright 2020 The Dawn Authors // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef DAWNNATIVE_SURFACE_H_ #define DAWNNATIVE_SURFACE_H_ #include "dawn_native/Error.h" #include "dawn_native/Forward.h" #include "dawn_native/RefCounted.h" #include "dawn_native/dawn_platform.h" namespace dawn_native { MaybeError ValidateSurfaceDescriptor(const InstanceBase* instance, const SurfaceDescriptor* descriptor); // A surface is a sum types of all the kind of windows Dawn supports. The OS-specific types // aren't used because they would cause compilation errors on other OSes (or require // ObjectiveC). // The surface is also used to store the current swapchain so that we can detach it when it is // replaced. class Surface final : public RefCounted { public: Surface(InstanceBase* instance, const SurfaceDescriptor* descriptor); ~Surface(); void SetAttachedSwapChain(NewSwapChainBase* swapChain); NewSwapChainBase* GetAttachedSwapChain() const; // These are valid to call on all Surfaces. enum class Type { MetalLayer, WindowsHWND, Xlib }; Type GetType() const; InstanceBase* GetInstance(); // Valid to call if the type is MetalLayer void* GetMetalLayer() const; // Valid to call if the type is WindowsHWND void* GetHInstance() const; void* GetHWND() const; // Valid to call if the type is WindowsXlib void* GetXDisplay() const; uint32_t GetXWindow() const; private: Ref mInstance; Type mType; // The swapchain will set this to null when it is destroyed. NewSwapChainBase* mSwapChain = nullptr; // MetalLayer void* mMetalLayer = nullptr; // WindowsHwnd void* mHInstance = nullptr; void* mHWND = nullptr; // Xlib void* mXDisplay = nullptr; uint32_t mXWindow = 0; }; } // namespace dawn_native #endif // DAWNNATIVE_SURFACE_H_