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:
parent
ec11947593
commit
b04dc01104
@ -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;
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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++)
|
||||
|
Loading…
x
Reference in New Issue
Block a user