1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

remove redundant stuff from render loop

This commit is contained in:
FunkyFr3sh 2018-05-23 01:11:40 +02:00
parent 3fcc17b336
commit 5ed60e662e
2 changed files with 34 additions and 39 deletions

View File

@ -4,7 +4,7 @@ const GLchar *PassthroughVertShader110Src =
"#version 110\n"
"varying vec2 TexCoord0; \n"
"\n"
"void main(void)\n"
"void main()\n"
"{\n"
" gl_Position = ftransform(); \n"
" TexCoord0 = gl_MultiTexCoord0.xy; \n"
@ -12,8 +12,8 @@ const GLchar *PassthroughVertShader110Src =
const GLchar *PaletteFragShader110Src =
"#version 110\n"
"uniform sampler2D PaletteTex; \n"
"uniform sampler2D SurfaceTex; \n"
"uniform sampler2D PaletteTex; \n"
"varying vec2 TexCoord0; \n"
"\n"
"void main()\n"
@ -81,8 +81,8 @@ const GLchar *PaletteFragShaderSrc =
"#define COMPAT_PRECISION\n"
"#endif\n"
"\n"
"uniform sampler2D PaletteTex;\n"
"uniform sampler2D SurfaceTex;\n"
"uniform sampler2D PaletteTex;\n"
"COMPAT_VARYING vec4 TEX0;\n"
"\n"
"void main()\n"

View File

@ -92,7 +92,8 @@ DWORD WINAPI render_main(void)
BOOL gotOpenglV3 = glGenFramebuffers && glBindFramebuffer && glFramebufferTexture2D && glDrawBuffers &&
glCheckFramebufferStatus && glUniform4f && glActiveTexture && glUniform1i &&
glGetAttribLocation && glGenBuffers && glBindBuffer && glBufferData && glVertexAttribPointer &&
glEnableVertexAttribArray && glUniform2fv && glUniformMatrix4fv && glGenVertexArrays && glBindVertexArray;
glEnableVertexAttribArray && glUniform2fv && glUniformMatrix4fv && glGenVertexArrays && glBindVertexArray &&
glGetUniformLocation;
BOOL gotOpenglV2 = glGetUniformLocation && glActiveTexture && glUniform1i;
@ -150,17 +151,14 @@ DWORD WINAPI render_main(void)
ddraw->render.viewport.width, ddraw->render.viewport.height);
GLint surfaceUniLoc = -1, paletteUniLoc = -1, mainTexCoordAttrLoc = -1, mainVertexCoordAttrLoc = -1;
GLint mainTexCoordAttrLoc = -1, mainVertexCoordAttrLoc = -1;
GLuint mainVbos[3], mainVao;
if (paletteConvProgram)
{
surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
glUseProgram(paletteConvProgram);
if (gotOpenglV3)
{
glUseProgram(paletteConvProgram);
mainVertexCoordAttrLoc = glGetAttribLocation(paletteConvProgram, "VertexCoord");
mainTexCoordAttrLoc = glGetAttribLocation(paletteConvProgram, "TexCoord");
@ -244,9 +242,21 @@ DWORD WINAPI render_main(void)
glUniformMatrix4fv(glGetUniformLocation(paletteConvProgram, "MVPMatrix"), 1, GL_FALSE, mvpMatrix);
}
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, surfaceTexId);
glUniform1i(glGetUniformLocation(paletteConvProgram, "SurfaceTex"), 0);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, paletteTexId);
glUniform1i(glGetUniformLocation(paletteConvProgram, "PaletteTex"), 1);
glActiveTexture(GL_TEXTURE0);
}
GLint textureUniLoc = -1, frameCountUniLoc = -1;
GLint frameCountUniLoc = -1;
GLuint frameBufferId = 0;
GLuint frameBufferTexId = 0;
GLuint scaleVbos[3], scaleVao;
@ -257,7 +267,6 @@ DWORD WINAPI render_main(void)
GLint vertexCoordAttrLoc = glGetAttribLocation(scaleProgram, "VertexCoord");
GLint texCoordAttrLoc = glGetAttribLocation(scaleProgram, "TexCoord");
textureUniLoc = glGetUniformLocation(scaleProgram, "Texture");
frameCountUniLoc = glGetUniformLocation(scaleProgram, "FrameCount");
glGenBuffers(3, scaleVbos);
@ -319,6 +328,7 @@ DWORD WINAPI render_main(void)
glUniform2fv(glGetUniformLocation(scaleProgram, "TextureSize"), 1, textureSize);
glUniform2fv(glGetUniformLocation(scaleProgram, "InputSize"), 1, inputSize);
glUniform1i(glGetUniformLocation(scaleProgram, "FrameDirection"), 1);
glUniform1i(glGetUniformLocation(scaleProgram, "Texture"), 0);
const float mvpMatrix[16] = {
1,0,0,0,
@ -389,13 +399,16 @@ DWORD WINAPI render_main(void)
glEnableVertexAttribArray(mainTexCoordAttrLoc);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glUseProgram(paletteConvProgram);
}
}
else
glUseProgram(0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
glBindTexture(GL_TEXTURE_2D, 0);
glEnable(GL_TEXTURE_2D);
BOOL useOpenGL = !(ddraw->autorenderer && (!paletteConvProgram || glGetError() != GL_NO_ERROR));
@ -519,26 +532,15 @@ DWORD WINAPI render_main(void)
}
}
if (paletteConvProgram)
{
glUseProgram(paletteConvProgram);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, paletteTexId);
glUniform1i(paletteUniLoc, 0);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, surfaceTexId);
glUniform1i(surfaceUniLoc, 1);
glActiveTexture(GL_TEXTURE0);
}
if (scaleProgram && paletteConvProgram)
{
// draw surface into framebuffer
glUseProgram(paletteConvProgram);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, surfaceTexId);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, paletteTexId);
glViewport(0, 0, ddraw->width, ddraw->height);
@ -550,20 +552,18 @@ DWORD WINAPI render_main(void)
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);
glViewport(
ddraw->render.viewport.x, ddraw->render.viewport.y,
ddraw->render.viewport.width, ddraw->render.viewport.height);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, 0);
// apply filter
glUseProgram(scaleProgram);
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, frameBufferTexId);
glUniform1i(textureUniLoc, 0);
static int frames = 1;
if (frameCountUniLoc != -1)
@ -589,11 +589,6 @@ DWORD WINAPI render_main(void)
glEnd();
}
if (scaleProgram && !paletteConvProgram)
glUseProgram(0);
glBindTexture(GL_TEXTURE_2D, 0);
SwapBuffers(ddraw->render.hDC);
if (maxfps > 0)