- beginning of implementation of Direct3D2 (DX 5.0) and associated classes
- some basic code for Direct3D and Direct3DExecuteBuffer (DX 3.0)
- added stretching to Blt function
diff --git a/graphics/d3dtexture.c b/graphics/d3dtexture.c
new file mode 100644
index 0000000..f79ba15
--- /dev/null
+++ b/graphics/d3dtexture.c
@@ -0,0 +1,200 @@
+/* Direct3D Texture
+ (c) 1998 Lionel ULMER
+
+ This files contains the implementation of interface Direct3DTexture2. */
+
+
+#include "config.h"
+#include "windows.h"
+#include "wintypes.h"
+#include "winerror.h"
+#include "interfaces.h"
+#include "heap.h"
+#include "ddraw.h"
+#include "d3d.h"
+#include "debug.h"
+
+#include "d3d_private.h"
+
+#ifdef HAVE_MESAGL
+
+static IDirect3DTexture2_VTable texture2_vtable;
+static IDirect3DTexture_VTable texture_vtable;
+
+/*******************************************************************************
+ * Texture2 Creation functions
+ */
+LPDIRECT3DTEXTURE2 d3dtexture2_create(LPDIRECTDRAWSURFACE3 surf)
+{
+ LPDIRECT3DTEXTURE2 mat;
+
+ mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DTexture2));
+ mat->ref = 1;
+ mat->lpvtbl = &texture2_vtable;
+ mat->surface = surf;
+
+ return mat;
+}
+
+/*******************************************************************************
+ * Texture Creation functions
+ */
+LPDIRECT3DTEXTURE d3dtexture_create(LPDIRECTDRAWSURFACE3 surf)
+{
+ LPDIRECT3DTEXTURE mat;
+
+ mat = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(IDirect3DTexture));
+ mat->ref = 1;
+ mat->lpvtbl = (IDirect3DTexture2_VTable*) &texture_vtable;
+ mat->surface = surf;
+
+ return mat;
+}
+
+
+/*******************************************************************************
+ * IDirect3DTexture2 methods
+ */
+
+static HRESULT WINAPI IDirect3DTexture2_QueryInterface(LPDIRECT3DTEXTURE2 this,
+ REFIID riid,
+ LPVOID* ppvObj)
+{
+ char xrefiid[50];
+
+ WINE_StringFromCLSID((LPCLSID)riid,xrefiid);
+ FIXME(ddraw, "(%p)->(%s,%p): stub\n", this, xrefiid,ppvObj);
+
+ return S_OK;
+}
+
+
+
+static ULONG WINAPI IDirect3DTexture2_AddRef(LPDIRECT3DTEXTURE2 this)
+{
+ TRACE(ddraw, "(%p)->()incrementing from %lu.\n", this, this->ref );
+
+ return ++(this->ref);
+}
+
+
+
+static ULONG WINAPI IDirect3DTexture2_Release(LPDIRECT3DTEXTURE2 this)
+{
+ FIXME( ddraw, "(%p)->() decrementing from %lu.\n", this, this->ref );
+
+ if (!--(this->ref)) {
+ HeapFree(GetProcessHeap(),0,this);
+ return 0;
+ }
+
+ return this->ref;
+}
+
+/*** IDirect3DTexture methods ***/
+static HRESULT WINAPI IDirect3DTexture_GetHandle(LPDIRECT3DTEXTURE this,
+ LPDIRECT3DDEVICE lpD3DDevice,
+ LPD3DTEXTUREHANDLE lpHandle)
+{
+ FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DDevice, lpHandle);
+
+ *lpHandle = (DWORD) this->surface;
+
+ return DD_OK;
+}
+
+static HRESULT WINAPI IDirect3DTexture_Initialize(LPDIRECT3DTEXTURE this,
+ LPDIRECT3DDEVICE lpD3DDevice,
+ LPDIRECTDRAWSURFACE lpSurface)
+{
+ TRACE(ddraw, "(%p)->(%p,%p)\n", this, lpD3DDevice, lpSurface);
+
+ return DDERR_ALREADYINITIALIZED;
+}
+
+static HRESULT WINAPI IDirect3DTexture_Unload(LPDIRECT3DTEXTURE this)
+{
+ FIXME(ddraw, "(%p)->(): stub\n", this);
+
+ return DD_OK;
+}
+
+/*** IDirect3DTexture2 methods ***/
+static HRESULT WINAPI IDirect3DTexture2_GetHandle(LPDIRECT3DTEXTURE2 this,
+ LPDIRECT3DDEVICE2 lpD3DDevice2,
+ LPD3DTEXTUREHANDLE lpHandle)
+{
+ FIXME(ddraw, "(%p)->(%p,%p): stub\n", this, lpD3DDevice2, lpHandle);
+
+ *lpHandle = (DWORD) this->surface; /* lpD3DDevice2->store_texture(this); */
+
+ return DD_OK;
+}
+
+/* Common methods */
+static HRESULT WINAPI IDirect3DTexture2_PaletteChanged(LPDIRECT3DTEXTURE2 this,
+ DWORD dwStart,
+ DWORD dwCount)
+{
+ FIXME(ddraw, "(%p)->(%8ld,%8ld): stub\n", this, dwStart, dwCount);
+
+ return DD_OK;
+}
+
+static HRESULT WINAPI IDirect3DTexture2_Load(LPDIRECT3DTEXTURE2 this,
+ LPDIRECT3DTEXTURE2 lpD3DTexture2)
+{
+ FIXME(ddraw, "(%p)->(%p): stub\n", this, lpD3DTexture2);
+
+ /* Hack ? */
+ FIXME(ddraw, "Sthis %p / Sload %p\n", this->surface, lpD3DTexture2->surface);
+ this->surface->s.surface_desc.ddsCaps.dwCaps &= ~DDSCAPS_ALLOCONLOAD;
+
+ return DD_OK;
+}
+
+
+/*******************************************************************************
+ * IDirect3DTexture2 VTable
+ */
+static IDirect3DTexture2_VTable texture2_vtable = {
+ /*** IUnknown methods ***/
+ IDirect3DTexture2_QueryInterface,
+ IDirect3DTexture2_AddRef,
+ IDirect3DTexture2_Release,
+ /*** IDirect3DTexture methods ***/
+ IDirect3DTexture2_GetHandle,
+ IDirect3DTexture2_PaletteChanged,
+ IDirect3DTexture2_Load
+};
+
+/*******************************************************************************
+ * IDirect3DTexture VTable
+ */
+static IDirect3DTexture_VTable texture_vtable = {
+ /*** IUnknown methods ***/
+ IDirect3DTexture2_QueryInterface,
+ IDirect3DTexture2_AddRef,
+ IDirect3DTexture2_Release,
+ /*** IDirect3DTexture methods ***/
+ IDirect3DTexture_Initialize,
+ IDirect3DTexture_GetHandle,
+ IDirect3DTexture2_PaletteChanged,
+ IDirect3DTexture2_Load,
+ IDirect3DTexture_Unload
+};
+
+#else /* HAVE_MESAGL */
+
+/* These function should never be called if MesaGL is not present */
+LPDIRECT3DTEXTURE2 d3dtexture2_create(LPDIRECTDRAWSURFACE3 surf) {
+ ERR(ddraw, "Should not be called...\n");
+ return NULL;
+}
+
+LPDIRECT3DTEXTURE d3dtexture_create(LPDIRECTDRAWSURFACE3 surf) {
+ ERR(ddraw, "Should not be called...\n");
+ return NULL;
+}
+
+#endif /* HAVE_MESAGL */