remove duplicate shaders
This commit is contained in:
parent
3716807d3d
commit
f85ffee65a
4 changed files with 44 additions and 246 deletions
|
@ -247,12 +247,33 @@ BOOL oglu_ext_exists(char* ext, HDC hdc)
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
GLuint oglu_build_program(const GLchar* vert_source, const GLchar* frag_source)
|
||||
GLuint oglu_build_program(GLchar* vert_source, GLchar* frag_source, BOOL core_profile)
|
||||
{
|
||||
if (!glCreateShader || !glShaderSource || !glCompileShader || !glCreateProgram ||
|
||||
!glAttachShader || !glLinkProgram || !glUseProgram || !glDetachShader)
|
||||
!glAttachShader || !glLinkProgram || !glUseProgram || !glDetachShader ||
|
||||
!vert_source || !frag_source)
|
||||
return 0;
|
||||
|
||||
char* version_start = strstr(vert_source, "#version");
|
||||
if (version_start && core_profile)
|
||||
{
|
||||
if (_strnicmp(version_start, "#version 130", 12) == 0 ||
|
||||
_strnicmp(version_start, "#version 140", 12) == 0)
|
||||
{
|
||||
memcpy(version_start, "#version 150", 12);
|
||||
}
|
||||
}
|
||||
|
||||
version_start = strstr(frag_source, "#version");
|
||||
if (version_start && core_profile)
|
||||
{
|
||||
if (_strnicmp(version_start, "#version 130", 12) == 0 ||
|
||||
_strnicmp(version_start, "#version 140", 12) == 0)
|
||||
{
|
||||
memcpy(version_start, "#version 150", 12);
|
||||
}
|
||||
}
|
||||
|
||||
GLuint vert_shader = glCreateShader(GL_VERTEX_SHADER);
|
||||
GLuint frag_shader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
|
||||
|
@ -401,7 +422,7 @@ GLuint oglu_build_program_from_file(const char* file_path, BOOL core_profile)
|
|||
strcat(vert_source, version + strlen(version) + 1);
|
||||
strcat(frag_source, version + strlen(version) + 1);
|
||||
|
||||
program = oglu_build_program(vert_source, frag_source);
|
||||
program = oglu_build_program(vert_source, frag_source, core_profile);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -412,7 +433,7 @@ GLuint oglu_build_program_from_file(const char* file_path, BOOL core_profile)
|
|||
strcat(vert_source, source);
|
||||
strcat(frag_source, source);
|
||||
|
||||
program = oglu_build_program(vert_source, frag_source);
|
||||
program = oglu_build_program(vert_source, frag_source, core_profile);
|
||||
}
|
||||
|
||||
free(vert_source);
|
||||
|
|
|
@ -133,25 +133,17 @@ static void ogl_build_programs()
|
|||
{
|
||||
g_ogl.main_program = g_ogl.scale_program = 0;
|
||||
|
||||
BOOL core_profile = wglCreateContextAttribsARB != NULL;
|
||||
|
||||
if (g_oglu_got_version3)
|
||||
{
|
||||
if (g_ddraw->bpp == 8)
|
||||
{
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, PALETTE_FRAG_SHADER);
|
||||
|
||||
if (!g_ogl.main_program)
|
||||
{
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_CORE, PALETTE_FRAG_SHADER_CORE);
|
||||
}
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, PALETTE_FRAG_SHADER, core_profile);
|
||||
}
|
||||
else if (g_ddraw->bpp == 16 || g_ddraw->bpp == 32)
|
||||
{
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, PASSTHROUGH_FRAG_SHADER);
|
||||
|
||||
if (!g_ogl.main_program)
|
||||
{
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_CORE, PASSTHROUGH_FRAG_SHADER_CORE);
|
||||
}
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER, PASSTHROUGH_FRAG_SHADER, core_profile);
|
||||
}
|
||||
|
||||
BOOL bilinear = FALSE;
|
||||
|
@ -179,7 +171,7 @@ static void ogl_build_programs()
|
|||
g_ddraw->render.viewport.width != g_ddraw->width ||
|
||||
g_ddraw->render.viewport.height != g_ddraw->height)
|
||||
{
|
||||
g_ogl.scale_program = oglu_build_program_from_file(shader_path, wglCreateContextAttribsARB != NULL);
|
||||
g_ogl.scale_program = oglu_build_program_from_file(shader_path, core_profile);
|
||||
|
||||
if (!g_ogl.scale_program &&
|
||||
(g_ddraw->render.viewport.width != g_ddraw->width ||
|
||||
|
@ -191,18 +183,8 @@ static void ogl_build_programs()
|
|||
_stricmp(g_ddraw->shader, "Nearest neighbor") == 0 ? PASSTHROUGH_FRAG_SHADER :
|
||||
_stricmp(g_ddraw->shader, "Bilinear") == 0 ? PASSTHROUGH_FRAG_SHADER :
|
||||
_stricmp(g_ddraw->shader, "Lanczos") == 0 ? LANCZOS2_FRAG_SHADER :
|
||||
CATMULL_ROM_FRAG_SHADER);
|
||||
|
||||
if (!g_ogl.scale_program)
|
||||
{
|
||||
g_ogl.scale_program =
|
||||
oglu_build_program(
|
||||
PASSTHROUGH_VERT_SHADER_CORE,
|
||||
_stricmp(g_ddraw->shader, "Nearest neighbor") == 0 ? PASSTHROUGH_FRAG_SHADER_CORE :
|
||||
_stricmp(g_ddraw->shader, "Bilinear") == 0 ? PASSTHROUGH_FRAG_SHADER_CORE :
|
||||
_stricmp(g_ddraw->shader, "Lanczos") == 0 ? LANCZOS2_FRAG_SHADER_CORE :
|
||||
CATMULL_ROM_FRAG_SHADER_CORE);
|
||||
}
|
||||
CATMULL_ROM_FRAG_SHADER,
|
||||
core_profile);
|
||||
|
||||
bilinear =
|
||||
_stricmp(g_ddraw->shader, "Nearest neighbor") != 0 &&
|
||||
|
@ -222,11 +204,11 @@ static void ogl_build_programs()
|
|||
{
|
||||
if (g_ddraw->bpp == 8)
|
||||
{
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_110, PALETTE_FRAG_SHADER_110);
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_110, PALETTE_FRAG_SHADER_110, FALSE);
|
||||
}
|
||||
else if (g_ddraw->bpp == 16 || g_ddraw->bpp == 32)
|
||||
{
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_110, PASSTHROUGH_FRAG_SHADER_110);
|
||||
g_ogl.main_program = oglu_build_program(PASSTHROUGH_VERT_SHADER_110, PASSTHROUGH_FRAG_SHADER_110, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue