1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +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 PFNGLGETTEXIMAGEPROC glGetTexImage;
extern PFNGLPIXELSTOREIPROC glPixelStorei;
extern PFNGLENABLEPROC glEnable;
extern PFNGLCREATEPROGRAMPROC glCreateProgram;
extern PFNGLDELETEPROGRAMPROC glDeleteProgram;

View File

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

View File

@ -78,7 +78,7 @@ DWORD WINAPI render_main(void)
GotError = GotError || !TextureUploadTest();
GotError = GotError || !ShaderTest();
GotError = GotError || glGetError() != GL_NO_ERROR;
UseOpenGL = MainProgram && !GotError;
UseOpenGL = (MainProgram || ddraw->bpp == 16) && !GotError;
Render();
@ -552,6 +552,8 @@ static void Render()
if (MainProgram)
glUseProgram(MainProgram);
else if (ddraw->bpp == 16)
glEnable(GL_TEXTURE_2D);
while (UseOpenGL && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED)
{
@ -689,9 +691,9 @@ static void Render()
{
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, PaletteTexIds[palIndex]);
}
glActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE0);
}
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)
{
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 *)This->surface + ((dst_x + (This->width * dst_y)) * This->lXPitch);
(unsigned char *)This->surface + (dst_x * This->lXPitch) + (This->lPitch * dst_y);
int i;
for (i = 0; i < dst_h; i++)
@ -375,10 +375,10 @@ HRESULT __stdcall ddraw_surface_BltFast(IDirectDrawSurfaceImpl *This, DWORD dst_
else
{
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 *)This->surface + ((dst_x + (This->width * dst_y)) * This->lXPitch);
(unsigned char *)This->surface + (dst_x * This->lXPitch) + (This->lPitch * dst_y);
int i;
for (i = 0; i < dst_h; i++)