mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
Add support for cnc-plugin
This commit is contained in:
parent
c70e0e61d8
commit
2b47947742
2
Makefile
2
Makefile
@ -7,7 +7,7 @@ REV=$(shell sh -c 'git rev-parse --short @{0}')
|
|||||||
all:
|
all:
|
||||||
sed 's/__REV__/$(REV)/g' ddraw.rc.in > ddraw.rc
|
sed 's/__REV__/$(REV)/g' ddraw.rc.in > ddraw.rc
|
||||||
$(WINDRES) -J rc ddraw.rc ddraw.rc.o
|
$(WINDRES) -J rc ddraw.rc ddraw.rc.o
|
||||||
$(CC) $(CFLAGS) -shared -o ddraw.dll main.c mouse.c palette.c surface.c clipper.c render.c render_soft.c screenshot.c ddraw.def ddraw.rc.o $(LIBS)
|
$(CC) $(CFLAGS) -shared -o ddraw.dll main.c mouse.c palette.c surface.c clipper.c render.c render_soft.c render_dummy.c screenshot.c ddraw.def ddraw.rc.o $(LIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f ddraw.dll
|
rm -f ddraw.dll
|
||||||
|
62
main.c
62
main.c
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "ddraw.h"
|
#include "ddraw.h"
|
||||||
@ -39,6 +40,7 @@ IDirectDrawImpl *ddraw = NULL;
|
|||||||
|
|
||||||
DWORD WINAPI render_main(void);
|
DWORD WINAPI render_main(void);
|
||||||
DWORD WINAPI render_soft_main(void);
|
DWORD WINAPI render_soft_main(void);
|
||||||
|
DWORD WINAPI render_dummy_main(void);
|
||||||
|
|
||||||
HRESULT __stdcall ddraw_Compact(IDirectDrawImpl *This)
|
HRESULT __stdcall ddraw_Compact(IDirectDrawImpl *This)
|
||||||
{
|
{
|
||||||
@ -177,8 +179,6 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
|
|||||||
{
|
{
|
||||||
printf("DirectDraw::SetDisplayMode(This=%p, width=%d, height=%d, bpp=%d)\n", This, (unsigned int)width, (unsigned int)height, (unsigned int)bpp);
|
printf("DirectDraw::SetDisplayMode(This=%p, width=%d, height=%d, bpp=%d)\n", This, (unsigned int)width, (unsigned int)height, (unsigned int)bpp);
|
||||||
|
|
||||||
This->render.run = TRUE;
|
|
||||||
|
|
||||||
This->mode.dmSize = sizeof(DEVMODE);
|
This->mode.dmSize = sizeof(DEVMODE);
|
||||||
This->mode.dmDriverExtra = 0;
|
This->mode.dmDriverExtra = 0;
|
||||||
|
|
||||||
@ -206,6 +206,13 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
|
|||||||
This->render.height = This->height;
|
This->render.height = This->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (This->renderer == render_dummy_main)
|
||||||
|
{
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
This->render.run = TRUE;
|
||||||
|
|
||||||
mouse_unlock();
|
mouse_unlock();
|
||||||
|
|
||||||
if(This->windowed)
|
if(This->windowed)
|
||||||
@ -263,6 +270,42 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
|
|||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* minimal window proc for dummy renderer as everything is emulated */
|
||||||
|
LRESULT CALLBACK dummy_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
{
|
||||||
|
switch(uMsg)
|
||||||
|
{
|
||||||
|
case WM_USER:
|
||||||
|
ddraw->render.width = LOWORD(wParam);
|
||||||
|
ddraw->render.height = HIWORD(wParam);
|
||||||
|
ddraw->render.hDC = GetDC((HWND)lParam);
|
||||||
|
if (!ddraw->render.thread)
|
||||||
|
{
|
||||||
|
ddraw->render.run = TRUE;
|
||||||
|
ddraw->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ddraw->renderer, NULL, 0, NULL);
|
||||||
|
}
|
||||||
|
uMsg = WM_ACTIVATEAPP;
|
||||||
|
wParam = TRUE;
|
||||||
|
break;
|
||||||
|
case WM_SIZE:
|
||||||
|
case WM_NCACTIVATE:
|
||||||
|
case WM_ACTIVATEAPP:
|
||||||
|
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
|
case WM_MOUSEMOVE:
|
||||||
|
case WM_NCMOUSEMOVE:
|
||||||
|
ddraw->cursor.x = GET_X_LPARAM(lParam);
|
||||||
|
ddraw->cursor.y = GET_Y_LPARAM(lParam);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ddraw->WndProc)
|
||||||
|
{
|
||||||
|
return ddraw->WndProc(hWnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
|
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
RECT rc = { 0, 0, ddraw->render.width, ddraw->render.height };
|
RECT rc = { 0, 0, ddraw->render.width, ddraw->render.height };
|
||||||
@ -401,6 +444,14 @@ HRESULT __stdcall ddraw_SetCooperativeLevel(IDirectDrawImpl *This, HWND hWnd, DW
|
|||||||
mouse_init(hWnd);
|
mouse_init(hWnd);
|
||||||
|
|
||||||
This->WndProc = (LRESULT CALLBACK (*)(HWND, UINT, WPARAM, LPARAM))GetWindowLong(This->hWnd, GWL_WNDPROC);
|
This->WndProc = (LRESULT CALLBACK (*)(HWND, UINT, WPARAM, LPARAM))GetWindowLong(This->hWnd, GWL_WNDPROC);
|
||||||
|
|
||||||
|
if (This->renderer == render_dummy_main)
|
||||||
|
{
|
||||||
|
SetWindowLong(This->hWnd, GWL_WNDPROC, (LONG)dummy_WndProc);
|
||||||
|
ShowWindow(This->hWnd, SW_HIDE);
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
if(!This->devmode)
|
if(!This->devmode)
|
||||||
{
|
{
|
||||||
SetWindowLong(This->hWnd, GWL_WNDPROC, (LONG)WndProc);
|
SetWindowLong(This->hWnd, GWL_WNDPROC, (LONG)WndProc);
|
||||||
@ -749,7 +800,12 @@ HRESULT WINAPI DirectDrawCreate(GUID FAR* lpGUID, LPDIRECTDRAW FAR* lplpDD, IUnk
|
|||||||
}
|
}
|
||||||
|
|
||||||
GetPrivateProfileStringA("ddraw", "renderer", "opengl", tmp, sizeof(tmp), ini_path);
|
GetPrivateProfileStringA("ddraw", "renderer", "opengl", tmp, sizeof(tmp), ini_path);
|
||||||
if(tolower(tmp[0]) == 's' || tolower(tmp[0]) == 'g')
|
if(tolower(tmp[0]) == 'd' || tolower(tmp[0]) == 'd')
|
||||||
|
{
|
||||||
|
printf("DirectDrawCreate: Using dummy renderer\n");
|
||||||
|
This->renderer = render_dummy_main;
|
||||||
|
}
|
||||||
|
else if(tolower(tmp[0]) == 's' || tolower(tmp[0]) == 'g')
|
||||||
{
|
{
|
||||||
printf("DirectDrawCreate: Using software renderer\n");
|
printf("DirectDrawCreate: Using software renderer\n");
|
||||||
This->renderer = render_soft_main;
|
This->renderer = render_soft_main;
|
||||||
|
13
palette.c
13
palette.c
@ -36,13 +36,10 @@ HRESULT __stdcall ddraw_palette_SetEntries(IDirectDrawPaletteImpl *This, DWORD d
|
|||||||
for(i=0;i<256;i++)
|
for(i=0;i<256;i++)
|
||||||
{
|
{
|
||||||
This->data_bgr[i] = (lpEntries[i].peBlue<<16)|(lpEntries[i].peGreen<<8)|lpEntries[i].peRed;
|
This->data_bgr[i] = (lpEntries[i].peBlue<<16)|(lpEntries[i].peGreen<<8)|lpEntries[i].peRed;
|
||||||
if (This->data_rgb)
|
This->data_rgb[i].rgbRed = lpEntries[i].peRed;
|
||||||
{
|
This->data_rgb[i].rgbGreen = lpEntries[i].peGreen;
|
||||||
This->data_rgb[i].rgbRed = lpEntries[i].peRed;
|
This->data_rgb[i].rgbBlue = lpEntries[i].peBlue;
|
||||||
This->data_rgb[i].rgbGreen = lpEntries[i].peGreen;
|
This->data_rgb[i].rgbReserved = 0;
|
||||||
This->data_rgb[i].rgbBlue = lpEntries[i].peBlue;
|
|
||||||
This->data_rgb[i].rgbReserved = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(ddraw->primary && !(ddraw->primary->flags & DDSD_BACKBUFFERCOUNT) && ddraw->render.run)
|
if(ddraw->primary && !(ddraw->primary->flags & DDSD_BACKBUFFERCOUNT) && ddraw->render.run)
|
||||||
@ -117,8 +114,6 @@ HRESULT __stdcall ddraw_CreatePalette(IDirectDrawImpl *This, DWORD dwFlags, LPPA
|
|||||||
printf(" Palette = %p\n", Palette);
|
printf(" Palette = %p\n", Palette);
|
||||||
*lpDDPalette = (LPDIRECTDRAWPALETTE)Palette;
|
*lpDDPalette = (LPDIRECTDRAWPALETTE)Palette;
|
||||||
|
|
||||||
Palette->data_rgb = NULL;
|
|
||||||
|
|
||||||
ddraw_palette_SetEntries(Palette, dwFlags, 0, 256, lpDDColorArray);
|
ddraw_palette_SetEntries(Palette, dwFlags, 0, 256, lpDDColorArray);
|
||||||
|
|
||||||
ddraw_palette_AddRef(Palette);
|
ddraw_palette_AddRef(Palette);
|
||||||
|
@ -31,7 +31,7 @@ typedef struct IDirectDrawPaletteImpl
|
|||||||
ULONG Ref;
|
ULONG Ref;
|
||||||
|
|
||||||
int data_bgr[256];
|
int data_bgr[256];
|
||||||
RGBQUAD *data_rgb;
|
RGBQUAD data_rgb[256];
|
||||||
|
|
||||||
} IDirectDrawPaletteImpl;
|
} IDirectDrawPaletteImpl;
|
||||||
|
|
||||||
|
@ -77,9 +77,9 @@ DWORD WINAPI render_soft_main(void)
|
|||||||
|
|
||||||
if (ddraw->primary && (ddraw->primary->palette || ddraw->bpp == 16))
|
if (ddraw->primary && (ddraw->primary->palette || ddraw->bpp == 16))
|
||||||
{
|
{
|
||||||
if (ddraw->primary->palette && ddraw->primary->palette->data_rgb == NULL)
|
if (ddraw->primary->palette)
|
||||||
{
|
{
|
||||||
ddraw->primary->palette->data_rgb = &bmi->bmiColors[0];
|
memcpy(bmi->bmiColors, ddraw->primary->palette->data_rgb, sizeof(RGBQUAD) * 256);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
|
if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user