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:
parent
6981b51973
commit
1d43b112c9
@ -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;
|
||||
|
@ -77,3 +77,5 @@ extern PFNGLTEXBUFFERPROC glTexBuffer;
|
||||
|
||||
extern BOOL OpenGL_GotVersion2;
|
||||
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_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;
|
||||
|
||||
|
13
src/render.c
13
src/render.c
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user