summaryrefslogtreecommitdiffstats
path: root/Graphics/GraphicsEngineOpenGL
diff options
context:
space:
mode:
authorEgor <egor.yusov@gmail.com>2019-10-02 15:31:11 +0000
committerEgor <egor.yusov@gmail.com>2019-10-02 15:31:11 +0000
commit3b295c44e9b0b2f5c1c4ed1db9369a6eef1a4f5b (patch)
treee603929b4ae6fd2a5215d1d28c19da617004c193 /Graphics/GraphicsEngineOpenGL
parentVulkan backend: fixed minor issue in CommitScissorRects() (diff)
downloadDiligentCore-3b295c44e9b0b2f5c1c4ed1db9369a6eef1a4f5b.tar.gz
DiligentCore-3b295c44e9b0b2f5c1c4ed1db9369a6eef1a4f5b.zip
GL backend: fixed Android issues
Diffstat (limited to 'Graphics/GraphicsEngineOpenGL')
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/GLProgramResources.h8
-rw-r--r--Graphics/GraphicsEngineOpenGL/include/GLStubsAndroid.h8
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/DeviceContextGLImpl.cpp14
-rw-r--r--Graphics/GraphicsEngineOpenGL/src/GLStubsAndroid.cpp21
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