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