make screen shaders work with OpenGL 3.1

This commit is contained in:
Arisotura
2019-05-17 15:47:40 +02:00
parent 72920bb763
commit 8bf4557175
3 changed files with 44 additions and 28 deletions

View File

@ -166,13 +166,21 @@ bool GLDrawing_Init()
if (!OpenGL_BuildShaderProgram(kScreenVS, kScreenFS, GL_ScreenShader, "ScreenShader"))
return false;
GLuint uni_id;
memset(&GL_ShaderConfig, 0, sizeof(GL_ShaderConfig));
glGenBuffers(1, &GL_ShaderConfigUBO);
glBindBuffer(GL_UNIFORM_BUFFER, GL_ShaderConfigUBO);
glBufferData(GL_UNIFORM_BUFFER, sizeof(GL_ShaderConfig), &GL_ShaderConfig, GL_STATIC_DRAW);
glBindBufferBase(GL_UNIFORM_BUFFER, 16, GL_ShaderConfigUBO);
glUniformBlockBinding(GL_ScreenShader[2], 0, 16);
uni_id = glGetUniformBlockIndex(GL_ScreenShader[2], "uConfig");
glUniformBlockBinding(GL_ScreenShader[2], uni_id, 16);
glUseProgram(GL_ScreenShader[2]);
uni_id = glGetUniformLocation(GL_ScreenShader[2], "ScreenTex");
glUniform1i(uni_id, 0);
uni_id = glGetUniformLocation(GL_ScreenShader[2], "_3DTex");
glUniform1i(uni_id, 1);
glGenBuffers(1, &GL_ScreenVertexBufferID);
glBindBuffer(GL_ARRAY_BUFFER, GL_ScreenVertexBufferID);
@ -185,6 +193,10 @@ bool GLDrawing_Init()
glEnableVertexAttribArray(1); // texcoord
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*4, (void*)(2*4));
glBindAttribLocation(GL_ScreenShader[2], 0, "vPosition");
glBindAttribLocation(GL_ScreenShader[2], 1, "vTexcoord");
glBindFragDataLocation(GL_ScreenShader[2], 0, "oColor");
// TODO: consider reallocating the texture when changing screen sizes
glGenTextures(1, &GL_ScreenTexture);
glActiveTexture(GL_TEXTURE0);