mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
switch to gdi on failure
This commit is contained in:
parent
6981b51973
commit
1d43b112c9
@ -27,7 +27,7 @@
|
|||||||
#define WM_AUTORENDERER WM_USER+111
|
#define WM_AUTORENDERER WM_USER+111
|
||||||
#define WM_WINEFULLSCREEN WM_USER+112
|
#define WM_WINEFULLSCREEN WM_USER+112
|
||||||
|
|
||||||
extern char OpenglVersion[];
|
extern BOOL ShowDriverWarning;
|
||||||
|
|
||||||
struct IDirectDrawImpl;
|
struct IDirectDrawImpl;
|
||||||
struct IDirectDrawImplVtbl;
|
struct IDirectDrawImplVtbl;
|
||||||
|
@ -77,3 +77,5 @@ extern PFNGLTEXBUFFERPROC glTexBuffer;
|
|||||||
|
|
||||||
extern BOOL OpenGL_GotVersion2;
|
extern BOOL OpenGL_GotVersion2;
|
||||||
extern BOOL OpenGL_GotVersion3;
|
extern BOOL OpenGL_GotVersion3;
|
||||||
|
|
||||||
|
extern char OpenGL_Version[];
|
||||||
|
10
src/opengl.c
10
src/opengl.c
@ -71,6 +71,8 @@ PFNGLTEXBUFFERPROC glTexBuffer = NULL;
|
|||||||
BOOL OpenGL_GotVersion2;
|
BOOL OpenGL_GotVersion2;
|
||||||
BOOL OpenGL_GotVersion3;
|
BOOL OpenGL_GotVersion3;
|
||||||
|
|
||||||
|
char OpenGL_Version[128];
|
||||||
|
|
||||||
void OpenGL_Init()
|
void OpenGL_Init()
|
||||||
{
|
{
|
||||||
// Program
|
// Program
|
||||||
@ -137,6 +139,14 @@ void OpenGL_Init()
|
|||||||
glTexBuffer = (PFNGLTEXBUFFERPROC)wglGetProcAddress("glTexBuffer");
|
glTexBuffer = (PFNGLTEXBUFFERPROC)wglGetProcAddress("glTexBuffer");
|
||||||
|
|
||||||
char *glversion = (char *)glGetString(GL_VERSION);
|
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;
|
OpenGL_GotVersion2 = glGetUniformLocation && glActiveTexture && glUniform1i;
|
||||||
|
|
||||||
|
13
src/render.c
13
src/render.c
@ -24,8 +24,6 @@
|
|||||||
|
|
||||||
#define TEXTURE_COUNT 4
|
#define TEXTURE_COUNT 4
|
||||||
|
|
||||||
char OpenglVersion[128];
|
|
||||||
|
|
||||||
static HGLRC OpenGLContext;
|
static HGLRC OpenGLContext;
|
||||||
static int MaxFPS;
|
static int MaxFPS;
|
||||||
static BOOL VSyncEnabled;
|
static BOOL VSyncEnabled;
|
||||||
@ -92,6 +90,7 @@ DWORD WINAPI render_main(void)
|
|||||||
|
|
||||||
if (!UseOpenGL)
|
if (!UseOpenGL)
|
||||||
{
|
{
|
||||||
|
ShowDriverWarning = TRUE;
|
||||||
ddraw->renderer = render_soft_main;
|
ddraw->renderer = render_soft_main;
|
||||||
render_soft_main();
|
render_soft_main();
|
||||||
}
|
}
|
||||||
@ -104,16 +103,6 @@ static HGLRC CreateContext(HDC hdc)
|
|||||||
HGLRC context = wglCreateContext(hdc);
|
HGLRC context = wglCreateContext(hdc);
|
||||||
BOOL madeCurrent = context && wglMakeCurrent(hdc, context);
|
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 || (ddraw->autorenderer && glGetError() != GL_NO_ERROR))
|
||||||
{
|
{
|
||||||
if (madeCurrent)
|
if (madeCurrent)
|
||||||
|
@ -33,6 +33,8 @@ IDirect3DTexture9 *PaletteTex;
|
|||||||
IDirect3DPixelShader9 *PixelShader;
|
IDirect3DPixelShader9 *PixelShader;
|
||||||
D3DPRESENT_PARAMETERS D3dpp;
|
D3DPRESENT_PARAMETERS D3dpp;
|
||||||
|
|
||||||
|
DWORD WINAPI render_soft_main(void);
|
||||||
|
|
||||||
static void InitDirect3D(BOOL reset)
|
static void InitDirect3D(BOOL reset)
|
||||||
{
|
{
|
||||||
if (reset)
|
if (reset)
|
||||||
@ -61,8 +63,8 @@ static void InitDirect3D(BOOL reset)
|
|||||||
float vpX = (float)ddraw->render.viewport.x;
|
float vpX = (float)ddraw->render.viewport.x;
|
||||||
float vpY = (float)ddraw->render.viewport.y;
|
float vpY = (float)ddraw->render.viewport.y;
|
||||||
|
|
||||||
float vpW = (float)(ddraw->render.viewport.width + vpX);
|
float vpW = (float)(ddraw->render.viewport.width + ddraw->render.viewport.x);
|
||||||
float vpH = (float)(ddraw->render.viewport.height + vpY);
|
float vpH = (float)(ddraw->render.viewport.height + ddraw->render.viewport.y);
|
||||||
|
|
||||||
typedef struct CUSTOMVERTEX { float x, y, z, rhw, u, v; } CUSTOMVERTEX;
|
typedef struct CUSTOMVERTEX { float x, y, z, rhw, u, v; } CUSTOMVERTEX;
|
||||||
CUSTOMVERTEX vertices[] =
|
CUSTOMVERTEX vertices[] =
|
||||||
@ -155,11 +157,12 @@ DWORD WINAPI render_d3d9_main(void)
|
|||||||
&D3dpp,
|
&D3dpp,
|
||||||
&D3ddev);
|
&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
|
#if _DEBUG
|
||||||
static DWORD tick_fps = 0;
|
static DWORD tick_fps = 0;
|
||||||
@ -281,5 +284,14 @@ DWORD WINAPI render_d3d9_main(void)
|
|||||||
if (hD3D9)
|
if (hD3D9)
|
||||||
FreeLibrary(hD3D9);
|
FreeLibrary(hD3D9);
|
||||||
|
|
||||||
|
if (!D3ddev)
|
||||||
|
{
|
||||||
|
ShowDriverWarning = TRUE;
|
||||||
|
ddraw->renderer = render_soft_main;
|
||||||
|
render_soft_main();
|
||||||
|
}
|
||||||
|
|
||||||
|
D3ddev = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,9 @@
|
|||||||
|
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "surface.h"
|
#include "surface.h"
|
||||||
|
#include "opengl.h"
|
||||||
|
|
||||||
|
BOOL ShowDriverWarning;
|
||||||
|
|
||||||
static unsigned char getPixel(int x, int y)
|
static unsigned char getPixel(int x, int y)
|
||||||
{
|
{
|
||||||
@ -55,7 +57,7 @@ DWORD WINAPI render_soft_main(void)
|
|||||||
{
|
{
|
||||||
DWORD warningEndTick = timeGetTime() + (15 * 1000);
|
DWORD warningEndTick = timeGetTime() + (15 * 1000);
|
||||||
char warningText[512] = { 0 };
|
char warningText[512] = { 0 };
|
||||||
if (OpenglVersion[0])
|
if (ShowDriverWarning)
|
||||||
{
|
{
|
||||||
if (!ddraw->windowed)
|
if (!ddraw->windowed)
|
||||||
PostMessage(ddraw->hWnd, WM_AUTORENDERER, 0, 0);
|
PostMessage(ddraw->hWnd, WM_AUTORENDERER, 0, 0);
|
||||||
@ -63,7 +65,7 @@ DWORD WINAPI render_soft_main(void)
|
|||||||
_snprintf(
|
_snprintf(
|
||||||
warningText, sizeof(warningText),
|
warningText, sizeof(warningText),
|
||||||
"-WARNING- Using slow software rendering, please update your graphics card driver (%s)",
|
"-WARNING- Using slow software rendering, please update your graphics card driver (%s)",
|
||||||
strlen(OpenglVersion) > 10 ? "" : OpenglVersion);
|
strlen(OpenGL_Version) > 10 ? "" : OpenGL_Version);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
Sleep(500);
|
Sleep(500);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user