diff --git a/WatMakefile b/WatMakefile index 04a48b8..8873675 100644 --- a/WatMakefile +++ b/WatMakefile @@ -1,13 +1,13 @@ -CC = wcc386 -bt=nt -q +CC = wcc386 -bt=nt -q -fr LD = wlink option quiet -MW_CFLAGS = -bd -i=include -i=external/libz/include -d_MILSKO -d_MILSKO_BUILD -dUSE_GDI -dUSE_STB_IMAGE -dSTBI_NO_SIMD -dUSE_GDI_TEXT -dMW_OPENGL +MW_CFLAGS = -bd -i=include -i=external/libz/include -d_MILSKO -d_MILSKO_BUILD -dUSE_GDI -dUSE_STB_IMAGE -dSTBI_NO_SIMD -dUSE_GDI_TEXT -dMW_OPENGL -dMW_DIRECT3D9 MW_LDFLAGS = system nt_dll EXE_CFLAGS = -i=include EXE_LDFLAGS = system nt -all: src/Mw.dll examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe +all: src/Mw.dll examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/dxdemos/direct3d9.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe lib: src/Mw.dll -examples: examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe +examples: examples/basic/box.exe examples/basic/calculator.exe examples/basic/checkbox.exe examples/basic/clipboard.exe examples/basic/colorpicker.exe examples/basic/combobox.exe examples/basic/dnd.exe examples/basic/document.exe examples/basic/example.exe examples/basic/filechooser.exe examples/basic/image.exe examples/basic/listbox.exe examples/basic/messagebox.exe examples/basic/periodic.exe examples/basic/progressbar.exe examples/basic/radiobox.exe examples/basic/rotate.exe examples/basic/scrollbar.exe examples/basic/sevensegment.exe examples/basic/subwindow.exe examples/basic/tab.exe examples/basic/treeview.exe examples/basic/viewport.exe examples/dxdemos/direct3d9.exe examples/gldemos/boing.exe examples/gldemos/clock.exe examples/gldemos/cube.exe examples/gldemos/gears.exe examples/gldemos/triangle.exe examples/gldemos/tripaint.exe clean: .SYMBOLIC %erase external/libz/src/adler32.obj %erase external/libz/src/compress.obj @@ -131,6 +131,7 @@ clean: .SYMBOLIC %erase examples/basic/tab.obj %erase examples/basic/treeview.obj %erase examples/basic/viewport.obj + %erase examples/dxdemos/direct3d9.obj %erase examples/gldemos/boing.obj %erase examples/gldemos/clock.obj %erase examples/gldemos/cube.obj @@ -160,6 +161,7 @@ clean: .SYMBOLIC %erase examples/basic/tab.exe %erase examples/basic/treeview.exe %erase examples/basic/viewport.exe + %erase examples/dxdemos/direct3d9.exe %erase examples/gldemos/boing.exe %erase examples/gldemos/clock.exe %erase examples/gldemos/cube.exe @@ -305,6 +307,12 @@ examples/basic/viewport.exe: examples/basic/viewport.obj src/Mw.dll examples/basic/viewport.obj: examples/basic/viewport.c $(CC) $(EXE_CFLAGS) -fo=$@ examples/basic/viewport.c +examples/dxdemos/direct3d9.exe: examples/dxdemos/direct3d9.obj src/Mw.dll + $(LD) $(EXE_LDFLAGS) name $@ file examples/dxdemos/direct3d9.obj library clib3r.lib library src/Mw.lib + +examples/dxdemos/direct3d9.obj: examples/dxdemos/direct3d9.c + $(CC) $(EXE_CFLAGS) -fo=$@ examples/dxdemos/direct3d9.c + examples/gldemos/boing.exe: examples/gldemos/boing.obj src/Mw.dll $(LD) $(EXE_LDFLAGS) name $@ file examples/gldemos/boing.obj library clib3r.lib library src/Mw.lib library opengl32.lib library glu32.lib diff --git a/include/Mw/Widget/Direct3D9.h b/include/Mw/Widget/Direct3D9.h index b6904d4..5715c1b 100644 --- a/include/Mw/Widget/Direct3D9.h +++ b/include/Mw/Widget/Direct3D9.h @@ -25,6 +25,9 @@ #error D3D9 widget only avaliable for Win32 backends #undef MW_DIRECT3D9 #else +#ifdef __WATCOMC__ +#include +#endif #include #endif #endif diff --git a/src/widget/direct3d9.c b/src/widget/direct3d9.c index 4134786..9c151e7 100644 --- a/src/widget/direct3d9.c +++ b/src/widget/direct3d9.c @@ -4,13 +4,17 @@ #include typedef struct gdid3d9 { void* d3d9dll; - IDirect3D9* (*Direct3DCreate9)(UINT sdk_version); + IDirect3D9*(D3DAPI* Direct3DCreate9)(UINT sdk_version); LPDIRECT3D9 d3d; // the pointer to our Direct3D interface LPDIRECT3DDEVICE9 d3ddev; // the pointer to the device class } gdid3d9_t; +#ifndef D3D_SDK_VERSION +#define D3D_SDK_VERSION 32 +#endif + static int wcreate_d3d9(MwWidget handle) { gdid3d9_t* o = malloc(sizeof(gdid3d9_t)); HRESULT hr; diff --git a/tools/genmk.pl b/tools/genmk.pl index ee4822a..ba5d40d 100755 --- a/tools/genmk.pl +++ b/tools/genmk.pl @@ -59,6 +59,17 @@ DX9_FLAGS = EOF } +sub skip_d3d9 { + my $f = $_[0]; + my $type = $_[1]; + + if (($f =~ /\/dxdemos\//) and not($type eq "Watcom")) { + return 1; + } + + return 0; +} + sub generate { my ($output, $type) = @_; @@ -82,8 +93,8 @@ sub generate { my $lib = ""; my $c_dllout = ""; my $c_dllafter = ""; - my $d3d9_flags = ""; - my $d3d9_block = ""; + my $d3d9_flags = ""; + my $d3d9_block = ""; if ($type eq "Borland") { $cc = "bcc32 -c"; @@ -112,7 +123,7 @@ sub generate { $d3d9_block = d3d9_detect_block(); } elsif ($type eq "Watcom") { - $cc = "wcc386 -bt=nt -q"; + $cc = "wcc386 -bt=nt -q -fr"; $link = "wlink option quiet"; $out = "-fo="; $dllout = "name "; @@ -131,6 +142,8 @@ sub generate { $prefobj = "file "; $needlibs = "${lib}clib3r.lib"; $c_dllout = "option implib=src${dir}Mw.lib"; + + $d3d9_flags = "${def}MW_DIRECT3D9"; } open(OUT, ">", $output); @@ -154,6 +167,9 @@ sub generate { } print(OUT "all: src${dir}Mw.dll"); foreach my $f (@examples) { + if (skip_d3d9($f, $type)) { + next; + } $b = $f; $b =~ s/\.c$/.exe/; $b =~ s/\//$dir/g; @@ -163,6 +179,9 @@ sub generate { print(OUT "lib: src${dir}Mw.dll\n"); print(OUT "examples:"); foreach my $f (@examples) { + if (skip_d3d9($f, $type)) { + next; + } $b = $f; $b =~ s/\.c$/.exe/; $b =~ s/\//$dir/g; @@ -171,6 +190,9 @@ sub generate { print(OUT "\n"); print(OUT "clean: $symbolic\n"); foreach my $f (@cfiles) { + if (skip_d3d9($f, $type)) { + next; + } my $b = $f; $b =~ s/\.c$/.obj/; $b =~ s/\//$dir/g; @@ -182,12 +204,18 @@ sub generate { print(OUT " $del d3d9flags.mk\n"); } foreach my $f (@examples) { + if (skip_d3d9($f, $type)) { + next; + } my $b = $f; $b =~ s/\.c$/.obj/; $b =~ s/\//$dir/g; print(OUT " $del $b\n"); } foreach my $f (@examples) { + if (skip_d3d9($f, $type)) { + next; + } $b = $f; $b =~ s/\.c$/.exe/; $b =~ s/\//$dir/g; @@ -195,6 +223,9 @@ sub generate { } print(OUT "\n"); foreach my $f (@examples) { + if (skip_d3d9($f, $type)) { + next; + } my $b = $f; $b =~ s/\.c$/.exe/; $b =~ s/\//$dir/g; @@ -256,6 +287,7 @@ push(@cfiles, "src/backend/gdi.c"); scan_examples("examples/basic"); scan_examples("examples/gldemos"); +scan_examples("examples/dxdemos"); @examples = sort(@examples);