1 /*
2  * Copyright 2009-2014, Haiku, Inc. All Rights Reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Alexander von Gluck IV, kallisti5@unixzen.com
7  */
8 #ifndef HGL_CONTEXT_H
9 #define HGL_CONTEXT_H
10 
11 
12 #include "pipe/p_format.h"
13 #include "pipe/p_compiler.h"
14 #include "pipe/p_screen.h"
15 #include "postprocess/filters.h"
16 
17 #include "frontend/api.h"
18 #include "frontend/st_manager.h"
19 #include "os/os_thread.h"
20 
21 #include "bitmap_wrapper.h"
22 
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 
29 #define CONTEXT_MAX 32
30 
31 typedef int64 context_id;
32 
33 
34 struct hgl_buffer
35 {
36 	struct st_framebuffer_iface *stfbi;
37 	struct st_visual* visual;
38 
39 	unsigned width;
40 	unsigned height;
41 	unsigned mask;
42 
43 	struct pipe_screen* screen;
44 	struct pipe_surface* surface;
45 
46 	enum pipe_texture_target target;
47 	struct pipe_resource* textures[ST_ATTACHMENT_COUNT];
48 
49 	void *map;
50 
51 	//struct hgl_buffer *next;  /**< next in linked list */
52 };
53 
54 
55 struct hgl_context
56 {
57 	struct st_api* api;
58 		// API
59 	struct st_manager* manager;
60 		// Manager
61 	struct st_context_iface* st;
62 		// Interface Object
63 	struct st_visual* stVisual;
64 		// Visual
65 
66 	struct pipe_screen* screen;
67 
68 	//struct pipe_resource* textures[ST_ATTACHMENT_COUNT];
69 
70 	// Post processing
71 	struct pp_queue_t* postProcess;
72 	unsigned int postProcessEnable[PP_FILTERS];
73 
74 	// Desired viewport size
75 	unsigned width;
76 	unsigned height;
77 
78 	Bitmap* bitmap;
79 	color_space colorSpace;
80 
81 	mtx_t fbMutex;
82 
83 	struct hgl_buffer* draw;
84 	struct hgl_buffer* read;
85 };
86 
87 // hgl_buffer from statetracker interface
88 struct hgl_buffer* hgl_st_framebuffer(struct st_framebuffer_iface *stfbi);
89 
90 // hgl frontend
91 struct st_api* hgl_create_st_api(void);
92 
93 // hgl framebuffer
94 struct hgl_buffer* hgl_create_st_framebuffer(struct hgl_context* context);
95 
96 // hgl manager
97 struct st_manager* hgl_create_st_manager(struct hgl_context* screen);
98 void hgl_destroy_st_manager(struct st_manager *manager);
99 
100 // hgl visual
101 struct st_visual* hgl_create_st_visual(ulong options);
102 void hgl_destroy_st_visual(struct st_visual* visual);
103 
104 
105 #ifdef __cplusplus
106 }
107 #endif
108 
109 #endif /* HGL_CONTEXT_H */
110