do binding of VS inputs and FS outputs before linking shader programs, as per OpenGL standard.

should fix the rendering issues with strict drivers (AMD, Intel).
This commit is contained in:
Arisotura
2019-05-31 02:26:13 +02:00
parent 6f5e45ef2c
commit 06e08b053f
4 changed files with 37 additions and 15 deletions

View File

@ -175,6 +175,13 @@ bool GLScreen_InitShader(GLuint* shader, const char* fs)
if (!OpenGL_BuildShaderProgram(kScreenVS, fs, shader, "ScreenShader"))
return false;
glBindAttribLocation(shader[2], 0, "vPosition");
glBindAttribLocation(shader[2], 1, "vTexcoord");
glBindFragDataLocation(shader[2], 0, "oColor");
if (!OpenGL_LinkShaderProgram(shader))
return false;
GLuint uni_id;
uni_id = glGetUniformBlockIndex(shader[2], "uConfig");
@ -186,10 +193,6 @@ bool GLScreen_InitShader(GLuint* shader, const char* fs)
uni_id = glGetUniformLocation(shader[2], "_3DTex");
glUniform1i(uni_id, 1);
glBindAttribLocation(shader[2], 0, "vPosition");
glBindAttribLocation(shader[2], 1, "vTexcoord");
glBindFragDataLocation(shader[2], 0, "oColor");
return true;
}
@ -198,7 +201,7 @@ bool GLScreen_Init()
// TODO: consider using epoxy?
if (!OpenGL_Init())
return false;
const GLubyte* renderer = glGetString(GL_RENDERER); // get renderer string
const GLubyte* version = glGetString(GL_VERSION); // version as a string
printf("OpenGL: renderer: %s\n", renderer);
@ -255,7 +258,7 @@ void GLScreen_DeInit()
void GLScreen_DrawScreen()
{
float scale = uiGLGetFramebufferScale(GLContext);
if (GL_ScreenSizeDirty)
{
GL_ScreenSizeDirty = false;
@ -2540,7 +2543,7 @@ int main(int argc, char** argv)
if (MicDevice) SDL_CloseAudioDevice(MicDevice);
if (MicWavBuffer) delete[] MicWavBuffer;
if (ScreenBitmap[0]) uiDrawFreeBitmap(ScreenBitmap[0]);
if (ScreenBitmap[1]) uiDrawFreeBitmap(ScreenBitmap[1]);