Go to the documentation of this file.
35 template <
class CreateReleaseHelperType>
39 explicit GLObjWrapper(
bool CreateObject, CreateReleaseHelperType CreateReleaseHelper = CreateReleaseHelperType()) :
42 m_CreateReleaseHelper{CreateReleaseHelper}
67 m_uiHandle {Wrapper.m_uiHandle },
68 m_CreateReleaseHelper{std::move(Wrapper.m_CreateReleaseHelper)},
69 m_UniqueId {std::move(Wrapper.m_UniqueId) }
72 Wrapper.m_uiHandle = 0;
79 m_uiHandle = Wrapper.m_uiHandle;
80 m_CreateReleaseHelper = std::move(Wrapper.m_CreateReleaseHelper);
81 m_UniqueId = std::move(Wrapper.m_UniqueId);
83 Wrapper.m_uiHandle = 0;
90 VERIFY(m_uiHandle == 0,
"GL object is already initialized");
92 m_CreateReleaseHelper.Create(m_uiHandle);
93 VERIFY(m_uiHandle,
"Failed to initialize GL object");
100 m_CreateReleaseHelper.Release(m_uiHandle);
111 return m_UniqueId.
GetID();
114 operator GLuint()
const {
return m_uiHandle; }
123 CreateReleaseHelperType m_CreateReleaseHelper;
133 m_ExternalGLBufferHandle{ExternalGLBufferHandle}
138 if (m_ExternalGLBufferHandle != 0)
139 BuffObj = m_ExternalGLBufferHandle;
141 glGenBuffers(1, &BuffObj);
146 if (m_ExternalGLBufferHandle != 0)
147 m_ExternalGLBufferHandle = 0;
149 glDeleteBuffers(1, &BuffObj);
154 GLuint m_ExternalGLBufferHandle;
162 static void Create(GLuint& ProgObj) { ProgObj = glCreateProgram(); }
163 static void Release(GLuint ProgObj) { glDeleteProgram(ProgObj); }
175 void Create(GLuint& ShaderObj) { ShaderObj = glCreateShader(m_ShaderType); }
176 void Release(GLuint ShaderObj) { glDeleteShader(ShaderObj); }
200 void Create(GLuint& VAO) { glGenVertexArrays(1, &VAO); }
201 void Release(GLuint VAO) { glDeleteVertexArrays(1, &VAO); }
212 m_ExternalGLTextureHandle(ExternalGLTextureHandle)
217 if (m_ExternalGLTextureHandle != 0)
218 Tex = m_ExternalGLTextureHandle;
220 glGenTextures(1, &Tex);
225 if (m_ExternalGLTextureHandle != 0)
226 m_ExternalGLTextureHandle = 0;
228 glDeleteTextures(1, &Tex);
234 GLuint m_ExternalGLTextureHandle;
241 void Create(GLuint& Sampler) { glGenSamplers(1, &Sampler); }
242 void Release(GLuint Sampler) { glDeleteSamplers(1, &Sampler); }
253 m_ExternalFBOHandle(ExternalFBOHandle)
258 if (m_ExternalFBOHandle != 0)
259 FBO = m_ExternalFBOHandle;
261 glGenFramebuffers(1, &FBO);
266 if (m_ExternalFBOHandle != 0)
267 m_ExternalFBOHandle = 0;
269 glDeleteFramebuffers(1, &FBO);
275 GLuint m_ExternalFBOHandle;
283 void Create(GLuint& RBO) { glGenRenderbuffers(1, &RBO); }
284 void Release(GLuint RBO) { glDeleteRenderbuffers(1, &RBO); }
294 SyncHandle{_SyncHandle} {}
303 SyncHandle = rhs.SyncHandle;
304 rhs.SyncHandle = GLsync{};
310 SyncHandle = rhs.SyncHandle;
311 rhs.SyncHandle = GLsync{};
317 if (SyncHandle != GLsync{})
318 glDeleteSync(SyncHandle);
319 SyncHandle = GLsync{};
327 operator GLsync()
const {
return SyncHandle; }
330 GLsync SyncHandle = {};
336 void Create(GLuint& Query) { glGenQueries(1, &Query); }
337 void Release(GLuint Query) { glDeleteQueries(1, &Query); }
static const char * Name
Definition: GLObjectWrapper.hpp:178
GLObjWrapper< GLVAOCreateReleaseHelper > GLVertexArrayObj
Definition: GLObjectWrapper.hpp:205
void Release(GLuint FBO)
Definition: GLObjectWrapper.hpp:264
static const char * Name
Definition: GLObjectWrapper.hpp:151
void Create(GLuint &ShaderObj)
Definition: GLObjectWrapper.hpp:175
void Create(GLuint &RBO)
Definition: GLObjectWrapper.hpp:283
#define LOG_ERROR_AND_THROW(...)
Definition: Errors.hpp:101
void Release(GLuint VAO)
Definition: GLObjectWrapper.hpp:201
PFNGLGENPROGRAMPIPELINESPROC glGenProgramPipelines
void Release()
Definition: GLObjectWrapper.hpp:96
GLSyncObj()
Definition: GLObjectWrapper.hpp:292
void Release(GLuint RBO)
Definition: GLObjectWrapper.hpp:284
GLObjWrapper & operator=(const GLObjWrapper &)=delete
~GLSyncObj()
Definition: GLObjectWrapper.hpp:322
void Create(GLuint &Tex)
Definition: GLObjectWrapper.hpp:215
Definition: GLObjectWrapper.hpp:170
void Release(GLuint Pipeline)
Definition: GLObjectWrapper.hpp:190
~GLObjWrapper()
Definition: GLObjectWrapper.hpp:55
Diligent::UniqueIdentifier GetUniqueID() const
Definition: GLObjectWrapper.hpp:105
GLBufferObjCreateReleaseHelper(GLuint ExternalGLBufferHandle=0)
Definition: GLObjectWrapper.hpp:132
void Create(GLuint &FBO)
Definition: GLObjectWrapper.hpp:256
GLSyncObj & operator=(const GLSyncObj &)=delete
Definition: GLObjectWrapper.hpp:129
GLObjWrapper< GLQueryCreateReleaseHelper > GLQueryObj
Definition: GLObjectWrapper.hpp:341
void Release(GLuint Query)
Definition: GLObjectWrapper.hpp:337
void Create(GLuint &Pipeline)
Definition: GLObjectWrapper.hpp:189
static const char * Name
Definition: GLObjectWrapper.hpp:231
GLObjWrapper(GLObjWrapper &&Wrapper)
Definition: GLObjectWrapper.hpp:65
void Release(GLuint ShaderObj)
Definition: GLObjectWrapper.hpp:176
Definition: GLObjectWrapper.hpp:238
void Create(GLuint &BuffObj)
Definition: GLObjectWrapper.hpp:136
Definition: GLObjectWrapper.hpp:32
GLObjWrapper< GLPipelineObjCreateReleaseHelper > GLPipelineObj
Definition: GLObjectWrapper.hpp:194
GLObjWrapper< GLBufferObjCreateReleaseHelper > GLBufferObj
Definition: GLObjectWrapper.hpp:156
GLSyncObj & operator=(GLSyncObj &&rhs)
Definition: GLObjectWrapper.hpp:307
void Release(GLuint Tex)
Definition: GLObjectWrapper.hpp:223
static GLObjWrapper Null()
Definition: GLObjectWrapper.hpp:116
static const char * Name
Definition: GLObjectWrapper.hpp:203
GLObjWrapper & operator=(GLObjWrapper &&Wrapper)
Definition: GLObjectWrapper.hpp:75
Definition: GLObjectWrapper.hpp:197
GLObjWrapper< GLRBOCreateReleaseHelper > GLRenderBufferObj
Definition: GLObjectWrapper.hpp:288
void Release(GLuint BuffObj)
Definition: GLObjectWrapper.hpp:144
UniqueIdentifier GetID() const noexcept
Definition: UniqueIdentifier.hpp:64
void Release()
Definition: GLObjectWrapper.hpp:315
GLObjWrapper< GLProgramObjCreateReleaseHelper > GLProgramObj
Definition: GLObjectWrapper.hpp:167
GLObjWrapper< GLSamplerCreateReleaseHelper > GLSamplerObj
Definition: GLObjectWrapper.hpp:246
GLObjWrapper< GLFBOCreateReleaseHelper > GLFrameBufferObj
Definition: GLObjectWrapper.hpp:277
static const char * Name
Definition: GLObjectWrapper.hpp:339
Definition: GLObjectWrapper.hpp:186
GLSyncObj(GLSyncObj &&rhs)
Definition: GLObjectWrapper.hpp:301
GLObjWrapper< GLTextureCreateReleaseHelper > GLTextureObj
Definition: GLObjectWrapper.hpp:236
static void Release(GLuint ProgObj)
Definition: GLObjectWrapper.hpp:163
static void Create(GLuint &ProgObj)
Definition: GLObjectWrapper.hpp:162
PFNGLDELETEPROGRAMPIPELINESPROC glDeleteProgramPipelines
Definition: GLObjectWrapper.hpp:290
Definition: GLObjectWrapper.hpp:36
void Create(GLuint &Sampler)
Definition: GLObjectWrapper.hpp:241
Definition: GLObjectWrapper.hpp:208
static const char * Name
Definition: GLObjectWrapper.hpp:192
void Release(GLuint Sampler)
Definition: GLObjectWrapper.hpp:242
Definition: GLObjectWrapper.hpp:159
#define VERIFY(...)
Definition: DebugUtilities.hpp:76
static const char * Name
Definition: GLObjectWrapper.hpp:272
Definition: GLObjectWrapper.hpp:280
static const char * Name
Definition: GLObjectWrapper.hpp:286
GLSyncObj(GLsync _SyncHandle)
Definition: GLObjectWrapper.hpp:293
void Create(GLuint &VAO)
Definition: GLObjectWrapper.hpp:200
Int32 UniqueIdentifier
Definition: UniqueIdentifier.hpp:36
void Create(GLuint &Query)
Definition: GLObjectWrapper.hpp:336
Uint16 ShaderType
Definition: DXBCUtils.cpp:70
Definition: GLObjectWrapper.hpp:333
static const char * Name
Definition: GLObjectWrapper.hpp:244
GLShaderObjCreateReleaseHelper(GLenum ShaderType)
Definition: GLObjectWrapper.hpp:173
void Create()
Definition: GLObjectWrapper.hpp:88
GLObjWrapper(bool CreateObject, CreateReleaseHelperType CreateReleaseHelper=CreateReleaseHelperType())
Definition: GLObjectWrapper.hpp:39
GLFBOCreateReleaseHelper(GLuint ExternalFBOHandle=0)
Definition: GLObjectWrapper.hpp:252
Definition: GLObjectWrapper.hpp:249
GLObjWrapper< GLShaderObjCreateReleaseHelper > GLShaderObj
Definition: GLObjectWrapper.hpp:183
static const char * Name
Definition: GLObjectWrapper.hpp:165
GLTextureCreateReleaseHelper(GLuint ExternalGLTextureHandle=0)
Definition: GLObjectWrapper.hpp:211