• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 mHeight;                    // Height of surface
78 	GLint mWidth;                     // Width 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