Surface.h revision d999309b36cb3dceadd38217b322f0e96a06b202
1d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Copyright 2016 The SwiftShader Authors. All Rights Reserved. 2d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// 3d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Licensed under the Apache License, Version 2.0 (the "License"); 4d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// you may not use this file except in compliance with the License. 5d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// You may obtain a copy of the License at 6d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// 7d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// http://www.apache.org/licenses/LICENSE-2.0 8d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// 9d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Unless required by applicable law or agreed to in writing, software 10d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// distributed under the License is distributed on an "AS IS" BASIS, 11d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// See the License for the specific language governing permissions and 13d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// limitations under the License. 14d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 15d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// Surface.h: Defines the Surface class, representing a drawing surface 16d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens// such as the client area of a window, including any back buffers. 17d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 18d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#ifndef INCLUDE_SURFACE_H_ 19d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#define INCLUDE_SURFACE_H_ 20d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 21d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include "Main/FrameBuffer.hpp" 22d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 23d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#define _GDI32_ 24d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <windows.h> 25d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <GL/GL.h> 26d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#include <GL/glext.h> 27d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 28d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#if defined(_WIN32) 29d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenstypedef HDC NativeDisplayType; 30d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenstypedef HBITMAP NativePixmapType; 31d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenstypedef HWND NativeWindowType; 32d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#else 33d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#error 34d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#endif 35d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 36d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensnamespace gl 37d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{ 38d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Image; 39d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Display; 40d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 41d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensclass Surface 42d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens{ 43d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capenspublic: 44d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Surface(Display *display, NativeWindowType window); 45d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Surface(Display *display, GLint width, GLint height, GLenum textureFormat, GLenum textureTarget); 46d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 47d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual ~Surface(); 48d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 49d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens bool initialize(); 50d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void swap(); 51d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 52d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual Image *getRenderTarget(); 53d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual Image *getDepthStencil(); 54d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 55d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void setSwapInterval(GLint interval); 56d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 57d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual GLint getWidth() const; 58d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual GLint getHeight() const; 59d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual GLenum getTextureFormat() const; 60d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens virtual GLenum getTextureTarget() const; 61d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 62d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens bool checkForResize(); // Returns true if surface changed due to resize 63d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 64d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capensprivate: 65d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens void release(); 66d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens bool reset(); 67d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 68d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Display *const mDisplay; 69d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Image *mDepthStencil; 70d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens sw::FrameBuffer *frameBuffer; 71d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens Image *backBuffer; 72d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 73d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens bool reset(int backbufferWidth, int backbufferHeight); 74d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 75d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens const NativeWindowType mWindow; // Window that the surface is created for. 76d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens bool mWindowSubclassed; // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking 77d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLint mHeight; // Height of surface 78d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLint mWidth; // Width of surface 79d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum mTextureFormat; // Format of texture: RGB, RGBA, or no texture 80d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLenum mTextureTarget; // Type of texture: 2D or no texture 81d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens GLint mSwapInterval; 82d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens}; 83d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens} 84d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens 85d999309b36cb3dceadd38217b322f0e96a06b202Nicolas Capens#endif // INCLUDE_SURFACE_H_ 86