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