diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 0e6b8c9f..95e40799 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -4337,7 +4337,10 @@ namespace bgfx { namespace gl bool usesIUsamplers = !!bx::findIdentifierMatch(code, s_uisamplers); - uint32_t version = usesIUsamplers ? 130 : (usesTextureLod ? 120 : 0); + uint32_t version = usesIUsamplers + ? 130 + : (usesTextureLod ? 120 : 0) + ; if (0 != version) { @@ -4352,6 +4355,44 @@ namespace bgfx { namespace gl } } + if (130 <= version) + { + if (m_type == GL_FRAGMENT_SHADER) + { + writeString(&writer, "#define varying in\n"); + } + else + { + writeString(&writer, "#define attribute in\n"); + writeString(&writer, "#define varying out\n"); + } + + uint32_t fragData = 0; + + if (!!bx::findIdentifierMatch(code, "gl_FragData") ) + { + for (uint32_t ii = 0, num = g_caps.maxFBAttachments; ii < num; ++ii) + { + char tmpFragData[16]; + bx::snprintf(tmpFragData, BX_COUNTOF(tmpFragData), "gl_FragData[%d]", ii); + fragData = bx::uint32_max(fragData, NULL == strstr(code, tmpFragData) ? 0 : ii+1); + } + + BGFX_FATAL(0 != fragData, Fatal::InvalidShader, "Unable to find and patch gl_FragData!"); + } + + if (0 != fragData) + { + writeStringf(&writer, "out vec4 bgfx_FragData[%d];\n", fragData); + writeString(&writer, "#define gl_FragData bgfx_FragData\n"); + } + else + { + writeString(&writer, "out vec4 bgfx_FragColor;\n"); + writeString(&writer, "#define gl_FragColor bgfx_FragColor\n"); + } + } + writeString(&writer , "#define lowp\n" "#define mediump\n" @@ -4462,6 +4503,7 @@ namespace bgfx { namespace gl code = temp; } +BX_TRACE("%s", code); GL_CHECK(glShaderSource(m_id, 1, (const GLchar**)&code, NULL) ); GL_CHECK(glCompileShader(m_id) );