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

make opengl compatible with older versions than 2.0 (for 16bit games only)

This commit is contained in:
FunkyFr3sh 2018-11-15 06:16:09 +01:00
parent ec11947593
commit b04dc01104
4 changed files with 13 additions and 8 deletions

View File

@ -50,6 +50,7 @@ extern PFNGLGETERRORPROC glGetError;
extern PFNGLGETSTRINGPROC glGetString; extern PFNGLGETSTRINGPROC glGetString;
extern PFNGLGETTEXIMAGEPROC glGetTexImage; extern PFNGLGETTEXIMAGEPROC glGetTexImage;
extern PFNGLPIXELSTOREIPROC glPixelStorei; extern PFNGLPIXELSTOREIPROC glPixelStorei;
extern PFNGLENABLEPROC glEnable;
extern PFNGLCREATEPROGRAMPROC glCreateProgram; extern PFNGLCREATEPROGRAMPROC glCreateProgram;
extern PFNGLDELETEPROGRAMPROC glDeleteProgram; extern PFNGLDELETEPROGRAMPROC glDeleteProgram;

View File

@ -19,6 +19,7 @@ PFNGLGETERRORPROC glGetError;
PFNGLGETSTRINGPROC glGetString; PFNGLGETSTRINGPROC glGetString;
PFNGLGETTEXIMAGEPROC glGetTexImage; PFNGLGETTEXIMAGEPROC glGetTexImage;
PFNGLPIXELSTOREIPROC glPixelStorei; PFNGLPIXELSTOREIPROC glPixelStorei;
PFNGLENABLEPROC glEnable;
PFNGLBEGINPROC glBegin; PFNGLBEGINPROC glBegin;
PFNGLENDPROC glEnd; PFNGLENDPROC glEnd;
@ -121,6 +122,7 @@ BOOL OpenGL_LoadDll()
glGetString = (PFNGLGETSTRINGPROC)GetProcAddress(OpenGL_hModule, "glGetString"); glGetString = (PFNGLGETSTRINGPROC)GetProcAddress(OpenGL_hModule, "glGetString");
glGetTexImage = (PFNGLGETTEXIMAGEPROC)GetProcAddress(OpenGL_hModule, "glGetTexImage"); glGetTexImage = (PFNGLGETTEXIMAGEPROC)GetProcAddress(OpenGL_hModule, "glGetTexImage");
glPixelStorei = (PFNGLPIXELSTOREIPROC)GetProcAddress(OpenGL_hModule, "glPixelStorei"); glPixelStorei = (PFNGLPIXELSTOREIPROC)GetProcAddress(OpenGL_hModule, "glPixelStorei");
glEnable = (PFNGLENABLEPROC)GetProcAddress(OpenGL_hModule, "glEnable");
glBegin = (PFNGLBEGINPROC)GetProcAddress(OpenGL_hModule, "glBegin"); glBegin = (PFNGLBEGINPROC)GetProcAddress(OpenGL_hModule, "glBegin");
glEnd = (PFNGLENDPROC)GetProcAddress(OpenGL_hModule, "glEnd"); glEnd = (PFNGLENDPROC)GetProcAddress(OpenGL_hModule, "glEnd");
@ -131,7 +133,7 @@ BOOL OpenGL_LoadDll()
return xwglCreateContext && xwglDeleteContext && xwglGetProcAddress && xwglMakeCurrent && glViewport && return xwglCreateContext && xwglDeleteContext && xwglGetProcAddress && xwglMakeCurrent && glViewport &&
glBindTexture && glGenTextures && glTexParameteri && glDeleteTextures && glTexImage2D && glBindTexture && glGenTextures && glTexParameteri && glDeleteTextures && glTexImage2D &&
glDrawElements && glTexSubImage2D && glGetError && glGetString && glGetTexImage && glPixelStorei && glDrawElements && glTexSubImage2D && glGetError && glGetString && glGetTexImage && glPixelStorei &&
glBegin && glEnd && glTexCoord2f && glVertex2f; glEnable && glBegin && glEnd && glTexCoord2f && glVertex2f;
} }
void OpenGL_Init() void OpenGL_Init()

View File

@ -78,7 +78,7 @@ DWORD WINAPI render_main(void)
GotError = GotError || !TextureUploadTest(); GotError = GotError || !TextureUploadTest();
GotError = GotError || !ShaderTest(); GotError = GotError || !ShaderTest();
GotError = GotError || glGetError() != GL_NO_ERROR; GotError = GotError || glGetError() != GL_NO_ERROR;
UseOpenGL = MainProgram && !GotError; UseOpenGL = (MainProgram || ddraw->bpp == 16) && !GotError;
Render(); Render();
@ -552,6 +552,8 @@ static void Render()
if (MainProgram) if (MainProgram)
glUseProgram(MainProgram); glUseProgram(MainProgram);
else if (ddraw->bpp == 16)
glEnable(GL_TEXTURE_2D);
while (UseOpenGL && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED) while (UseOpenGL && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED)
{ {
@ -689,9 +691,9 @@ static void Render()
{ {
glActiveTexture(GL_TEXTURE1); glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, PaletteTexIds[palIndex]); glBindTexture(GL_TEXTURE_2D, PaletteTexIds[palIndex]);
}
glActiveTexture(GL_TEXTURE0); glActiveTexture(GL_TEXTURE0);
}
if (ScaleProgram && MainProgram) if (ScaleProgram && MainProgram)
{ {

View File

@ -230,10 +230,10 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR
if (dst_w == src_w && dst_h == src_h) if (dst_w == src_w && dst_h == src_h)
{ {
unsigned char *src = unsigned char *src =
(unsigned char *)Source->surface + ((src_x + (Source->width * src_y)) * Source->lXPitch); (unsigned char *)Source->surface + (src_x * Source->lXPitch) + (Source->lPitch * src_y);
unsigned char *dst = unsigned char *dst =
(unsigned char *)This->surface + ((dst_x + (This->width * dst_y)) * This->lXPitch); (unsigned char *)This->surface + (dst_x * This->lXPitch) + (This->lPitch * dst_y);
int i; int i;
for (i = 0; i < dst_h; i++) for (i = 0; i < dst_h; i++)
@ -375,10 +375,10 @@ HRESULT __stdcall ddraw_surface_BltFast(IDirectDrawSurfaceImpl *This, DWORD dst_
else else
{ {
unsigned char *src = unsigned char *src =
(unsigned char *)Source->surface + ((src_x + (Source->width * src_y)) * Source->lXPitch); (unsigned char *)Source->surface + (src_x * Source->lXPitch) + (Source->lPitch * src_y);
unsigned char *dst = unsigned char *dst =
(unsigned char *)This->surface + ((dst_x + (This->width * dst_y)) * This->lXPitch); (unsigned char *)This->surface + (dst_x * This->lXPitch) + (This->lPitch * dst_y);
int i; int i;
for (i = 0; i < dst_h; i++) for (i = 0; i < dst_h; i++)