1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +01:00

try to use GL_LUMINANCE first for better performance

This commit is contained in:
FunkyFr3sh 2018-05-21 22:32:19 +02:00
parent 6d57bbbfcb
commit d8cee91ee8
2 changed files with 10 additions and 6 deletions

View File

@ -19,7 +19,7 @@ const GLchar *PaletteFragShader110Src =
"void main()\n" "void main()\n"
"{\n" "{\n"
" vec4 paletteIndex = texture2D(SurfaceTex, TexCoord0); \n" " vec4 paletteIndex = texture2D(SurfaceTex, TexCoord0); \n"
" vec4 outTexel = texture2D(PaletteTex, paletteIndex.xy); \n" " vec4 outTexel = texture2D(PaletteTex, vec2(paletteIndex.r, 0)); \n"
" gl_FragColor = outTexel;\n" " gl_FragColor = outTexel;\n"
"}\n"; "}\n";
@ -88,6 +88,6 @@ const GLchar *PaletteFragShaderSrc =
"void main()\n" "void main()\n"
"{\n" "{\n"
" vec4 paletteIndex = COMPAT_TEXTURE(SurfaceTex, TEX0.xy);\n" " vec4 paletteIndex = COMPAT_TEXTURE(SurfaceTex, TEX0.xy);\n"
" vec4 outTexel = COMPAT_TEXTURE(PaletteTex, paletteIndex.xy);\n" " vec4 outTexel = COMPAT_TEXTURE(PaletteTex, vec2(paletteIndex.r, 0));\n"
" FragColor = outTexel;\n" " FragColor = outTexel;\n"
"}\n"; "}\n";

View File

@ -107,6 +107,7 @@ DWORD WINAPI render_main(void)
scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader); scaleProgram = OpenGL_BuildProgramFromFile(ddraw->shader);
// primary surface texture // primary surface texture
GLenum surfaceFormat = GL_LUMINANCE;
GLuint surfaceTexId = 0; GLuint surfaceTexId = 0;
glGenTextures(1, &surfaceTexId); glGenTextures(1, &surfaceTexId);
glBindTexture(GL_TEXTURE_2D, surfaceTexId); glBindTexture(GL_TEXTURE_2D, surfaceTexId);
@ -117,13 +118,16 @@ DWORD WINAPI render_main(void)
if (paletteConvProgram) if (paletteConvProgram)
{ {
glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, tex_width, tex_height, 0, GL_RED, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE8, tex_width, tex_height, 0, surfaceFormat = GL_LUMINANCE, GL_UNSIGNED_BYTE, 0);
if (glGetError() != GL_NO_ERROR) if (glGetError() != GL_NO_ERROR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, tex_width, tex_height, 0, GL_RED, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, tex_width, tex_height, 0, surfaceFormat = GL_RED, GL_UNSIGNED_BYTE, 0);
if (glGetError() != GL_NO_ERROR) if (glGetError() != GL_NO_ERROR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tex_width, tex_height, 0, GL_RED, GL_UNSIGNED_BYTE, 0); glTexImage2D(GL_TEXTURE_2D, 0, GL_RED, tex_width, tex_height, 0, surfaceFormat = GL_RED, GL_UNSIGNED_BYTE, 0);
if (glGetError() != GL_NO_ERROR)
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tex_width, tex_height, 0, surfaceFormat = GL_RED, GL_UNSIGNED_BYTE, 0);
} }
else else
{ {
@ -450,7 +454,7 @@ DWORD WINAPI render_main(void)
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 1, GL_RGBA, GL_UNSIGNED_BYTE, ddraw->primary->palette->data_bgr); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 1, GL_RGBA, GL_UNSIGNED_BYTE, ddraw->primary->palette->data_bgr);
glBindTexture(GL_TEXTURE_2D, surfaceTexId); glBindTexture(GL_TEXTURE_2D, surfaceTexId);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ddraw->width, ddraw->height, GL_RED, GL_UNSIGNED_BYTE, ddraw->primary->surface); glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, ddraw->width, ddraw->height, surfaceFormat, GL_UNSIGNED_BYTE, ddraw->primary->surface);
} }
else else
{ {