1 // Copyright (c) 2015- PPSSPP Project.
2 
3 // This program is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, version 2.0 or later versions.
6 
7 // This program is distributed in the hope that it will be useful,
8 // but WITHOUT ANY WARRANTY; without even the implied warranty of
9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10 // GNU General Public License 2.0 for more details.
11 
12 // A copy of the GPL 2.0 should have been included with the program.
13 // If not, see http://www.gnu.org/licenses/
14 
15 // Official git repository and contact information can be found at
16 // https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
17 
18 // Modelled on OpenD3DBase. Might make a cleaner interface later.
19 
20 #pragma once
21 
22 #include "Common/CommonWindows.h"
23 #include "Windows/GPU/WindowsGraphicsContext.h"
24 #include <d3d9.h>
25 
26 namespace Draw {
27 	class DrawContext;
28 }
29 
30 class D3D9Context : public WindowsGraphicsContext {
31 public:
D3D9Context()32 	D3D9Context() : draw_(nullptr), has9Ex_(false), d3d_(nullptr), d3dEx_(nullptr), adapterId_(-1), device_(nullptr), deviceEx_(nullptr), hDC_(nullptr), hWnd_(nullptr), hD3D9_(nullptr), presentParams_{} {
33 	}
34 
35 	bool Init(HINSTANCE hInst, HWND window, std::string *error_message) override;
36 	void Shutdown() override;
37 	void SwapInterval(int interval) override;
38 	void SwapBuffers() override;
39 
40 	void Resize() override;
41 
GetDrawContext()42 	Draw::DrawContext *GetDrawContext() override { return draw_; }
43 
44 private:
45 	Draw::DrawContext *draw_;
46 	bool has9Ex_;
47 	LPDIRECT3D9 d3d_;
48 	LPDIRECT3D9EX d3dEx_;
49 	int adapterId_;
50 	LPDIRECT3DDEVICE9 device_;
51 	LPDIRECT3DDEVICE9EX deviceEx_;
52 	HDC hDC_;     // Private GDI Device Context
53 	HWND hWnd_;   // Holds Our Window Handle
54 	HMODULE hD3D9_;
55 	D3DPRESENT_PARAMETERS presentParams_;
56 	int swapInterval_ = 0;
57 };
58 
59