wined3d: Take EXT_vertex_array_bgra into account in send_attribute() and loadNumberedArrays().
Henri Verbeet
hverbeet at codeweavers.com
Fri Jan 23 03:22:33 CST 2009
---
dlls/wined3d/drawprim.c | 12 +++++++++++-
dlls/wined3d/state.c | 12 +++++++++++-
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 929565f..c9a8f4a 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -534,8 +534,18 @@ static inline void send_attribute(IWineD3DDeviceImpl *This, const DWORD type, co
case WINED3DDECLTYPE_UBYTE4:
GL_EXTCALL(glVertexAttrib4ubvARB(index, ptr));
break;
- case WINED3DDECLTYPE_UBYTE4N:
case WINED3DDECLTYPE_D3DCOLOR:
+ if (GL_SUPPORT(EXT_VERTEX_ARRAY_BGRA))
+ {
+ const DWORD *src = ptr;
+ DWORD c = *src & 0xff00ff00;
+ c |= (*src & 0xff0000) >> 16;
+ c |= (*src & 0xff) << 16;
+ GL_EXTCALL(glVertexAttrib4NubvARB(index, (GLubyte *)&c));
+ break;
+ }
+ /* else fallthrough */
+ case WINED3DDECLTYPE_UBYTE4N:
GL_EXTCALL(glVertexAttrib4NubvARB(index, ptr));
break;
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index b15eacc..ce85403 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -3925,8 +3925,18 @@ static inline void loadNumberedArrays(IWineD3DStateBlockImpl *stateblock,
case WINED3DDECLTYPE_UBYTE4:
GL_EXTCALL(glVertexAttrib4NubvARB(i, ptr));
break;
- case WINED3DDECLTYPE_UBYTE4N:
case WINED3DDECLTYPE_D3DCOLOR:
+ if (GL_SUPPORT(EXT_VERTEX_ARRAY_BGRA))
+ {
+ const DWORD *src = (const DWORD *)ptr;
+ DWORD c = *src & 0xff00ff00;
+ c |= (*src & 0xff0000) >> 16;
+ c |= (*src & 0xff) << 16;
+ GL_EXTCALL(glVertexAttrib4NubvARB(i, (GLubyte *)&c));
+ break;
+ }
+ /* else fallthrough */
+ case WINED3DDECLTYPE_UBYTE4N:
GL_EXTCALL(glVertexAttrib4NubvARB(i, ptr));
break;
--
1.6.0.6
--------------070903070008040101050400--
More information about the wine-patches
mailing list