From 40a4d98c29edd20fda337100094ce767280fda9e Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sun, 20 May 2018 18:58:47 +0200 Subject: [PATCH] update vbos outside of lock --- src/render.c | 120 +++++++++++++++++++++++++-------------------------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/src/render.c b/src/render.c index 2c4dcd9..8266ca2 100644 --- a/src/render.c +++ b/src/render.c @@ -89,21 +89,21 @@ DWORD WINAPI render_main(void) int tex_size = tex_width * tex_height * sizeof(int); int *tex = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tex_size); - BOOL got30 = glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && glDrawBuffers && + BOOL gotOpenglV3 = glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && glDrawBuffers && glCheckFramebufferStatus && glUniform4f && glActiveTexture && glUniform1i && glGetAttribLocation && glGenBuffers && glBindBuffer && glBufferData && glVertexAttribPointer && glEnableVertexAttribArray && glUniform2fv && glUniformMatrix4fv && glGenVertexArrays && glBindVertexArray; - BOOL got20 = glGetUniformLocation && glActiveTexture && glUniform1i; + BOOL gotOpenglV2 = glGetUniformLocation && glActiveTexture && glUniform1i; GLuint paletteConvProgram = 0; - if (got30) + if (gotOpenglV3) paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShaderSrc, PaletteFragShaderSrc); - else if (got20) + else if (gotOpenglV2) paletteConvProgram = OpenGL_BuildProgram(PassthroughVertShader110Src, PaletteFragShader110Src); GLuint scaleProgram = 0; - if (got30) + if (gotOpenglV3) scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader); // primary surface texture @@ -153,7 +153,7 @@ DWORD WINAPI render_main(void) surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex"); paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex"); - if (got30) + if (gotOpenglV3) { glUseProgram(paletteConvProgram); @@ -418,6 +418,8 @@ DWORD WINAPI render_main(void) scale_w = (float)ddraw->width / tex_width; scale_h = (float)ddraw->height / tex_height; + BOOL scaleChanged = FALSE; + if (maxfps > 0) tick_start = timeGetTime(); @@ -425,8 +427,6 @@ DWORD WINAPI render_main(void) if (ddraw->primary && ddraw->primary->palette) { - BOOL scaleChanged = FALSE; - if (ddraw->vhack && detect_cutscene()) { scale_w *= (float)CUTSCENE_WIDTH / ddraw->width; @@ -448,56 +448,6 @@ DWORD WINAPI render_main(void) } } - if (scaleChanged) - { - if (scaleProgram && paletteConvProgram) - { - glBindVertexArray(mainVao); - glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]); - GLfloat texCoordPal[] = { - 0.0f, 0.0f, - 0.0f, scale_h, - scale_w, scale_h, - scale_w, 0.0f, - }; - glBufferData(GL_ARRAY_BUFFER, sizeof(texCoordPal), texCoordPal, GL_STATIC_DRAW); - glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); - glEnableVertexAttribArray(mainTexCoordAttrLoc); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - - glBindVertexArray(scaleVao); - glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[1]); - GLfloat texCoord[] = { - 0.0f, 0.0f, - scale_w, 0.0f, - scale_w, scale_h, - 0.0f, scale_h, - }; - glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW); - glVertexAttribPointer(scaleTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); - glEnableVertexAttribArray(scaleTexCoordAttrLoc); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - } - else if (got30 && paletteConvProgram) - { - glBindVertexArray(mainVao); - glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]); - GLfloat texCoord[] = { - 0.0f, 0.0f, - scale_w, 0.0f, - scale_w, scale_h, - 0.0f, scale_h, - }; - glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW); - glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); - glEnableVertexAttribArray(mainTexCoordAttrLoc); - glBindBuffer(GL_ARRAY_BUFFER, 0); - glBindVertexArray(0); - } - } - if (paletteConvProgram) { glBindTexture(GL_TEXTURE_2D, paletteTexId); @@ -533,6 +483,56 @@ DWORD WINAPI render_main(void) glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ddraw->width, ddraw->height, GL_RGBA, GL_UNSIGNED_BYTE, tex); } + if (scaleChanged) + { + if (scaleProgram && paletteConvProgram) + { + glBindVertexArray(mainVao); + glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]); + GLfloat texCoordPal[] = { + 0.0f, 0.0f, + 0.0f, scale_h, + scale_w, scale_h, + scale_w, 0.0f, + }; + glBufferData(GL_ARRAY_BUFFER, sizeof(texCoordPal), texCoordPal, GL_STATIC_DRAW); + glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); + glEnableVertexAttribArray(mainTexCoordAttrLoc); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + + glBindVertexArray(scaleVao); + glBindBuffer(GL_ARRAY_BUFFER, scaleVbos[1]); + GLfloat texCoord[] = { + 0.0f, 0.0f, + scale_w, 0.0f, + scale_w, scale_h, + 0.0f, scale_h, + }; + glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW); + glVertexAttribPointer(scaleTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); + glEnableVertexAttribArray(scaleTexCoordAttrLoc); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + } + else if (gotOpenglV3 && paletteConvProgram) + { + glBindVertexArray(mainVao); + glBindBuffer(GL_ARRAY_BUFFER, mainVbos[1]); + GLfloat texCoord[] = { + 0.0f, 0.0f, + scale_w, 0.0f, + scale_w, scale_h, + 0.0f, scale_h, + }; + glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW); + glVertexAttribPointer(mainTexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); + glEnableVertexAttribArray(mainTexCoordAttrLoc); + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindVertexArray(0); + } + } + if (paletteConvProgram) { glUseProgram(paletteConvProgram); @@ -587,7 +587,7 @@ DWORD WINAPI render_main(void) glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); glBindVertexArray(0); } - else if (got30 && paletteConvProgram) + else if (gotOpenglV3 && paletteConvProgram) { glBindVertexArray(mainVao); glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0); @@ -649,7 +649,7 @@ DWORD WINAPI render_main(void) glDeleteProgram(scaleProgram); } - if (got30) + if (gotOpenglV3) { if (paletteConvProgram) {