diff options
| author | Egor <egor.yusov@gmail.com> | 2019-10-02 15:31:11 +0000 |
|---|---|---|
| committer | Egor <egor.yusov@gmail.com> | 2019-10-02 15:31:11 +0000 |
| commit | 3b295c44e9b0b2f5c1c4ed1db9369a6eef1a4f5b (patch) | |
| tree | e603929b4ae6fd2a5215d1d28c19da617004c193 /Graphics/GraphicsEngineOpenGL | |
| parent | Vulkan backend: fixed minor issue in CommitScissorRects() (diff) | |
| download | DiligentCore-3b295c44e9b0b2f5c1c4ed1db9369a6eef1a4f5b.tar.gz DiligentCore-3b295c44e9b0b2f5c1c4ed1db9369a6eef1a4f5b.zip | |
GL backend: fixed Android issues
Diffstat (limited to 'Graphics/GraphicsEngineOpenGL')
4 files changed, 45 insertions, 6 deletions
diff --git a/Graphics/GraphicsEngineOpenGL/include/GLProgramResources.h b/Graphics/GraphicsEngineOpenGL/include/GLProgramResources.h index 646fe753..703841cc 100644 --- a/Graphics/GraphicsEngineOpenGL/include/GLProgramResources.h +++ b/Graphics/GraphicsEngineOpenGL/include/GLProgramResources.h @@ -149,7 +149,7 @@ namespace Diligent UniformBufferInfo (const UniformBufferInfo&) = delete; UniformBufferInfo& operator= (const UniformBufferInfo&) = delete; UniformBufferInfo ( UniformBufferInfo&&) = default; - UniformBufferInfo& operator= ( UniformBufferInfo&&) = default; + UniformBufferInfo& operator= ( UniformBufferInfo&&) = delete; UniformBufferInfo(IObject& _Owner, const Char* _Name, @@ -184,7 +184,7 @@ namespace Diligent SamplerInfo (const SamplerInfo&) = delete; SamplerInfo& operator= (const SamplerInfo&) = delete; SamplerInfo ( SamplerInfo&&) = default; - SamplerInfo& operator= ( SamplerInfo&&) = default; + SamplerInfo& operator= ( SamplerInfo&&) = delete; SamplerInfo(IObject& _Owner, const Char* _Name, @@ -226,7 +226,7 @@ namespace Diligent ImageInfo (const ImageInfo&) = delete; ImageInfo& operator= (const ImageInfo&) = delete; ImageInfo ( ImageInfo&&) = default; - ImageInfo& operator= ( ImageInfo&&) = default; + ImageInfo& operator= ( ImageInfo&&) = delete; ImageInfo(IObject& _Owner, const Char* _Name, @@ -265,7 +265,7 @@ namespace Diligent StorageBlockInfo (const StorageBlockInfo&) = delete; StorageBlockInfo& operator= (const StorageBlockInfo&) = delete; StorageBlockInfo ( StorageBlockInfo&&) = default; - StorageBlockInfo& operator= ( StorageBlockInfo&&) = default; + StorageBlockInfo& operator= ( StorageBlockInfo&&) = delete; StorageBlockInfo(IObject& _Owner, const Char* _Name, diff --git a/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h b/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h index fe48ae50..7a5f5571 100644 --- a/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h +++ b/Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h @@ -972,6 +972,10 @@ void UnsupportedGLFunctionStub( const T &Name ) typedef void (GL_APIENTRY* PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name); extern PFNGLGETPROGRAMRESOURCENAMEPROC glGetProgramResourceName; + #define LOAD_GL_GET_PROGRAM_RESOURCE_INDEX + typedef GLuint (GL_APIENTRY* PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); + extern PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex; + #define LOAD_GL_GET_PROGRAM_RESOURCEIV typedef void (GL_APIENTRY* PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params); extern PFNGLGETPROGRAMRESOURCEIVPROC glGetProgramResourceiv; @@ -980,6 +984,10 @@ void UnsupportedGLFunctionStub( const T &Name ) typedef void (GL_APIENTRY* PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params); extern PFNGLGETTEXLEVELPARAMETERIVPROC glGetTexLevelParameteriv; + #define LOAD_GL_SHADER_STORAGE_BLOCK_BINDING + typedef void (GL_APIENTRY* PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); + extern PFNGLSHADERSTORAGEBLOCKBINDINGPROC glShaderStorageBlockBinding; + #endif //GL_ES_VERSION_3_1 #define LOAD_GL_TEX_BUFFER diff --git a/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp b/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp index db68bc29..9e1a8a2b 100644 --- a/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp +++ b/Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp @@ -655,8 +655,18 @@ namespace Diligent glBindBufferRange(GL_SHADER_STORAGE_BUFFER, StorageBufferBindSlot, pBufferGL->m_GlBuffer, ViewDesc.ByteOffset, ViewDesc.ByteWidth); CHECK_GL_ERROR("Failed to bind shader storage buffer"); - glShaderStorageBlockBinding(GLProgID, SB.SBIndex + ArrInd, StorageBufferBindSlot); - CHECK_GL_ERROR("glUniformBlockBinding() failed"); + if (glShaderStorageBlockBinding) + { + glShaderStorageBlockBinding(GLProgID, SB.SBIndex + ArrInd, StorageBufferBindSlot); + CHECK_GL_ERROR("glShaderStorageBlockBinding() failed"); + } + else + { + LOG_WARNING_MESSAGE_ONCE("glShaderStorageBlockBinding is not available on this device and " + "the engine is unable to automatically assign shader storage block bindindg points. " + "To make shader storage blocks work properly, all binding points must be explicitly assigned " + "in the shader starting from 0 and proceeding in the storage block declaration order."); + } ++StorageBufferBindSlot; diff --git a/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp b/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp index a2d3f4ff..1744afab 100644 --- a/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp +++ b/Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp @@ -84,6 +84,15 @@ DECLARE_GL_FUNCTION( glGetProgramResourceName, PFNGLGETPROGRAMRESOURCENAMEPROC, GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei* length, GLchar *name ) #endif +#ifdef LOAD_GL_GET_PROGRAM_RESOURCE_INDEX + PFNGLGETPROGRAMRESOURCEINDEXPROC glGetProgramResourceIndex = nullptr; + GLuint glGetProgramResourceIndexStub(GLuint program, GLenum programInterface, const GLchar *name) + { + UnsupportedGLFunctionStub("glGetProgramResourceIndex"); + return 0; + } +#endif + #ifdef LOAD_GL_GET_PROGRAM_RESOURCEIV DECLARE_GL_FUNCTION( glGetProgramResourceiv, PFNGLGETPROGRAMRESOURCEIVPROC, GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum* props, GLsizei bufSize, GLsizei *length, GLint *params ) #endif @@ -152,6 +161,10 @@ DECLARE_GL_FUNCTION( glGetTexLevelParameteriv, PFNGLGETTEXLEVELPARAMETERIVPROC, GLenum target, GLint level, GLenum pname, GLint *params ) #endif +#ifdef LOAD_GL_SHADER_STORAGE_BLOCK_BINDING + DECLARE_GL_FUNCTION( glShaderStorageBlockBinding, PFNGLSHADERSTORAGEBLOCKBINDINGPROC, GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding ) +#endif + #ifdef LOAD_GL_TEX_STORAGE_3D_MULTISAMPLE DECLARE_GL_FUNCTION( glTexStorage3DMultisample, PFNGLTEXSTORAGE3DMULTISAMPLEPROC, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations ) #endif @@ -240,6 +253,10 @@ Func = (FuncType)eglGetProcAddress( #Func );\ LOAD_GL_FUNCTION( glGetProgramResourceName, PFNGLGETPROGRAMRESOURCENAMEPROC ) #endif +#ifdef LOAD_GL_GET_PROGRAM_RESOURCE_INDEX + LOAD_GL_FUNCTION( glGetProgramResourceIndex, PFNGLGETPROGRAMRESOURCEINDEXPROC ) +#endif + #ifdef LOAD_GL_GET_PROGRAM_RESOURCEIV LOAD_GL_FUNCTION( glGetProgramResourceiv, PFNGLGETPROGRAMRESOURCEIVPROC ) #endif @@ -309,6 +326,10 @@ Func = (FuncType)eglGetProcAddress( #Func );\ LOAD_GL_FUNCTION(glGetTexLevelParameteriv, PFNGLGETTEXLEVELPARAMETERIVPROC) #endif +#ifdef LOAD_GL_SHADER_STORAGE_BLOCK_BINDING + LOAD_GL_FUNCTION(glShaderStorageBlockBinding, PFNGLSHADERSTORAGEBLOCKBINDINGPROC) +#endif + #ifdef LOAD_GL_TEX_STORAGE_3D_MULTISAMPLE LOAD_GL_FUNCTION(glTexStorage3DMultisample, PFNGLTEXSTORAGE3DMULTISAMPLEPROC) #endif |
