Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
1d45ab4a
Commit
1d45ab4a
authored
Aug 05, 2003
by
Lionel Ulmer
Committed by
Alexandre Julliard
Aug 05, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Proper MIRROR texture address support.
parent
27eacba8
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
78 additions
and
11 deletions
+78
-11
mesa.c
dlls/ddraw/d3ddevice/mesa.c
+45
-6
d3dtexture.c
dlls/ddraw/d3dtexture.c
+11
-5
gl_api.h
dlls/ddraw/gl_api.h
+2
-0
gl_private.h
dlls/ddraw/gl_private.h
+9
-0
mesa_private.h
dlls/ddraw/mesa_private.h
+11
-0
No files found.
dlls/ddraw/d3ddevice/mesa.c
View file @
1d45ab4a
...
...
@@ -20,6 +20,7 @@
*/
#include "config.h"
#include "wine/port.h"
#include <string.h>
#include <math.h>
...
...
@@ -32,6 +33,7 @@
#include "ddraw.h"
#include "d3d.h"
#include "wine/debug.h"
#include "wine/library.h"
#include "mesa_private.h"
#include "main.h"
...
...
@@ -66,6 +68,7 @@ const float id_mat[16] = {
/* This is filled at DLL loading time */
static
D3DDEVICEDESC7
opengl_device_caps
;
GL_EXTENSIONS_LIST
GL_extensions
;
static
void
draw_primitive_strided
(
IDirect3DDeviceImpl
*
This
,
D3DPRIMITIVETYPE
d3dptPrimitiveType
,
...
...
@@ -1749,11 +1752,13 @@ GL_IDirect3DDeviceImpl_7_3T_SetTextureStageState(LPDIRECT3DDEVICE7 iface,
case
D3DTADDRESS_WRAP
:
TRACE
(
" Stage type is : %s => D3DTADDRESS_WRAP
\n
"
,
type
);
break
;
case
D3DTADDRESS_CLAMP
:
TRACE
(
" Stage type is : %s => D3DTADDRESS_CLAMP
\n
"
,
type
);
break
;
case
D3DTADDRESS_BORDER
:
TRACE
(
" Stage type is : %s => D3DTADDRESS_BORDER
\n
"
,
type
);
break
;
#if defined(GL_VERSION_1_4)
case
D3DTADDRESS_MIRROR
:
TRACE
(
" Stage type is : %s => D3DTADDRESS_MIRROR
\n
"
,
type
);
break
;
#elif defined(GL_ARB_texture_mirrored_repeat)
case
D3DTADDRESS_MIRROR
:
TRACE
(
" Stage type is : %s => D3DTADDRESS_MIRROR
\n
"
,
type
);
break
;
#endif
case
D3DTADDRESS_MIRROR
:
if
(
GL_extensions
.
mirrored_repeat
==
TRUE
)
{
TRACE
(
" Stage type is : %s => D3DTADDRESS_MIRROR
\n
"
,
type
);
}
else
{
FIXME
(
" Stage type is : %s => D3DTADDRESS_MIRROR - not supported by GL !
\n
"
,
type
);
}
break
;
default:
FIXME
(
" Unhandled stage type : %s => %08lx
\n
"
,
type
,
dwState
);
break
;
}
}
break
;
...
...
@@ -3787,6 +3792,9 @@ static void fill_opengl_primcaps(D3DPRIMCAPS *pc)
pc
->
dwTextureBlendCaps
=
D3DPTBLENDCAPS_ADD
|
D3DPTBLENDCAPS_COPY
|
D3DPTBLENDCAPS_DECAL
|
D3DPTBLENDCAPS_DECALALPHA
|
D3DPTBLENDCAPS_DECALMASK
|
D3DPTBLENDCAPS_MODULATE
|
D3DPTBLENDCAPS_MODULATEALPHA
|
D3DPTBLENDCAPS_MODULATEMASK
;
pc
->
dwTextureAddressCaps
=
D3DPTADDRESSCAPS_BORDER
|
D3DPTADDRESSCAPS_CLAMP
|
D3DPTADDRESSCAPS_WRAP
|
D3DPTADDRESSCAPS_INDEPENDENTUV
;
if
(
GL_extensions
.
mirrored_repeat
==
TRUE
)
{
pc
->
dwTextureAddressCaps
|=
D3DPTADDRESSCAPS_MIRROR
;
}
pc
->
dwStippleWidth
=
32
;
pc
->
dwStippleHeight
=
32
;
}
...
...
@@ -3863,6 +3871,11 @@ d3ddevice_init_at_startup(void *gl_handle)
XWindowAttributes
win_attr
;
GLXContext
gl_context
;
int
num
;
const
char
*
glExtensions
;
const
char
*
glVersion
;
const
char
*
glXExtensions
=
NULL
;
const
void
*
(
*
pglXGetProcAddressARB
)(
const
GLubyte
*
)
=
NULL
;
int
major
,
minor
,
patch
;
TRACE
(
"Initializing GL...
\n
"
);
...
...
@@ -3898,7 +3911,33 @@ d3ddevice_init_at_startup(void *gl_handle)
return
FALSE
;
}
/* Then, query all extensions and fill our extension context. TODO :-) */
/* Then, query all extensions */
glXExtensions
=
glXQueryExtensionsString
(
display
,
DefaultScreen
(
display
));
glExtensions
=
(
const
char
*
)
glGetString
(
GL_EXTENSIONS
);
glVersion
=
(
const
char
*
)
glGetString
(
GL_VERSION
);
if
((
glXExtensions
!=
NULL
)
&&
(
gl_handle
!=
NULL
)
&&
(
strstr
(
glXExtensions
,
"GLX_ARB_get_proc_address"
)))
{
pglXGetProcAddressARB
=
wine_dlsym
(
gl_handle
,
"glXGetProcAddressARB"
,
NULL
,
0
);
}
/* Parse the GL version string */
sscanf
(
glVersion
,
"%d.%d.%d"
,
&
major
,
&
minor
,
&
patch
);
TRACE
(
"GL version %d.%d.%d
\n
"
,
major
,
minor
,
patch
);
/* And starts to fill the extension context properly */
memset
(
&
GL_extensions
,
0
,
sizeof
(
GL_extensions
));
TRACE
(
"GL supports following extensions used by Wine :
\n
"
);
/* Mirrored Repeat extension :
- GL_ARB_texture_mirrored_repeat
- GL_IBM_texture_mirrored_repeat
- GL >= 1.4
*/
if
((
strstr
(
glExtensions
,
"GL_ARB_texture_mirrored_repeat"
))
||
(
strstr
(
glExtensions
,
"GL_IBM_texture_mirrored_repeat"
))
||
((
major
>=
1
)
&&
(
minor
>=
4
)))
{
TRACE
(
" - mirrored repeat
\n
"
);
GL_extensions
.
mirrored_repeat
=
TRUE
;
}
/* Fill the D3D capabilities according to what GL tells us... */
fill_caps
();
...
...
dlls/ddraw/d3dtexture.c
View file @
1d45ab4a
...
...
@@ -143,11 +143,17 @@ convert_tex_address_to_GL(D3DTEXTUREADDRESS dwState)
case
D3DTADDRESS_WRAP
:
gl_state
=
GL_REPEAT
;
break
;
case
D3DTADDRESS_CLAMP
:
gl_state
=
GL_CLAMP
;
break
;
case
D3DTADDRESS_BORDER
:
gl_state
=
GL_CLAMP_TO_EDGE
;
break
;
#if defined(GL_VERSION_1_4)
case
D3DTADDRESS_MIRROR
:
gl_state
=
GL_MIRRORED_REPEAT
;
break
;
#elif defined(GL_ARB_texture_mirrored_repeat)
case
D3DTADDRESS_MIRROR
:
gl_state
=
GL_MIRRORED_REPEAT_ARB
;
break
;
#endif
case
D3DTADDRESS_MIRROR
:
if
(
GL_extensions
.
mirrored_repeat
==
TRUE
)
{
gl_state
=
GL_MIRRORED_REPEAT_WINE
;
}
else
{
gl_state
=
GL_REPEAT
;
/* This is a TRACE instead of a FIXME as the FIXME was already printed when the game
actually set D3DTADDRESS_MIRROR.
*/
TRACE
(
" setting GL_REPEAT instead of GL_MIRRORED_REPEAT.
\n
"
);
}
break
;
default:
gl_state
=
GL_REPEAT
;
break
;
}
return
gl_state
;
...
...
dlls/ddraw/gl_api.h
View file @
1d45ab4a
...
...
@@ -61,6 +61,7 @@ GL_API_FUNCTION(glGetBooleanv)
GL_API_FUNCTION
(
glGetError
)
GL_API_FUNCTION
(
glGetFloatv
)
GL_API_FUNCTION
(
glGetIntegerv
)
GL_API_FUNCTION
(
glGetString
)
GL_API_FUNCTION
(
glGetTexEnviv
)
GL_API_FUNCTION
(
glGetTexParameteriv
)
GL_API_FUNCTION
(
glHint
)
...
...
@@ -105,4 +106,5 @@ GL_API_FUNCTION(glViewport)
GL_API_FUNCTION
(
glXCreateContext
)
GL_API_FUNCTION
(
glXDestroyContext
)
GL_API_FUNCTION
(
glXMakeCurrent
)
GL_API_FUNCTION
(
glXQueryExtensionsString
)
GL_API_FUNCTION
(
glXSwapBuffers
)
dlls/ddraw/gl_private.h
View file @
1d45ab4a
...
...
@@ -49,6 +49,13 @@
#include "gl_api.h"
#undef GL_API_FUNCTION
/* This is also where I store our private extension defines...
I know that Raphael won't like it, but well, I prefer doing that than battling 10 different headers :-)
Note: this is perfectly 'legal' as the three variants of the enum have exactly the same value
*/
#define GL_MIRRORED_REPEAT_WINE 0x8370
#ifndef GLPRIVATE_NO_REDEFINE
#define glAlphaFunc pglAlphaFunc
...
...
@@ -86,6 +93,7 @@
#define glGetError pglGetError
#define glGetFloatv pglGetFloatv
#define glGetIntegerv pglGetIntegerv
#define glGetString pglGetString
#define glGetTexEnviv pglGetTexEnviv
#define glGetTexParameteriv pglGetTexParameteriv
#define glHint pglHint
...
...
@@ -130,6 +138,7 @@
#define glXCreateContext pglXCreateContext
#define glXDestroyContext pglXDestroyContext
#define glXMakeCurrent pglXMakeCurrent
#define glXQueryExtensionsString pglXQueryExtensionsString
#define glXSwapBuffers pglXSwapBuffers
#endif
/* GLPRIVATE_NO_REDEFINE */
...
...
dlls/ddraw/mesa_private.h
View file @
1d45ab4a
...
...
@@ -154,6 +154,17 @@ typedef struct {
LPVOID
vertices
;
}
IDirect3DVertexBufferGLImpl
;
/* This is for GL extension support.
This can contain either only a boolean if no function pointer exists or a set
of function pointers.
*/
typedef
struct
{
/* Mirrored Repeat */
BOOLEAN
mirrored_repeat
;
}
GL_EXTENSIONS_LIST
;
extern
GL_EXTENSIONS_LIST
GL_extensions
;
/* All non-static functions 'exported' by various sub-objects */
extern
HRESULT
direct3d_create
(
IDirectDrawImpl
*
This
);
extern
HRESULT
d3dtexture_create
(
IDirectDrawImpl
*
d3d
,
IDirectDrawSurfaceImpl
*
surf
,
BOOLEAN
at_creation
,
IDirectDrawSurfaceImpl
*
main_surf
);
...
...
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