فهرست منبع

GL: Added image format test.

Branimir Karadžić 10 سال پیش
والد
کامیت
6b8964acf7
1فایلهای تغییر یافته به همراه30 افزوده شده و 4 حذف شده
  1. 30 4
      src/renderer_gl.cpp

+ 30 - 4
src/renderer_gl.cpp

@@ -970,7 +970,7 @@ namespace bgfx { namespace gl
 		}
 		}
 	}
 	}
 
 
-	bool isTextureFormatValid(TextureFormat::Enum _format, bool srgb = false)
+	static bool isTextureFormatValid(TextureFormat::Enum _format, bool srgb = false)
 	{
 	{
 		const TextureFormatInfo& tfi = s_textureFormat[_format];
 		const TextureFormatInfo& tfi = s_textureFormat[_format];
 		GLenum internalFmt = srgb
 		GLenum internalFmt = srgb
@@ -985,7 +985,6 @@ namespace bgfx { namespace gl
 		GLuint id;
 		GLuint id;
 		GL_CHECK(glGenTextures(1, &id) );
 		GL_CHECK(glGenTextures(1, &id) );
 		GL_CHECK(glBindTexture(GL_TEXTURE_2D, id) );
 		GL_CHECK(glBindTexture(GL_TEXTURE_2D, id) );
-
 		initTestTexture(_format);
 		initTestTexture(_format);
 
 
 		GLenum err = glGetError();
 		GLenum err = glGetError();
@@ -996,7 +995,34 @@ namespace bgfx { namespace gl
 		return 0 == err;
 		return 0 == err;
 	}
 	}
 
 
-	bool isFramebufferFormatValid(TextureFormat::Enum _format, bool srgb = false)
+	static bool isImageFormatValid(TextureFormat::Enum _format)
+	{
+		if (GL_ZERO == s_imageFormat[_format])
+		{
+			return false;
+		}
+
+		GLuint id;
+		GL_CHECK(glGenTextures(1, &id) );
+		GL_CHECK(glBindTexture(GL_TEXTURE_2D, id) );
+		initTestTexture(_format);
+
+		glBindImageTexture(0
+			, id
+			, 0
+			, GL_FALSE
+			, 0
+			, GL_READ_WRITE
+			, s_imageFormat[_format]
+			);
+		GLenum err = glGetError();
+
+		GL_CHECK(glDeleteTextures(1, &id) );
+
+		return 0 == err;
+	}
+
+	static bool isFramebufferFormatValid(TextureFormat::Enum _format, bool srgb = false)
 	{
 	{
 		const TextureFormatInfo& tfi = s_textureFormat[_format];
 		const TextureFormatInfo& tfi = s_textureFormat[_format];
 		GLenum internalFmt = srgb
 		GLenum internalFmt = srgb
@@ -1468,7 +1494,7 @@ namespace bgfx { namespace gl
 					;
 					;
 
 
 				supported |= computeSupport
 				supported |= computeSupport
-					&& GL_ZERO != s_imageFormat[ii]
+					&& isImageFormatValid(TextureFormat::Enum(ii) )
 					? BGFX_CAPS_FORMAT_TEXTURE_IMAGE
 					? BGFX_CAPS_FORMAT_TEXTURE_IMAGE
 					: BGFX_CAPS_FORMAT_TEXTURE_NONE
 					: BGFX_CAPS_FORMAT_TEXTURE_NONE
 					;
 					;