]> git.cworth.org Git - apitrace/blob - wrappers/gltrace.hpp
gles: track gl buffer contents in a shadow buffer
[apitrace] / wrappers / gltrace.hpp
1 /**************************************************************************
2  *
3  * Copyright 2011 Jose Fonseca
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  *
24  **************************************************************************/
25
26 #ifndef _GLTRACE_HPP_
27 #define _GLTRACE_HPP_
28
29
30 #include "glimports.hpp"
31 #include <string.h>
32 #include <stdlib.h>
33 #include <map>
34
35
36 namespace gltrace {
37
38
39 enum Profile {
40     PROFILE_COMPAT,
41     PROFILE_ES1,
42     PROFILE_ES2,
43 };
44
45 class Buffer {
46 public:
47     ~Buffer()
48     {
49         free(data);
50     }
51
52     void resetData(const void *new_data, size_t new_size)
53     {
54         data = realloc(data, new_size);
55         size = new_size;
56         if (size)
57             memcpy(data, new_data, size);
58     }
59
60         size_t size;
61         void *data;
62 };
63
64 class Context {
65 public:
66     enum Profile profile;
67     bool user_arrays;
68     bool user_arrays_arb;
69     bool user_arrays_nv;
70     unsigned retain_count;
71     std::map <GLuint, class Buffer *> buffers;
72
73     Context(void) :
74         profile(PROFILE_COMPAT),
75         user_arrays(false),
76         user_arrays_arb(false),
77         user_arrays_nv(false),
78         retain_count(0)
79     { }
80
81     inline bool
82     needsShadowBuffers(void)
83     {
84         return profile == PROFILE_ES1 || profile == PROFILE_ES2;
85     }
86 };
87
88 void
89 createContext(uintptr_t context_id);
90
91 void
92 retainContext(uintptr_t context_id);
93
94 bool
95 releaseContext(uintptr_t context_id);
96
97 void
98 setContext(uintptr_t context_id);
99
100 void
101 clearContext(void);
102
103 gltrace::Context *
104 getContext(void);
105
106 const GLubyte *
107 _glGetString_override(GLenum name);
108
109 void
110 _glGetIntegerv_override(GLenum pname, GLint *params);
111
112 const GLubyte *
113 _glGetStringi_override(GLenum name, GLuint index);
114
115
116 } /* namespace gltrace */
117
118
119 #endif /* _GLRETRACE_HPP_ */