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
a173c8e3
Commit
a173c8e3
authored
May 06, 2006
by
Stefan Dösinger
Committed by
Alexandre Julliard
May 08, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wined3d: Add IWineD3DDevice::DrawPrimitiveStrided.
parent
1cfbc903
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
108 additions
and
65 deletions
+108
-65
device.c
dlls/wined3d/device.c
+10
-4
drawprim.c
dlls/wined3d/drawprim.c
+41
-26
wined3d_private.h
dlls/wined3d/wined3d_private.h
+2
-35
wined3d_interface.h
include/wine/wined3d_interface.h
+2
-0
wined3d_types.h
include/wine/wined3d_types.h
+53
-0
No files found.
dlls/wined3d/device.c
View file @
a173c8e3
...
@@ -5272,7 +5272,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitive(IWineD3DDevice *iface, D3DPRIMIT
...
@@ -5272,7 +5272,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitive(IWineD3DDevice *iface, D3DPRIMIT
debug_d3dprimitivetype
(
PrimitiveType
),
debug_d3dprimitivetype
(
PrimitiveType
),
StartVertex
,
PrimitiveCount
);
StartVertex
,
PrimitiveCount
);
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
StartVertex
,
0
/* NumVertices */
,
-
1
/* indxStart */
,
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
StartVertex
,
0
/* NumVertices */
,
-
1
/* indxStart */
,
0
/* indxSize */
,
NULL
/* indxData */
,
0
/* minIndex */
);
0
/* indxSize */
,
NULL
/* indxData */
,
0
/* minIndex */
,
NULL
);
return
WINED3D_OK
;
return
WINED3D_OK
;
...
@@ -5304,7 +5304,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *iface,
...
@@ -5304,7 +5304,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitive(IWineD3DDevice *iface,
}
}
drawPrimitive
(
iface
,
PrimitiveType
,
primCount
,
baseVIndex
,
NumVertices
,
startIndex
,
drawPrimitive
(
iface
,
PrimitiveType
,
primCount
,
baseVIndex
,
NumVertices
,
startIndex
,
idxStride
,
((
IWineD3DIndexBufferImpl
*
)
pIB
)
->
resource
.
allocatedMemory
,
minIndex
);
idxStride
,
((
IWineD3DIndexBufferImpl
*
)
pIB
)
->
resource
.
allocatedMemory
,
minIndex
,
NULL
);
return
WINED3D_OK
;
return
WINED3D_OK
;
}
}
...
@@ -5329,7 +5329,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveUP(IWineD3DDevice *iface, D3DPRIM
...
@@ -5329,7 +5329,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawPrimitiveUP(IWineD3DDevice *iface, D3DPRIM
This
->
stateBlock
->
streamIsUP
=
TRUE
;
This
->
stateBlock
->
streamIsUP
=
TRUE
;
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
0
/* start vertex */
,
0
/* NumVertices */
,
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
0
/* start vertex */
,
0
/* NumVertices */
,
0
/* indxStart*/
,
0
/* indxSize*/
,
NULL
/* indxData */
,
0
/* indxMin */
);
0
/* indxStart*/
,
0
/* indxSize*/
,
NULL
/* indxData */
,
0
/* indxMin */
,
NULL
);
/* stream zero settings set to null at end, as per the msdn
/* stream zero settings set to null at end, as per the msdn
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/DrawPrimitiveUP.asp
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/DrawPrimitiveUP.asp
*/
*/
...
@@ -5372,7 +5372,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *iface,
...
@@ -5372,7 +5372,7 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *iface,
This
->
stateBlock
->
streamIsUP
=
TRUE
;
This
->
stateBlock
->
streamIsUP
=
TRUE
;
This
->
stateBlock
->
streamStride
[
0
]
=
VertexStreamZeroStride
;
This
->
stateBlock
->
streamStride
[
0
]
=
VertexStreamZeroStride
;
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
0
/* vertexStart */
,
NumVertices
,
0
/* indxStart */
,
idxStride
,
pIndexData
,
MinVertexIndex
);
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
0
/* vertexStart */
,
NumVertices
,
0
/* indxStart */
,
idxStride
,
pIndexData
,
MinVertexIndex
,
NULL
);
/* stream zero settings set to null at end as per the msdn
/* stream zero settings set to null at end as per the msdn
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/DrawPrimitiveUP.asp
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/d3d/interfaces/idirect3ddevice9/DrawPrimitiveUP.asp
*/
*/
...
@@ -5384,6 +5384,11 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *iface,
...
@@ -5384,6 +5384,11 @@ HRESULT WINAPI IWineD3DDeviceImpl_DrawIndexedPrimitiveUP(IWineD3DDevice *iface,
return
WINED3D_OK
;
return
WINED3D_OK
;
}
}
HRESULT
WINAPI
IWineD3DDeviceImpl_DrawPrimitiveStrided
(
IWineD3DDevice
*
iface
,
D3DPRIMITIVETYPE
PrimitiveType
,
UINT
PrimitiveCount
,
WineDirect3DVertexStridedData
*
DrawPrimStrideData
)
{
drawPrimitive
(
iface
,
PrimitiveType
,
PrimitiveCount
,
0
,
0
,
0
,
0
,
NULL
,
0
,
DrawPrimStrideData
);
return
WINED3D_OK
;
}
/* Yet another way to update a texture, some apps use this to load default textures instead of using surface/texture lock/unlock */
/* Yet another way to update a texture, some apps use this to load default textures instead of using surface/texture lock/unlock */
HRESULT
WINAPI
IWineD3DDeviceImpl_UpdateTexture
(
IWineD3DDevice
*
iface
,
IWineD3DBaseTexture
*
pSourceTexture
,
IWineD3DBaseTexture
*
pDestinationTexture
){
HRESULT
WINAPI
IWineD3DDeviceImpl_UpdateTexture
(
IWineD3DDevice
*
iface
,
IWineD3DBaseTexture
*
pSourceTexture
,
IWineD3DBaseTexture
*
pDestinationTexture
){
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
...
@@ -7176,6 +7181,7 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
...
@@ -7176,6 +7181,7 @@ const IWineD3DDeviceVtbl IWineD3DDevice_Vtbl =
IWineD3DDeviceImpl_DrawIndexedPrimitive
,
IWineD3DDeviceImpl_DrawIndexedPrimitive
,
IWineD3DDeviceImpl_DrawPrimitiveUP
,
IWineD3DDeviceImpl_DrawPrimitiveUP
,
IWineD3DDeviceImpl_DrawIndexedPrimitiveUP
,
IWineD3DDeviceImpl_DrawIndexedPrimitiveUP
,
IWineD3DDeviceImpl_DrawPrimitiveStrided
,
IWineD3DDeviceImpl_DrawRectPatch
,
IWineD3DDeviceImpl_DrawRectPatch
,
IWineD3DDeviceImpl_DrawTriPatch
,
IWineD3DDeviceImpl_DrawTriPatch
,
IWineD3DDeviceImpl_DeletePatch
,
IWineD3DDeviceImpl_DeletePatch
,
...
...
dlls/wined3d/drawprim.c
View file @
a173c8e3
...
@@ -315,7 +315,7 @@ static BOOL primitiveInitState(IWineD3DDevice *iface, BOOL vtx_transformed, BOOL
...
@@ -315,7 +315,7 @@ static BOOL primitiveInitState(IWineD3DDevice *iface, BOOL vtx_transformed, BOOL
return
isLightingOn
;
return
isLightingOn
;
}
}
void
primitiveDeclarationConvertToStridedData
(
IWineD3DDevice
*
iface
,
BOOL
useVertexShaderFunction
,
Direct3DVertexStridedData
*
strided
,
LONG
BaseVertexIndex
,
DWORD
*
fvf
,
BOOL
storeOrder
,
INT
arrayUsageMap
[
WINED3DSHADERDECLUSAGE_MAX_USAGE
])
{
void
primitiveDeclarationConvertToStridedData
(
IWineD3DDevice
*
iface
,
BOOL
useVertexShaderFunction
,
Wine
Direct3DVertexStridedData
*
strided
,
LONG
BaseVertexIndex
,
DWORD
*
fvf
,
BOOL
storeOrder
,
INT
arrayUsageMap
[
WINED3DSHADERDECLUSAGE_MAX_USAGE
])
{
/* We need to deal with frequency data!*/
/* We need to deal with frequency data!*/
int
textureNo
=
0
;
int
textureNo
=
0
;
...
@@ -557,7 +557,7 @@ void primitiveDeclarationConvertToStridedData(IWineD3DDevice *iface, BOOL useVer
...
@@ -557,7 +557,7 @@ void primitiveDeclarationConvertToStridedData(IWineD3DDevice *iface, BOOL useVer
}
}
static
void
primitiveConvertToStridedData
(
IWineD3DDevice
*
iface
,
Direct3DVertexStridedData
*
strided
,
LONG
BaseVertexIndex
)
{
static
void
primitiveConvertToStridedData
(
IWineD3DDevice
*
iface
,
Wine
Direct3DVertexStridedData
*
strided
,
LONG
BaseVertexIndex
)
{
short
LoopThroughTo
=
0
;
short
LoopThroughTo
=
0
;
short
nStream
;
short
nStream
;
...
@@ -845,7 +845,7 @@ static void draw_vertex(IWineD3DDevice *iface, /* interf
...
@@ -845,7 +845,7 @@ static void draw_vertex(IWineD3DDevice *iface, /* interf
}
}
#endif /* TODO: Software shaders */
#endif /* TODO: Software shaders */
void
loadNumberedArrays
(
IWineD3DDevice
*
iface
,
Direct3DVertexStridedData
*
sd
,
INT
arrayUsageMap
[
WINED3DSHADERDECLUSAGE_MAX_USAGE
])
{
void
loadNumberedArrays
(
IWineD3DDevice
*
iface
,
Wine
Direct3DVertexStridedData
*
sd
,
INT
arrayUsageMap
[
WINED3DSHADERDECLUSAGE_MAX_USAGE
])
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
#define LOAD_NUMBERED_ARRAY(_arrayName, _lookupName) \
#define LOAD_NUMBERED_ARRAY(_arrayName, _lookupName) \
...
@@ -928,7 +928,7 @@ void loadNumberedArrays(IWineD3DDevice *iface, Direct3DVertexStridedData *sd, IN
...
@@ -928,7 +928,7 @@ void loadNumberedArrays(IWineD3DDevice *iface, Direct3DVertexStridedData *sd, IN
#undef LOAD_NUMBERED_ARRAY
#undef LOAD_NUMBERED_ARRAY
}
}
static
void
loadVertexData
(
IWineD3DDevice
*
iface
,
Direct3DVertexStridedData
*
sd
)
{
static
void
loadVertexData
(
IWineD3DDevice
*
iface
,
Wine
Direct3DVertexStridedData
*
sd
)
{
unsigned
int
textureNo
=
0
;
unsigned
int
textureNo
=
0
;
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
...
@@ -1259,7 +1259,7 @@ static void drawStridedFast(IWineD3DDevice *iface,UINT numberOfVertices, GLenum
...
@@ -1259,7 +1259,7 @@ static void drawStridedFast(IWineD3DDevice *iface,UINT numberOfVertices, GLenum
* Slower GL version which extracts info about each vertex in turn
* Slower GL version which extracts info about each vertex in turn
*/
*/
static
void
drawStridedSlow
(
IWineD3DDevice
*
iface
,
Direct3DVertexStridedData
*
sd
,
static
void
drawStridedSlow
(
IWineD3DDevice
*
iface
,
Wine
Direct3DVertexStridedData
*
sd
,
UINT
NumVertexes
,
GLenum
glPrimType
,
UINT
NumVertexes
,
GLenum
glPrimType
,
const
void
*
idxData
,
short
idxSize
,
ULONG
minIndex
,
ULONG
startIdx
)
{
const
void
*
idxData
,
short
idxSize
,
ULONG
minIndex
,
ULONG
startIdx
)
{
...
@@ -1555,7 +1555,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, Direct3DVertexStridedData *sd
...
@@ -1555,7 +1555,7 @@ static void drawStridedSlow(IWineD3DDevice *iface, Direct3DVertexStridedData *sd
* Note: strided data is uninitialized, as we need to pass the vertex
* Note: strided data is uninitialized, as we need to pass the vertex
* shader directly as ordering irs yet
* shader directly as ordering irs yet
*/
*/
void drawStridedSoftwareVS(IWineD3DDevice *iface, Direct3DVertexStridedData *sd,
void drawStridedSoftwareVS(IWineD3DDevice *iface,
Wine
Direct3DVertexStridedData *sd,
int PrimitiveType, ULONG NumPrimitives,
int PrimitiveType, ULONG NumPrimitives,
const void *idxData, short idxSize, ULONG minIndex, ULONG startIdx) {
const void *idxData, short idxSize, ULONG minIndex, ULONG startIdx) {
...
@@ -1692,7 +1692,7 @@ void drawStridedSoftwareVS(IWineD3DDevice *iface, Direct3DVertexStridedData *sd,
...
@@ -1692,7 +1692,7 @@ void drawStridedSoftwareVS(IWineD3DDevice *iface, Direct3DVertexStridedData *sd,
#endif
#endif
void
inline
drawPrimitiveDrawStrided
(
IWineD3DDevice
*
iface
,
BOOL
useVertexShaderFunction
,
BOOL
usePixelShaderFunction
,
int
useHW
,
Direct3DVertexStridedData
*
dataLocations
,
void
inline
drawPrimitiveDrawStrided
(
IWineD3DDevice
*
iface
,
BOOL
useVertexShaderFunction
,
BOOL
usePixelShaderFunction
,
int
useHW
,
Wine
Direct3DVertexStridedData
*
dataLocations
,
UINT
numberOfvertices
,
UINT
numberOfIndicies
,
GLenum
glPrimType
,
const
void
*
idxData
,
short
idxSize
,
int
minIndex
,
long
StartIdx
)
{
UINT
numberOfvertices
,
UINT
numberOfIndicies
,
GLenum
glPrimType
,
const
void
*
idxData
,
short
idxSize
,
int
minIndex
,
long
StartIdx
)
{
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
IWineD3DDeviceImpl
*
This
=
(
IWineD3DDeviceImpl
*
)
iface
;
...
@@ -1909,7 +1909,7 @@ UINT numberOfvertices, UINT numberOfIndicies, GLenum glPrimType, const void *idx
...
@@ -1909,7 +1909,7 @@ UINT numberOfvertices, UINT numberOfIndicies, GLenum glPrimType, const void *idx
}
}
}
}
void
inline
drawPrimitiveTraceDataLocations
(
Direct3DVertexStridedData
*
dataLocations
,
DWORD
fvf
)
{
void
inline
drawPrimitiveTraceDataLocations
(
Wine
Direct3DVertexStridedData
*
dataLocations
,
DWORD
fvf
)
{
/* Dump out what parts we have supplied */
/* Dump out what parts we have supplied */
TRACE
(
"Strided Data (from FVF/VS): %lx
\n
"
,
fvf
);
TRACE
(
"Strided Data (from FVF/VS): %lx
\n
"
,
fvf
);
...
@@ -2042,15 +2042,16 @@ void inline drawPrimitiveUploadTextures(IWineD3DDeviceImpl* This) {
...
@@ -2042,15 +2042,16 @@ void inline drawPrimitiveUploadTextures(IWineD3DDeviceImpl* This) {
/* Routine common to the draw primitive and draw indexed primitive routines */
/* Routine common to the draw primitive and draw indexed primitive routines */
void
drawPrimitive
(
IWineD3DDevice
*
iface
,
void
drawPrimitive
(
IWineD3DDevice
*
iface
,
int
PrimitiveType
,
int
PrimitiveType
,
long
NumPrimitives
,
long
NumPrimitives
,
/* for Indexed: */
/* for Indexed: */
long
StartVertexIndex
,
long
StartVertexIndex
,
UINT
numberOfVertices
,
UINT
numberOfVertices
,
long
StartIdx
,
long
StartIdx
,
short
idxSize
,
short
idxSize
,
const
void
*
idxData
,
const
void
*
idxData
,
int
minIndex
)
{
int
minIndex
,
WineDirect3DVertexStridedData
*
DrawPrimStrideData
)
{
BOOL
rc
=
FALSE
;
BOOL
rc
=
FALSE
;
DWORD
fvf
=
0
;
DWORD
fvf
=
0
;
...
@@ -2058,7 +2059,7 @@ void drawPrimitive(IWineD3DDevice *iface,
...
@@ -2058,7 +2059,7 @@ void drawPrimitive(IWineD3DDevice *iface,
BOOL
useVertexShaderFunction
=
FALSE
;
BOOL
useVertexShaderFunction
=
FALSE
;
BOOL
usePixelShaderFunction
=
FALSE
;
BOOL
usePixelShaderFunction
=
FALSE
;
BOOL
isLightingOn
=
FALSE
;
BOOL
isLightingOn
=
FALSE
;
Direct3DVertexStridedData
dataLocations
;
WineDirect3DVertexStridedData
*
dataLocations
;
int
useHW
=
FALSE
;
int
useHW
=
FALSE
;
if
(
This
->
stateBlock
->
vertexShader
!=
NULL
&&
wined3d_settings
.
vs_mode
!=
VS_NONE
if
(
This
->
stateBlock
->
vertexShader
!=
NULL
&&
wined3d_settings
.
vs_mode
!=
VS_NONE
...
@@ -2086,23 +2087,35 @@ void drawPrimitive(IWineD3DDevice *iface,
...
@@ -2086,23 +2087,35 @@ void drawPrimitive(IWineD3DDevice *iface,
/* Ok, we will be updating the screen from here onwards so grab the lock */
/* Ok, we will be updating the screen from here onwards so grab the lock */
ENTER_GL
();
ENTER_GL
();
/* Initialize all values to null */
memset
(
&
dataLocations
,
0x00
,
sizeof
(
dataLocations
));
/* convert the FVF or vertexDeclaration into a strided stream (this should be done when the fvf or declaration is created) */
/* convert the FVF or vertexDeclaration into a strided stream (this should be done when the fvf or declaration is created) */
if
(
This
->
stateBlock
->
vertexDecl
!=
NULL
||
(
useVertexShaderFunction
&&
NULL
!=
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
vertexDeclaration
))
{
if
(
DrawPrimStrideData
)
{
TRACE
(
"================ Strided Input ===================
\n
"
);
dataLocations
=
DrawPrimStrideData
;
}
else
if
(
This
->
stateBlock
->
vertexDecl
!=
NULL
||
(
useVertexShaderFunction
&&
NULL
!=
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
vertexDeclaration
))
{
BOOL
storeArrays
=
useVertexShaderFunction
&&
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
declaredArrays
==
FALSE
&&
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
namedArrays
==
FALSE
;
BOOL
storeArrays
=
useVertexShaderFunction
&&
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
declaredArrays
==
FALSE
&&
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
namedArrays
==
FALSE
;
TRACE
(
"================ Vertex Declaration ===================
\n
"
);
TRACE
(
"================ Vertex Declaration ===================
\n
"
);
primitiveDeclarationConvertToStridedData
(
iface
,
useVertexShaderFunction
,
&
dataLocations
,
StartVertexIndex
,
&
fvf
,
storeArrays
,
dataLocations
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
dataLocations
));
if
(
!
dataLocations
)
{
ERR
(
"Out of memory!
\n
"
);
return
;
}
primitiveDeclarationConvertToStridedData
(
iface
,
useVertexShaderFunction
,
dataLocations
,
StartVertexIndex
,
&
fvf
,
storeArrays
,
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
arrayUsageMap
);
((
IWineD3DVertexShaderImpl
*
)
This
->
stateBlock
->
vertexShader
)
->
arrayUsageMap
);
}
else
{
}
else
{
TRACE
(
"================ FVF ===================
\n
"
);
TRACE
(
"================ FVF ===================
\n
"
);
primitiveConvertToStridedData
(
iface
,
&
dataLocations
,
StartVertexIndex
);
dataLocations
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
*
dataLocations
));
if
(
!
dataLocations
)
{
ERR
(
"Out of memory!
\n
"
);
return
;
}
primitiveConvertToStridedData
(
iface
,
dataLocations
,
StartVertexIndex
);
}
}
/* write out some debug information*/
/* write out some debug information*/
drawPrimitiveTraceDataLocations
(
&
dataLocations
,
fvf
);
drawPrimitiveTraceDataLocations
(
dataLocations
,
fvf
);
/* Setup transform matrices and sort out */
/* Setup transform matrices and sort out */
if
(
useHW
)
{
if
(
useHW
)
{
...
@@ -2120,7 +2133,7 @@ void drawPrimitive(IWineD3DDevice *iface,
...
@@ -2120,7 +2133,7 @@ void drawPrimitive(IWineD3DDevice *iface,
}
}
/* Now initialize the materials state */
/* Now initialize the materials state */
init_materials
(
iface
,
(
dataLocations
.
u
.
s
.
diffuse
.
lpData
!=
NULL
));
init_materials
(
iface
,
(
dataLocations
->
u
.
s
.
diffuse
.
lpData
!=
NULL
));
drawPrimitiveUploadTextures
(
This
);
drawPrimitiveUploadTextures
(
This
);
...
@@ -2137,9 +2150,11 @@ void drawPrimitive(IWineD3DDevice *iface,
...
@@ -2137,9 +2150,11 @@ void drawPrimitive(IWineD3DDevice *iface,
#endif
#endif
if
(
numberOfVertices
==
0
)
if
(
numberOfVertices
==
0
)
numberOfVertices
=
calculatedNumberOfindices
;
numberOfVertices
=
calculatedNumberOfindices
;
drawPrimitiveDrawStrided
(
iface
,
useVertexShaderFunction
,
usePixelShaderFunction
,
useHW
,
&
dataLocations
,
numberOfVertices
,
calculatedNumberOfindices
,
glPrimType
,
idxData
,
idxSize
,
minIndex
,
StartIdx
);
drawPrimitiveDrawStrided
(
iface
,
useVertexShaderFunction
,
usePixelShaderFunction
,
useHW
,
dataLocations
,
numberOfVertices
,
calculatedNumberOfindices
,
glPrimType
,
idxData
,
idxSize
,
minIndex
,
StartIdx
);
}
}
if
(
!
DrawPrimStrideData
)
HeapFree
(
GetProcessHeap
(),
0
,
dataLocations
);
/* If vertex shaders or no normals, restore previous lighting state */
/* If vertex shaders or no normals, restore previous lighting state */
if
(
useVertexShaderFunction
||
!
(
fvf
&
D3DFVF_NORMAL
))
{
if
(
useVertexShaderFunction
||
!
(
fvf
&
D3DFVF_NORMAL
))
{
if
(
isLightingOn
)
glEnable
(
GL_LIGHTING
);
if
(
isLightingOn
)
glEnable
(
GL_LIGHTING
);
...
...
dlls/wined3d/wined3d_private.h
View file @
a173c8e3
...
@@ -375,47 +375,14 @@ void drawPrimitive(IWineD3DDevice *iface,
...
@@ -375,47 +375,14 @@ void drawPrimitive(IWineD3DDevice *iface,
long
StartIdx
,
long
StartIdx
,
short
idxBytes
,
short
idxBytes
,
const
void
*
idxData
,
const
void
*
idxData
,
int
minIndex
);
int
minIndex
,
WineDirect3DVertexStridedData
*
DrawPrimStrideData
);
/* Routine to fill gl caps for swapchains and IWineD3D */
/* Routine to fill gl caps for swapchains and IWineD3D */
BOOL
IWineD3DImpl_FillGLCaps
(
WineD3D_GL_Info
*
gl_info
,
BOOL
IWineD3DImpl_FillGLCaps
(
WineD3D_GL_Info
*
gl_info
,
Display
*
display
);
Display
*
display
);
/*****************************************************************************
/*****************************************************************************
* Structures required to draw primitives
*/
typedef
struct
Direct3DStridedData
{
BYTE
*
lpData
;
/* Pointer to start of data */
DWORD
dwStride
;
/* Stride between occurances of this data */
DWORD
dwType
;
/* Type (as in D3DVSDT_TYPE) */
}
Direct3DStridedData
;
typedef
struct
Direct3DVertexStridedData
{
union
{
struct
{
Direct3DStridedData
position
;
Direct3DStridedData
blendWeights
;
Direct3DStridedData
blendMatrixIndices
;
Direct3DStridedData
normal
;
Direct3DStridedData
pSize
;
Direct3DStridedData
diffuse
;
Direct3DStridedData
specular
;
Direct3DStridedData
texCoords
[
MAX_TEXTURES
];
Direct3DStridedData
position2
;
/* tween data */
Direct3DStridedData
normal2
;
/* tween data */
Direct3DStridedData
tangent
;
Direct3DStridedData
binormal
;
Direct3DStridedData
tessFactor
;
Direct3DStridedData
fog
;
Direct3DStridedData
depth
;
Direct3DStridedData
sample
;
}
s
;
Direct3DStridedData
input
[
16
];
/* Indexed by constants in D3DVSDE_REGISTER */
}
u
;
}
Direct3DVertexStridedData
;
/*****************************************************************************
* Internal representation of a light
* Internal representation of a light
*/
*/
typedef
struct
PLIGHTINFOEL
PLIGHTINFOEL
;
typedef
struct
PLIGHTINFOEL
PLIGHTINFOEL
;
...
...
include/wine/wined3d_interface.h
View file @
a173c8e3
...
@@ -491,6 +491,7 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)
...
@@ -491,6 +491,7 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)
STDMETHOD
(
DrawIndexedPrimitive
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
INT
baseVIdx
,
UINT
minIndex
,
UINT
NumVertices
,
UINT
startIndex
,
UINT
primCount
)
PURE
;
STDMETHOD
(
DrawIndexedPrimitive
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
INT
baseVIdx
,
UINT
minIndex
,
UINT
NumVertices
,
UINT
startIndex
,
UINT
primCount
)
PURE
;
STDMETHOD
(
DrawPrimitiveUP
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
UINT
PrimitiveCount
,
CONST
void
*
pVertexStreamZeroData
,
UINT
VertexStreamZeroStride
)
PURE
;
STDMETHOD
(
DrawPrimitiveUP
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
UINT
PrimitiveCount
,
CONST
void
*
pVertexStreamZeroData
,
UINT
VertexStreamZeroStride
)
PURE
;
STDMETHOD
(
DrawIndexedPrimitiveUP
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
UINT
MinVertexIndex
,
UINT
NumVertexIndices
,
UINT
PrimitiveCount
,
CONST
void
*
pIndexData
,
WINED3DFORMAT
IndexDataFormat
,
CONST
void
*
pVertexStreamZeroData
,
UINT
VertexStreamZeroStride
)
PURE
;
STDMETHOD
(
DrawIndexedPrimitiveUP
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
UINT
MinVertexIndex
,
UINT
NumVertexIndices
,
UINT
PrimitiveCount
,
CONST
void
*
pIndexData
,
WINED3DFORMAT
IndexDataFormat
,
CONST
void
*
pVertexStreamZeroData
,
UINT
VertexStreamZeroStride
)
PURE
;
STDMETHOD
(
DrawPrimitiveStrided
)(
THIS_
D3DPRIMITIVETYPE
PrimitiveType
,
UINT
PrimitiveCount
,
WineDirect3DVertexStridedData
*
DrawPrimStrideData
)
PURE
;
STDMETHOD
(
DrawRectPatch
)(
THIS_
UINT
Handle
,
CONST
float
*
pNumSegs
,
CONST
WINED3DRECTPATCH_INFO
*
pRectPatchInfo
)
PURE
;
STDMETHOD
(
DrawRectPatch
)(
THIS_
UINT
Handle
,
CONST
float
*
pNumSegs
,
CONST
WINED3DRECTPATCH_INFO
*
pRectPatchInfo
)
PURE
;
STDMETHOD
(
DrawTriPatch
)(
THIS_
UINT
Handle
,
CONST
float
*
pNumSegs
,
CONST
WINED3DTRIPATCH_INFO
*
pTriPatchInfo
)
PURE
;
STDMETHOD
(
DrawTriPatch
)(
THIS_
UINT
Handle
,
CONST
float
*
pNumSegs
,
CONST
WINED3DTRIPATCH_INFO
*
pTriPatchInfo
)
PURE
;
STDMETHOD
(
DeletePatch
)(
THIS_
UINT
Handle
)
PURE
;
STDMETHOD
(
DeletePatch
)(
THIS_
UINT
Handle
)
PURE
;
...
@@ -639,6 +640,7 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)
...
@@ -639,6 +640,7 @@ DECLARE_INTERFACE_(IWineD3DDevice,IWineD3DBase)
#define IWineD3DDevice_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
#define IWineD3DDevice_DrawIndexedPrimitive(p,a,b,c,d,e,f) (p)->lpVtbl->DrawIndexedPrimitive(p,a,b,c,d,e,f)
#define IWineD3DDevice_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
#define IWineD3DDevice_DrawPrimitiveUP(p,a,b,c,d) (p)->lpVtbl->DrawPrimitiveUP(p,a,b,c,d)
#define IWineD3DDevice_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
#define IWineD3DDevice_DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h) (p)->lpVtbl->DrawIndexedPrimitiveUP(p,a,b,c,d,e,f,g,h)
#define IWineD3DDevice_DrawPrimitiveStrided(p,a,b,c) (p)->lpVtbl->DrawPrimitiveStrided(p,a,b,c)
#define IWineD3DDevice_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
#define IWineD3DDevice_DrawRectPatch(p,a,b,c) (p)->lpVtbl->DrawRectPatch(p,a,b,c)
#define IWineD3DDevice_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
#define IWineD3DDevice_DrawTriPatch(p,a,b,c) (p)->lpVtbl->DrawTriPatch(p,a,b,c)
#define IWineD3DDevice_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
#define IWineD3DDevice_DeletePatch(p,a) (p)->lpVtbl->DeletePatch(p,a)
...
...
include/wine/wined3d_types.h
View file @
a173c8e3
...
@@ -870,6 +870,59 @@ typedef struct glDescriptor {
...
@@ -870,6 +870,59 @@ typedef struct glDescriptor {
int
/*GLenum*/
glFormatInternal
;
int
/*GLenum*/
glFormatInternal
;
int
/*GLenum*/
glType
;
int
/*GLenum*/
glType
;
}
glDescriptor
;
}
glDescriptor
;
typedef
enum
_WINED3DDECLTYPE
{
WINED3DDECLTYPE_FLOAT1
=
0
,
WINED3DDECLTYPE_FLOAT2
=
1
,
WINED3DDECLTYPE_FLOAT3
=
2
,
WINED3DDECLTYPE_FLOAT4
=
3
,
WINED3DDECLTYPE_D3DCOLOR
=
4
,
WINED3DDECLTYPE_UBYTE4
=
5
,
WINED3DDECLTYPE_SHORT2
=
6
,
WINED3DDECLTYPE_SHORT4
=
7
,
/* VS 2.0 */
WINED3DDECLTYPE_UBYTE4N
=
8
,
WINED3DDECLTYPE_SHORT2N
=
9
,
WINED3DDECLTYPE_SHORT4N
=
10
,
WINED3DDECLTYPE_USHORT2N
=
11
,
WINED3DDECLTYPE_USHORT4N
=
12
,
WINED3DDECLTYPE_UDEC3
=
13
,
WINED3DDECLTYPE_DEC3N
=
14
,
WINED3DDECLTYPE_FLOAT16_2
=
15
,
WINED3DDECLTYPE_FLOAT16_4
=
16
,
WINED3DDECLTYPE_UNUSED
=
17
,
}
WINED3DDECLTYPE
;
typedef
struct
WineDirect3DStridedData
{
BYTE
*
lpData
;
/* Pointer to start of data */
DWORD
dwStride
;
/* Stride between occurances of this data */
DWORD
dwType
;
/* Type (as in D3DVSDT_TYPE) */
}
WineDirect3DStridedData
;
typedef
struct
WineDirect3DVertexStridedData
{
union
{
struct
{
WineDirect3DStridedData
position
;
WineDirect3DStridedData
blendWeights
;
WineDirect3DStridedData
blendMatrixIndices
;
WineDirect3DStridedData
normal
;
WineDirect3DStridedData
pSize
;
WineDirect3DStridedData
diffuse
;
WineDirect3DStridedData
specular
;
WineDirect3DStridedData
texCoords
[
D3DDP_MAXTEXCOORD
];
WineDirect3DStridedData
position2
;
/* tween data */
WineDirect3DStridedData
normal2
;
/* tween data */
WineDirect3DStridedData
tangent
;
WineDirect3DStridedData
binormal
;
WineDirect3DStridedData
tessFactor
;
WineDirect3DStridedData
fog
;
WineDirect3DStridedData
depth
;
WineDirect3DStridedData
sample
;
}
s
;
WineDirect3DStridedData
input
[
16
];
/* Indexed by constants in D3DVSDE_REGISTER */
}
u
;
}
WineDirect3DVertexStridedData
;
/****************************
/****************************
* * Vertex Shaders Declaration
* * Vertex Shaders Declaration
* */
* */
...
...
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