1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

switch to gdi on failure

This commit is contained in:
FunkyFr3sh 2018-09-30 01:02:48 +02:00
parent 6981b51973
commit 1d43b112c9
6 changed files with 34 additions and 19 deletions

View File

@ -27,7 +27,7 @@
#define WM_AUTORENDERER WM_USER+111
#define WM_WINEFULLSCREEN WM_USER+112
extern char OpenglVersion[];
extern BOOL ShowDriverWarning;
struct IDirectDrawImpl;
struct IDirectDrawImplVtbl;

View File

@ -77,3 +77,5 @@ extern PFNGLTEXBUFFERPROC glTexBuffer;
extern BOOL OpenGL_GotVersion2;
extern BOOL OpenGL_GotVersion3;
extern char OpenGL_Version[];

View File

@ -71,6 +71,8 @@ PFNGLTEXBUFFERPROC glTexBuffer = NULL;
BOOL OpenGL_GotVersion2;
BOOL OpenGL_GotVersion3;
char OpenGL_Version[128];
void OpenGL_Init()
{
// Program
@ -137,6 +139,14 @@ void OpenGL_Init()
glTexBuffer = (PFNGLTEXBUFFERPROC)wglGetProcAddress("glTexBuffer");
char *glversion = (char *)glGetString(GL_VERSION);
if (glversion)
{
strncpy(OpenGL_Version, glversion, sizeof(OpenGL_Version));
const char deli[2] = " ";
strtok(OpenGL_Version, deli);
}
else
OpenGL_Version[0] = '0';
OpenGL_GotVersion2 = glGetUniformLocation && glActiveTexture && glUniform1i;

View File

@ -24,8 +24,6 @@
#define TEXTURE_COUNT 4
char OpenglVersion[128];
static HGLRC OpenGLContext;
static int MaxFPS;
static BOOL VSyncEnabled;
@ -92,6 +90,7 @@ DWORD WINAPI render_main(void)
if (!UseOpenGL)
{
ShowDriverWarning = TRUE;
ddraw->renderer = render_soft_main;
render_soft_main();
}
@ -104,16 +103,6 @@ static HGLRC CreateContext(HDC hdc)
HGLRC context = wglCreateContext(hdc);
BOOL madeCurrent = context && wglMakeCurrent(hdc, context);
char *glversion = (char *)glGetString(GL_VERSION);
if (glversion)
{
strncpy(OpenglVersion, glversion, sizeof(OpenglVersion));
const char deli[2] = " ";
strtok(OpenglVersion, deli);
}
else
OpenglVersion[0] = '0';
if (!madeCurrent || (ddraw->autorenderer && glGetError() != GL_NO_ERROR))
{
if (madeCurrent)

View File

@ -33,6 +33,8 @@ IDirect3DTexture9 *PaletteTex;
IDirect3DPixelShader9 *PixelShader;
D3DPRESENT_PARAMETERS D3dpp;
DWORD WINAPI render_soft_main(void);
static void InitDirect3D(BOOL reset)
{
if (reset)
@ -61,8 +63,8 @@ static void InitDirect3D(BOOL reset)
float vpX = (float)ddraw->render.viewport.x;
float vpY = (float)ddraw->render.viewport.y;
float vpW = (float)(ddraw->render.viewport.width + vpX);
float vpH = (float)(ddraw->render.viewport.height + vpY);
float vpW = (float)(ddraw->render.viewport.width + ddraw->render.viewport.x);
float vpH = (float)(ddraw->render.viewport.height + ddraw->render.viewport.y);
typedef struct CUSTOMVERTEX { float x, y, z, rhw, u, v; } CUSTOMVERTEX;
CUSTOMVERTEX vertices[] =
@ -155,11 +157,12 @@ DWORD WINAPI render_d3d9_main(void)
&D3dpp,
&D3ddev);
InitDirect3D(FALSE);
if (D3ddev)
InitDirect3D(FALSE);
}
}
while (D3d && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED)
while (D3ddev && ddraw->render.run && WaitForSingleObject(ddraw->render.sem, INFINITE) != WAIT_FAILED)
{
#if _DEBUG
static DWORD tick_fps = 0;
@ -281,5 +284,14 @@ DWORD WINAPI render_d3d9_main(void)
if (hD3D9)
FreeLibrary(hD3D9);
if (!D3ddev)
{
ShowDriverWarning = TRUE;
ddraw->renderer = render_soft_main;
render_soft_main();
}
D3ddev = NULL;
return 0;
}

View File

@ -19,7 +19,9 @@
#include "main.h"
#include "surface.h"
#include "opengl.h"
BOOL ShowDriverWarning;
static unsigned char getPixel(int x, int y)
{
@ -55,7 +57,7 @@ DWORD WINAPI render_soft_main(void)
{
DWORD warningEndTick = timeGetTime() + (15 * 1000);
char warningText[512] = { 0 };
if (OpenglVersion[0])
if (ShowDriverWarning)
{
if (!ddraw->windowed)
PostMessage(ddraw->hWnd, WM_AUTORENDERER, 0, 0);
@ -63,7 +65,7 @@ DWORD WINAPI render_soft_main(void)
_snprintf(
warningText, sizeof(warningText),
"-WARNING- Using slow software rendering, please update your graphics card driver (%s)",
strlen(OpenglVersion) > 10 ? "" : OpenglVersion);
strlen(OpenGL_Version) > 10 ? "" : OpenGL_Version);
}
else
Sleep(500);