diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_resource_manager.cpp | 17 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_resource_manager.h | 25 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.cpp b/src/video_core/renderer_opengl/gl_resource_manager.cpp index 5c96c1d46..f0ddfb276 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.cpp +++ b/src/video_core/renderer_opengl/gl_resource_manager.cpp | |||
| @@ -207,4 +207,21 @@ void OGLFramebuffer::Release() { | |||
| 207 | handle = 0; | 207 | handle = 0; |
| 208 | } | 208 | } |
| 209 | 209 | ||
| 210 | void OGLQuery::Create(GLenum target) { | ||
| 211 | if (handle != 0) | ||
| 212 | return; | ||
| 213 | |||
| 214 | MICROPROFILE_SCOPE(OpenGL_ResourceCreation); | ||
| 215 | glCreateQueries(target, 1, &handle); | ||
| 216 | } | ||
| 217 | |||
| 218 | void OGLQuery::Release() { | ||
| 219 | if (handle == 0) | ||
| 220 | return; | ||
| 221 | |||
| 222 | MICROPROFILE_SCOPE(OpenGL_ResourceDeletion); | ||
| 223 | glDeleteQueries(1, &handle); | ||
| 224 | handle = 0; | ||
| 225 | } | ||
| 226 | |||
| 210 | } // namespace OpenGL | 227 | } // namespace OpenGL |
diff --git a/src/video_core/renderer_opengl/gl_resource_manager.h b/src/video_core/renderer_opengl/gl_resource_manager.h index 3a85a1d4c..514d1d165 100644 --- a/src/video_core/renderer_opengl/gl_resource_manager.h +++ b/src/video_core/renderer_opengl/gl_resource_manager.h | |||
| @@ -266,4 +266,29 @@ public: | |||
| 266 | GLuint handle = 0; | 266 | GLuint handle = 0; |
| 267 | }; | 267 | }; |
| 268 | 268 | ||
| 269 | class OGLQuery : private NonCopyable { | ||
| 270 | public: | ||
| 271 | OGLQuery() = default; | ||
| 272 | |||
| 273 | OGLQuery(OGLQuery&& o) noexcept : handle(std::exchange(o.handle, 0)) {} | ||
| 274 | |||
| 275 | ~OGLQuery() { | ||
| 276 | Release(); | ||
| 277 | } | ||
| 278 | |||
| 279 | OGLQuery& operator=(OGLQuery&& o) noexcept { | ||
| 280 | Release(); | ||
| 281 | handle = std::exchange(o.handle, 0); | ||
| 282 | return *this; | ||
| 283 | } | ||
| 284 | |||
| 285 | /// Creates a new internal OpenGL resource and stores the handle | ||
| 286 | void Create(GLenum target); | ||
| 287 | |||
| 288 | /// Deletes the internal OpenGL resource | ||
| 289 | void Release(); | ||
| 290 | |||
| 291 | GLuint handle = 0; | ||
| 292 | }; | ||
| 293 | |||
| 269 | } // namespace OpenGL | 294 | } // namespace OpenGL |