Просмотр исходного кода

OpenGL: Fixed invalid parsing of image buffers

BearishSun 9 лет назад
Родитель
Сommit
f1271a4e5a

+ 1 - 0
Source/BansheeGLRenderAPI/Source/BsGLFrameBufferObject.cpp

@@ -123,6 +123,7 @@ namespace bs { namespace ct
             break;
         case GL_FRAMEBUFFER_UNSUPPORTED:
             LOGERR("All framebuffer formats with this texture internal format unsupported");
+			break;
         default:
             LOGERR("Framebuffer incomplete or other FBO status error");
         }

+ 15 - 11
Source/BansheeGLRenderAPI/Source/BsGLSLParamParser.cpp

@@ -310,6 +310,7 @@ namespace bs { namespace ct
 			bool isSampler = false;
 			bool isImage = false;
 			bool isBuffer = false;
+			bool isRWBuffer = false;
 			switch (uniformType)
 			{
 			case GL_SAMPLER_1D:
@@ -399,10 +400,12 @@ namespace bs { namespace ct
 			case GL_SAMPLER_BUFFER:
 			case GL_UNSIGNED_INT_SAMPLER_BUFFER:
 			case GL_INT_SAMPLER_BUFFER:
+				isBuffer = true;
+				break;
 			case GL_IMAGE_BUFFER:
 			case GL_UNSIGNED_INT_IMAGE_BUFFER:
 			case GL_INT_IMAGE_BUFFER:
-				isBuffer = true;
+				isRWBuffer = true;
 				break;
 			}
 
@@ -437,18 +440,19 @@ namespace bs { namespace ct
 			{
 				GpuParamObjectDesc bufferParam;
 				bufferParam.name = paramName;
+				bufferParam.type = GPOT_BYTE_BUFFER;
 				bufferParam.slot = glGetUniformLocation(glProgram, uniformName);
+				bufferParam.set = mapParameterToSet(type, ParamType::Texture);
 
-				if (uniformType == GL_IMAGE_BUFFER)
-				{
-					bufferParam.type = GPOT_RWBYTE_BUFFER;
-					bufferParam.set = mapParameterToSet(type, ParamType::Image);
-				}
-				else // Sampler buffer
-				{
-					bufferParam.type = GPOT_BYTE_BUFFER;
-					bufferParam.set = mapParameterToSet(type, ParamType::Texture);
-				}
+				returnParamDesc.buffers.insert(std::make_pair(paramName, bufferParam));
+			}
+			else if(isRWBuffer)
+			{
+				GpuParamObjectDesc bufferParam;
+				bufferParam.name = paramName;
+				bufferParam.type = GPOT_RWBYTE_BUFFER;
+				bufferParam.slot = glGetUniformLocation(glProgram, uniformName);
+				bufferParam.set = mapParameterToSet(type, ParamType::Image);
 
 				returnParamDesc.buffers.insert(std::make_pair(paramName, bufferParam));
 			}