Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
774c5f77
Commit
774c5f77
authored
Nov 24, 2002
by
Christian Costa
Committed by
Alexandre Julliard
Nov 24, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reenable OpenGL surface's flip method.
Reenable execute buffers. Some bug fixes.
parent
97bd11de
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
67 additions
and
75 deletions
+67
-75
mesa.c
dlls/ddraw/d3ddevice/mesa.c
+8
-11
d3dexecutebuffer.c
dlls/ddraw/d3dexecutebuffer.c
+54
-59
main.c
dlls/ddraw/direct3d/main.c
+2
-2
mesa.c
dlls/ddraw/direct3d/mesa.c
+3
-3
No files found.
dlls/ddraw/d3ddevice/mesa.c
View file @
774c5f77
...
...
@@ -132,20 +132,17 @@ static BOOL opengl_flip( LPVOID display, LPVOID drawable)
/*******************************************************************************
* OpenGL static functions
*/
static
void
set_context
(
IDirect3DDeviceImpl
*
This
)
{
#if 0
D3DDPRIVATE(This)
;
static
void
set_context
(
IDirect3DDeviceImpl
*
This
)
{
IDirect3DDeviceGLImpl
*
glThis
=
(
IDirect3DDeviceGLImpl
*
)
This
;
ENTER_GL
();
TRACE("glxMakeCurrent %p, %ld, %p\n",
odev->gdi_display,odev->drawable, odev->ctx
);
if (glXMakeCurrent(
odev->gdi_display,odev->drawable, odev->ctx
) == False) {
TRACE
(
"glxMakeCurrent %p, %ld, %p
\n
"
,
glThis
->
display
,
glThis
->
drawable
,
glThis
->
gl_context
);
if
(
glXMakeCurrent
(
glThis
->
display
,
glThis
->
drawable
,
glThis
->
gl_context
)
==
False
)
{
ERR
(
"Error in setting current context (context %p drawable %ld)!
\n
"
,
odev->ctx, odev
->drawable);
glThis
->
gl_context
,
glThis
->
drawable
);
}
LEAVE_GL
();
#else
ERR
(
"This function should not be called in the current state of the code...
\n
"
);
#endif
}
static
void
fill_opengl_primcaps
(
D3DPRIMCAPS
*
pc
)
...
...
@@ -1083,7 +1080,7 @@ d3ddevice_create(IDirect3DDeviceImpl **obj, IDirect3DImpl *d3d, IDirectDrawSurfa
glColor3f
(
1
.
0
,
1
.
0
,
1
.
0
);
LEAVE_GL
();
fill_device_capabilities
(
d3d
->
ddraw
);
/* fill_device_capabilities(d3d->ddraw); */
ICOM_INIT_INTERFACE
(
object
,
IDirect3DDevice
,
VTABLE_IDirect3DDevice
);
ICOM_INIT_INTERFACE
(
object
,
IDirect3DDevice2
,
VTABLE_IDirect3DDevice2
);
...
...
dlls/ddraw/d3dexecutebuffer.c
View file @
774c5f77
...
...
@@ -183,28 +183,26 @@ static void _dump_D3DEXECUTEBUFFERDESC(LPD3DEXECUTEBUFFERDESC lpDesc) {
static
void
execute
(
IDirect3DExecuteBufferImpl
*
This
,
IDirect3DDeviceImpl
*
lpDevice
,
IDirect3DViewportImpl
*
lpViewport
)
{
#if 0
IDirect3DExecuteBufferImpl* ilpBuff=(IDirect3DExecuteBufferImpl*)lpBuff;
IDirect3DViewport2Impl* ivp=(IDirect3DViewport2Impl*)vp;
/* DWORD bs = ilpBuff->desc.dwBufferSize; */
DWORD vs = ilpBuff->data.dwVertexOffset;
/* DWORD vc = ilpBuff->data.dwVertexCount; */
DWORD is = ilpBuff->data.dwInstructionOffset;
/* DWORD il = ilpBuff->data.dwInstructionLength; */
IDirect3DViewportImpl
*
lpViewport
)
{
IDirect3DDeviceGLImpl
*
lpDeviceGL
=
(
IDirect3DDeviceGLImpl
*
)
lpDevice
;
/* DWORD bs = This->desc.dwBufferSize; */
DWORD
vs
=
This
->
data
.
dwVertexOffset
;
/* DWORD vc = This->data.dwVertexCount; */
DWORD
is
=
This
->
data
.
dwInstructionOffset
;
/* DWORD il = This->data.dwInstructionLength; */
void *instr = ilpBuff->desc.lpData + is;
D3DDPRIVATE((IDirect3DDeviceImpl*)dev);
void
*
instr
=
This
->
desc
.
lpData
+
is
;
/* Should check if the viewport was added or not to the device */
/* Activate the viewport */
ivp->device.active_device1 = (IDirect3DDeviceImpl*)dev
;
ivp->activate(ivp
);
lpViewport
->
active_device
=
lpDevice
;
lpViewport
->
activate
(
lpViewport
);
TRACE
(
"ExecuteData :
\n
"
);
if
(
TRACE_ON
(
ddraw
))
_dump_executedata(&(
ilpBuff
->data));
_dump_executedata
(
&
(
This
->
data
));
ENTER_GL
();
...
...
@@ -230,12 +228,12 @@ static void execute(IDirect3DExecuteBufferImpl *This,
case
D3DOP_TRIANGLE
:
{
int
i
;
OGL_Vertex *vx = (OGL_Vertex *)
ilpBuff
->vertex_data;
OGL_LVertex *l_vx = (OGL_LVertex *)
ilpBuff
->vertex_data;
D3DTLVERTEX *tl_vx = (D3DTLVERTEX *)
ilpBuff
->vertex_data;
OGL_Vertex
*
vx
=
(
OGL_Vertex
*
)
This
->
vertex_data
;
OGL_LVertex
*
l_vx
=
(
OGL_LVertex
*
)
This
->
vertex_data
;
D3DTLVERTEX
*
tl_vx
=
(
D3DTLVERTEX
*
)
This
->
vertex_data
;
TRACE
(
"TRIANGLE (%d)
\n
"
,
count
);
switch (
ilpBuff
->vertex_type) {
switch
(
This
->
vertex_type
)
{
case
D3DVT_VERTEX
:
/* This time, there is lighting */
glEnable
(
GL_LIGHTING
);
...
...
@@ -245,16 +243,16 @@ static void execute(IDirect3DExecuteBufferImpl *This,
glLoadIdentity
();
/* The model transformation was done during the
transformation phase */
glMatrixMode
(
GL_PROJECTION
);
TRACE(" Projection Matrix : (%p)\n",
odev
->proj_mat);
dump_mat(
odev
->proj_mat);
TRACE(" View Matrix : (%p)\n",
odev
->view_mat);
dump_mat(
odev
->view_mat);
TRACE
(
" Projection Matrix : (%p)
\n
"
,
lpDeviceGL
->
proj_mat
);
dump_mat
(
lpDeviceGL
->
proj_mat
);
TRACE
(
" View Matrix : (%p)
\n
"
,
lpDeviceGL
->
view_mat
);
dump_mat
(
lpDeviceGL
->
view_mat
);
/* Although z axis is inverted between OpenGL and Direct3D, the z projected coordinates
are always 0.0 at the front viewing volume and 1.0 at the back with Direct 3D and with
the default behaviour of OpenGL. So, no additional transformation is required. */
glLoadMatrixf((float *)
odev
->proj_mat);
glMultMatrixf((float *)
odev
->view_mat);
glLoadMatrixf
((
float
*
)
lpDeviceGL
->
proj_mat
);
glMultMatrixf
((
float
*
)
lpDeviceGL
->
view_mat
);
break
;
case
D3DVT_LVERTEX
:
...
...
@@ -267,16 +265,16 @@ static void execute(IDirect3DExecuteBufferImpl *This,
transformation phase */
glMatrixMode
(
GL_PROJECTION
);
TRACE(" Projection Matrix : (%p)\n",
odev
->proj_mat);
dump_mat(
odev
->proj_mat);
TRACE(" View Matrix : (%p)\n",
odev
->view_mat);
dump_mat(
odev
->view_mat);
TRACE
(
" Projection Matrix : (%p)
\n
"
,
lpDeviceGL
->
proj_mat
);
dump_mat
(
lpDeviceGL
->
proj_mat
);
TRACE
(
" View Matrix : (%p)
\n
"
,
lpDeviceGL
->
view_mat
);
dump_mat
(
lpDeviceGL
->
view_mat
);
/* Although z axis is inverted between OpenGL and Direct3D, the z projected coordinates
are always 0 at the front viewing volume and 1 at the back with Direct 3D and with
the default behaviour of OpenGL. So, no additional transformation is required. */
glLoadMatrixf((float *)
odev
->proj_mat);
glMultMatrixf((float *)
odev
->view_mat);
glLoadMatrixf
((
float
*
)
lpDeviceGL
->
proj_mat
);
glMultMatrixf
((
float
*
)
lpDeviceGL
->
view_mat
);
break
;
case
D3DVT_TLVERTEX
:
{
...
...
@@ -291,7 +289,7 @@ static void execute(IDirect3DExecuteBufferImpl *This,
glMatrixMode
(
GL_PROJECTION
);
glLoadIdentity
();
if (
ivp
== NULL) {
if
(
lpViewport
==
NULL
)
{
ERR
(
"No current viewport !
\n
"
);
/* Using standard values */
height
=
640
.
0
;
...
...
@@ -299,10 +297,10 @@ static void execute(IDirect3DExecuteBufferImpl *This,
minZ
=
-
10
.
0
;
maxZ
=
10
.
0
;
}
else
{
height = (GLdouble)
ivp->viewport
.vp1.dwHeight;
width = (GLdouble)
ivp->viewport
.vp1.dwWidth;
minZ = (GLdouble)
ivp->viewport
.vp1.dvMinZ;
maxZ = (GLdouble)
ivp->viewport
.vp1.dvMaxZ;
height
=
(
GLdouble
)
lpViewport
->
viewports
.
vp1
.
dwHeight
;
width
=
(
GLdouble
)
lpViewport
->
viewports
.
vp1
.
dwWidth
;
minZ
=
(
GLdouble
)
lpViewport
->
viewports
.
vp1
.
dvMinZ
;
maxZ
=
(
GLdouble
)
lpViewport
->
viewports
.
vp1
.
dvMaxZ
;
if
(
minZ
==
maxZ
)
{
/* I do not know why, but many Dx 3.0 games have minZ = maxZ = 0.0 */
...
...
@@ -318,7 +316,7 @@ static void execute(IDirect3DExecuteBufferImpl *This,
break
;
}
switch (
ilpBuff
->vertex_type) {
switch
(
This
->
vertex_type
)
{
case
D3DVT_VERTEX
:
TRIANGLE_LOOP
(
DO_VERTEX
);
break
;
...
...
@@ -381,17 +379,17 @@ static void execute(IDirect3DExecuteBufferImpl *This,
switch
(
ci
->
u1
.
dtstTransformStateType
)
{
case
D3DTRANSFORMSTATE_WORLD
:
{
TRACE
(
" WORLD (%p)
\n
"
,
(
D3DMATRIX
*
)
ci
->
u2
.
dwArg
[
0
]);
odev
->world_mat = (D3DMATRIX*) ci->u2.dwArg[0];
lpDeviceGL
->
world_mat
=
(
D3DMATRIX
*
)
ci
->
u2
.
dwArg
[
0
];
}
break
;
case
D3DTRANSFORMSTATE_VIEW
:
{
TRACE
(
" VIEW (%p)
\n
"
,
(
D3DMATRIX
*
)
ci
->
u2
.
dwArg
[
0
]);
odev
->view_mat = (D3DMATRIX*) ci->u2.dwArg[0];
lpDeviceGL
->
view_mat
=
(
D3DMATRIX
*
)
ci
->
u2
.
dwArg
[
0
];
}
break
;
case
D3DTRANSFORMSTATE_PROJECTION
:
{
TRACE
(
" PROJECTION (%p)
\n
"
,
(
D3DMATRIX
*
)
ci
->
u2
.
dwArg
[
0
]);
odev
->proj_mat = (D3DMATRIX*) ci->u2.dwArg[0];
lpDeviceGL
->
proj_mat
=
(
D3DMATRIX
*
)
ci
->
u2
.
dwArg
[
0
];
}
break
;
default:
...
...
@@ -413,7 +411,7 @@ static void execute(IDirect3DExecuteBufferImpl *This,
/* Handle the state transform */
switch
(
ci
->
u1
.
dlstLightStateType
)
{
case
D3DLIGHTSTATE_MATERIAL
:
{
IDirect3DMaterial
2Impl* mat = (IDirect3DMaterial2
Impl*) ci->u2.dwArg[0];
IDirect3DMaterial
Impl
*
mat
=
(
IDirect3DMaterial
Impl
*
)
ci
->
u2
.
dwArg
[
0
];
TRACE
(
" MATERIAL
\n
"
);
if
(
mat
!=
NULL
)
{
...
...
@@ -477,7 +475,7 @@ static void execute(IDirect3DExecuteBufferImpl *This,
LPD3DSTATE
ci
=
(
LPD3DSTATE
)
instr
;
/* Handle the state transform */
set_render_state(ci->u1.drstRenderStateType, ci->u2.dwArg[0], &(
odev->rs
));
set_render_state
(
ci
->
u1
.
drstRenderStateType
,
ci
->
u2
.
dwArg
[
0
],
&
(
lpDeviceGL
->
render_state
));
instr
+=
size
;
}
...
...
@@ -538,14 +536,14 @@ static void execute(IDirect3DExecuteBufferImpl *This,
/* Enough for the moment */
if
(
ci
->
dwFlags
==
D3DPROCESSVERTICES_TRANSFORMLIGHT
)
{
int
nb
;
D3DVERTEX *src = ((LPD3DVERTEX) (
ilpBuff
->desc.lpData + vs)) + ci->wStart;
OGL_Vertex *dst = ((OGL_Vertex *) (
ilpBuff
->vertex_data)) + ci->wDest;
D3DMATRIX *mat =
odev
->world_mat;
D3DVERTEX
*
src
=
((
LPD3DVERTEX
)
(
This
->
desc
.
lpData
+
vs
))
+
ci
->
wStart
;
OGL_Vertex
*
dst
=
((
OGL_Vertex
*
)
(
This
->
vertex_data
))
+
ci
->
wDest
;
D3DMATRIX
*
mat
=
lpDeviceGL
->
world_mat
;
TRACE
(
" World Matrix : (%p)
\n
"
,
mat
);
dump_mat
(
mat
);
ilpBuff
->vertex_type = D3DVT_VERTEX;
This
->
vertex_type
=
D3DVT_VERTEX
;
for
(
nb
=
0
;
nb
<
ci
->
dwCount
;
nb
++
)
{
/* For the moment, no normal transformation... */
...
...
@@ -567,14 +565,14 @@ static void execute(IDirect3DExecuteBufferImpl *This,
}
}
else
if
(
ci
->
dwFlags
==
D3DPROCESSVERTICES_TRANSFORM
)
{
int
nb
;
D3DLVERTEX *src = ((LPD3DLVERTEX) (
ilpBuff
->desc.lpData + vs)) + ci->wStart;
OGL_LVertex *dst = ((OGL_LVertex *) (
ilpBuff
->vertex_data)) + ci->wDest;
D3DMATRIX *mat =
odev
->world_mat;
D3DLVERTEX
*
src
=
((
LPD3DLVERTEX
)
(
This
->
desc
.
lpData
+
vs
))
+
ci
->
wStart
;
OGL_LVertex
*
dst
=
((
OGL_LVertex
*
)
(
This
->
vertex_data
))
+
ci
->
wDest
;
D3DMATRIX
*
mat
=
lpDeviceGL
->
world_mat
;
TRACE
(
" World Matrix : (%p)
\n
"
,
mat
);
dump_mat
(
mat
);
ilpBuff
->vertex_type = D3DVT_LVERTEX;
This
->
vertex_type
=
D3DVT_LVERTEX
;
for
(
nb
=
0
;
nb
<
ci
->
dwCount
;
nb
++
)
{
dst
->
c
=
src
->
u4
.
color
;
...
...
@@ -592,10 +590,10 @@ static void execute(IDirect3DExecuteBufferImpl *This,
dst
++
;
}
}
else
if
(
ci
->
dwFlags
==
D3DPROCESSVERTICES_COPY
)
{
D3DTLVERTEX *src = ((LPD3DTLVERTEX) (
ilpBuff
->desc.lpData + vs)) + ci->wStart;
D3DTLVERTEX *dst = ((LPD3DTLVERTEX) (
ilpBuff
->vertex_data)) + ci->wDest;
D3DTLVERTEX
*
src
=
((
LPD3DTLVERTEX
)
(
This
->
desc
.
lpData
+
vs
))
+
ci
->
wStart
;
D3DTLVERTEX
*
dst
=
((
LPD3DTLVERTEX
)
(
This
->
vertex_data
))
+
ci
->
wDest
;
ilpBuff
->vertex_type = D3DVT_TLVERTEX;
This
->
vertex_type
=
D3DVT_TLVERTEX
;
memcpy
(
dst
,
src
,
ci
->
dwCount
*
sizeof
(
D3DTLVERTEX
));
}
else
{
...
...
@@ -627,7 +625,7 @@ static void execute(IDirect3DExecuteBufferImpl *This,
for
(
i
=
0
;
i
<
count
;
i
++
)
{
LPD3DBRANCH
ci
=
(
LPD3DBRANCH
)
instr
;
if ((
ilpBuff
->data.dsStatus.dwStatus & ci->dwMask) == ci->dwValue) {
if
((
This
->
data
.
dsStatus
.
dwStatus
&
ci
->
dwMask
)
==
ci
->
dwValue
)
{
if
(
!
ci
->
bNegate
)
{
TRACE
(
" Should branch to %ld
\n
"
,
ci
->
dwOffset
);
}
...
...
@@ -654,7 +652,7 @@ static void execute(IDirect3DExecuteBufferImpl *This,
for
(
i
=
0
;
i
<
count
;
i
++
)
{
LPD3DSTATUS
ci
=
(
LPD3DSTATUS
)
instr
;
ilpBuff
->data.dsStatus = *ci;
This
->
data
.
dsStatus
=
*
ci
;
instr
+=
size
;
}
...
...
@@ -668,11 +666,8 @@ static void execute(IDirect3DExecuteBufferImpl *This,
}
}
end_of_buffer:
end_of_buffer:
LEAVE_GL
();
#else
FIXME
(
"Need to make this function compile again !!!
\n
"
);
#endif
}
HRESULT
WINAPI
...
...
@@ -868,7 +863,7 @@ HRESULT d3dexecutebuffer_create(IDirect3DExecuteBufferImpl **obj, IDirect3DImpl
object
->
d3ddev
=
d3ddev
;
/* Initializes memory */
memcpy
(
&
object
->
desc
,
&
lpDesc
,
lpDesc
->
dwSize
);
memcpy
(
&
object
->
desc
,
lpDesc
,
lpDesc
->
dwSize
);
/* No buffer given */
if
((
object
->
desc
.
dwFlags
&
D3DDEB_LPDATA
)
==
0
)
...
...
dlls/ddraw/direct3d/main.c
View file @
774c5f77
...
...
@@ -426,7 +426,7 @@ Thunk_IDirect3DImpl_1_CreateMaterial(LPDIRECT3D iface,
&
ret_val
,
pUnkOuter
);
*
lplpDirect3DMaterial
=
COM_INTERFACE_CAST
(
IDirect3DMaterialImpl
,
IDirect3DMaterial3
,
IDirect3DMaterial
,
&
ret_val
);
*
lplpDirect3DMaterial
=
COM_INTERFACE_CAST
(
IDirect3DMaterialImpl
,
IDirect3DMaterial3
,
IDirect3DMaterial
,
ret_val
);
TRACE
(
" returning interface %p.
\n
"
,
*
lplpDirect3DMaterial
);
...
...
@@ -457,7 +457,7 @@ Thunk_IDirect3DImpl_2_CreateMaterial(LPDIRECT3D2 iface,
&
ret_val
,
pUnkOuter
);
*
lplpDirect3DMaterial2
=
COM_INTERFACE_CAST
(
IDirect3DMaterialImpl
,
IDirect3DMaterial3
,
IDirect3DMaterial2
,
&
ret_val
);
*
lplpDirect3DMaterial2
=
COM_INTERFACE_CAST
(
IDirect3DMaterialImpl
,
IDirect3DMaterial3
,
IDirect3DMaterial2
,
ret_val
);
TRACE
(
" returning interface %p.
\n
"
,
*
lplpDirect3DMaterial2
);
...
...
dlls/ddraw/direct3d/mesa.c
View file @
774c5f77
...
...
@@ -281,7 +281,7 @@ ICOM_VTABLE(IDirect3D3) VTABLE_IDirect3D3 =
XCAST
(
AddRef
)
Thunk_IDirect3DImpl_3_AddRef
,
XCAST
(
Release
)
Thunk_IDirect3DImpl_3_Release
,
XCAST
(
EnumDevices
)
GL_IDirect3DImpl_3_EnumDevices
,
XCAST
(
CreateLight
)
Main
_IDirect3DImpl_3_2T_1T_CreateLight
,
XCAST
(
CreateLight
)
GL
_IDirect3DImpl_3_2T_1T_CreateLight
,
XCAST
(
CreateMaterial
)
GL_IDirect3DImpl_3_2T_1T_CreateMaterial
,
XCAST
(
CreateViewport
)
GL_IDirect3DImpl_3_2T_1T_CreateViewport
,
XCAST
(
FindDevice
)
Main_IDirect3DImpl_3_2T_FindDevice
,
...
...
@@ -308,7 +308,7 @@ ICOM_VTABLE(IDirect3D2) VTABLE_IDirect3D2 =
XCAST
(
QueryInterface
)
Thunk_IDirect3DImpl_2_QueryInterface
,
XCAST
(
AddRef
)
Thunk_IDirect3DImpl_2_AddRef
,
XCAST
(
Release
)
Thunk_IDirect3DImpl_2_Release
,
XCAST
(
EnumDevices
)
Thunk
_IDirect3DImpl_2_EnumDevices
,
XCAST
(
EnumDevices
)
GL
_IDirect3DImpl_2_EnumDevices
,
XCAST
(
CreateLight
)
Thunk_IDirect3DImpl_2_CreateLight
,
XCAST
(
CreateMaterial
)
Thunk_IDirect3DImpl_2_CreateMaterial
,
XCAST
(
CreateViewport
)
Thunk_IDirect3DImpl_2_CreateViewport
,
...
...
@@ -334,7 +334,7 @@ ICOM_VTABLE(IDirect3D) VTABLE_IDirect3D =
XCAST
(
AddRef
)
Thunk_IDirect3DImpl_1_AddRef
,
XCAST
(
Release
)
Thunk_IDirect3DImpl_1_Release
,
XCAST
(
Initialize
)
Main_IDirect3DImpl_1_Initialize
,
XCAST
(
EnumDevices
)
Thunk
_IDirect3DImpl_1_EnumDevices
,
XCAST
(
EnumDevices
)
GL
_IDirect3DImpl_1_EnumDevices
,
XCAST
(
CreateLight
)
Thunk_IDirect3DImpl_1_CreateLight
,
XCAST
(
CreateMaterial
)
Thunk_IDirect3DImpl_1_CreateMaterial
,
XCAST
(
CreateViewport
)
Thunk_IDirect3DImpl_1_CreateViewport
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment