11#include " stdafx.h"
22#pragma hdrstop
33
4- #pragma warning(disable:4995)
5- #include < d3dx9.h>
6- #pragma warning(default:4995)
7-
84#include " xrCore/FMesh.hpp"
95#include " FSkinned.h"
106#include " SkeletonX.h"
117#include " Layers/xrRenderDX10/dx10BufferUtils.h"
8+ #include " Layers/xrRenderGL/glBufferUtils.h"
129#include " xrEngine/EnnumerateVertices.h"
1310// ////////////////////////////////////////////////////////////////////
1411// Construction/Destruction
@@ -417,7 +414,11 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
417414 Vertices1W.create ( crc, V.vCount , (vertBoned1W*)_verts_);
418415 }
419416
420- u32 vStride = D3DXGetDeclVertexSize (dwDecl_01W,0 );
417+ #ifdef USE_OGL
418+ u32 vStride = glBufferUtils::GetDeclVertexSize (dwDecl_01W);
419+ #else
420+ u32 vStride = D3DXGetDeclVertexSize (dwDecl_01W, 0 );
421+ #endif // USE_OGL
421422 VERIFY (vStride==sizeof (vertHW_1W));
422423// BYTE* bytes = 0;
423424 VERIFY (NULL ==V.p_rm_Vertices );
@@ -443,8 +444,12 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
443444 dst++; src++;
444445 }
445446 // R_CHK (HW.pDevice->CreateVertexBuffer(V.vCount*vStride,dwUsage,0,D3DPOOL_MANAGED,&V.p_rm_Vertices,0));
447+ #ifdef USE_OGL
448+ glBufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride);
449+ #else
446450 R_CHK (dx10BufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride));
447451 HW.stats_manager .increment_stats_vb (V.p_rm_Vertices );
452+ #endif // USE_OGL
448453 xr_free (dstOriginal);
449454
450455 V.rm_geom .create (dwDecl_01W, V.p_rm_Vertices , V.p_rm_Indices );
@@ -458,7 +463,11 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
458463 Vertices2W.create ( crc, V.vCount , (vertBoned2W*)_verts_);
459464 }
460465
466+ #ifdef USE_OGL
467+ u32 vStride = glBufferUtils::GetDeclVertexSize (dwDecl_2W);
468+ #else
461469 u32 vStride = D3DXGetDeclVertexSize (dwDecl_2W,0 );
470+ #endif // USE_OGL
462471 VERIFY (vStride==sizeof (vertHW_2W));
463472// BYTE* bytes = 0;
464473 VERIFY (NULL ==V.p_rm_Vertices );
@@ -485,8 +494,12 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
485494 dst->set (src->P ,src->N ,src->T ,src->B ,uv,int (src->matrix0 )*3 ,int (src->matrix1 )*3 ,src->w );
486495 dst++; src++;
487496 }
497+ #ifdef USE_OGL
498+ glBufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride);
499+ #else
488500 R_CHK (dx10BufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride));
489501 HW.stats_manager .increment_stats_vb (V.p_rm_Vertices );
502+ #endif // USE_OGL
490503 xr_free (dstOriginal);
491504
492505 V.rm_geom .create (dwDecl_2W, V.p_rm_Vertices , V.p_rm_Indices );
@@ -499,7 +512,11 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
499512 Vertices3W.create ( crc, V.vCount , (vertBoned3W*)_verts_);
500513 }
501514
515+ #ifdef USE_OGL
516+ u32 vStride = glBufferUtils::GetDeclVertexSize (dwDecl_3W);
517+ #else
502518 u32 vStride = D3DXGetDeclVertexSize (dwDecl_3W,0 );
519+ #endif // USE_OGL
503520 VERIFY (vStride==sizeof (vertHW_3W));
504521// BYTE* bytes = 0;
505522 VERIFY (NULL ==V.p_rm_Vertices );
@@ -529,8 +546,12 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
529546 dst++;
530547 src++;
531548 }
549+ #ifdef USE_OGL
550+ glBufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride);
551+ #else
532552 R_CHK (dx10BufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride));
533553 HW.stats_manager .increment_stats_vb (V.p_rm_Vertices );
554+ #endif // USE_OGL
534555 xr_free (dstOriginal);
535556
536557 V.rm_geom .create (dwDecl_3W, V.p_rm_Vertices , V.p_rm_Indices );
@@ -543,7 +564,11 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
543564 Vertices4W.create ( crc, V.vCount , (vertBoned4W*)_verts_);
544565 }
545566
567+ #ifdef USE_OGL
568+ u32 vStride = glBufferUtils::GetDeclVertexSize (dwDecl_4W);
569+ #else
546570 u32 vStride = D3DXGetDeclVertexSize (dwDecl_4W,0 );
571+ #endif // USE_OGL
547572 VERIFY (vStride==sizeof (vertHW_4W));
548573// BYTE* bytes = 0;
549574 VERIFY (NULL ==V.p_rm_Vertices );
@@ -573,8 +598,12 @@ void CSkeletonX_ext::_Load_hw (Fvisual& V, void * _verts_)
573598 dst++;
574599 src++;
575600 }
601+ #ifdef USE_OGL
602+ glBufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride);
603+ #else
576604 R_CHK (dx10BufferUtils::CreateVertexBuffer (&V.p_rm_Vertices , dstOriginal, V.vCount *vStride));
577605 HW.stats_manager .increment_stats_vb (V.p_rm_Vertices );
606+ #endif // USE_OGL
578607 xr_free (dstOriginal);
579608
580609 V.rm_geom .create (dwDecl_4W, V.p_rm_Vertices , V.p_rm_Indices );
@@ -716,15 +745,15 @@ void CSkeletonX_ext::_CollectBoneFaces(Fvisual* V, u32 iBase, u32 iCount)
716745{
717746 u16 * indices = 0 ;
718747
719- #if defined(USE_DX10) || defined(USE_DX11)
748+ #if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL)
720749 indices = *m_Indices;
721750#else // USE_DX10
722751 R_CHK (V->p_rm_Indices ->Lock (0 ,V->dwPrimitives *3 ,(void **)&indices,D3DLOCK_READONLY));
723752#endif // USE_DX10
724753
725754 indices += iBase;
726755
727- #if !defined(USE_DX10) && !defined(USE_DX11) // Don't use hardware buffers in DX10 since we can't read them
756+ #if !defined(USE_DX10) && !defined(USE_DX11) && !defined(USE_OGL) // Don't use hardware buffers in DX10 since we can't read them
728757 switch (RenderMode)
729758 {
730759 case RM_SKINNING_SOFT:
@@ -796,7 +825,7 @@ void CSkeletonX_ext::_CollectBoneFaces(Fvisual* V, u32 iBase, u32 iCount)
796825 R_ASSERT2 (0 ," not implemented yet" );
797826 }
798827
799- #if !defined(USE_DX10) && !defined(USE_DX11) // Don't use hardware buffers in DX10 since we can't read them
828+ #if !defined(USE_DX10) && !defined(USE_DX11) && !defined(USE_OGL) // Don't use hardware buffers in DX10 since we can't read them
800829 break ;
801830 case RM_SINGLE:
802831 case RM_SKINNING_1B:
@@ -1011,7 +1040,7 @@ BOOL CSkeletonX_ext::_PickBone (IKinematics::pick_result &r, float dist, const
10111040 CBoneData::FacesVec* faces = &BD.child_faces [ChildIDX];
10121041 BOOL result = FALSE ;
10131042 u16 * indices = 0 ;
1014- #if defined(USE_DX10) || defined(USE_DX11)
1043+ #if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL)
10151044 indices = *m_Indices;
10161045#else // USE_DX10
10171046 CHK_DX (V->p_rm_Indices ->Lock (0 ,V->dwPrimitives *3 ,(void **)&indices,D3DLOCK_READONLY));
@@ -1032,7 +1061,7 @@ case RM_SKINNING_SOFT:
10321061 result = _PickBoneSoft4W (r,dist,start,dir,indices+iBase,*faces);
10331062 }
10341063
1035- #if !defined(USE_DX10) && !defined(USE_DX11)
1064+ #if !defined(USE_DX10) && !defined(USE_DX11) && !defined(USE_OGL)
10361065 break ;
10371066case RM_SINGLE:
10381067case RM_SKINNING_1B: result = _PickBoneHW1W (r,dist,start,dir,V,indices+iBase,*faces); break ;
@@ -1068,7 +1097,7 @@ void CSkeletonX_PM:: EnumBoneVertices( SEnumVerticesCallback &C, u16 bone_id )
10681097 inherited2::_EnumBoneVertices ( C, this , bone_id, iBase+SW.offset , SW.num_tris *3 );
10691098}
10701099
1071- #if defined(USE_DX10) || defined(USE_DX11)
1100+ #if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL)
10721101
10731102void CSkeletonX_ext::_FillVerticesHW1W (const Fmatrix& view, CSkeletonWallmark& wm, const Fvector& normal, float size, Fvisual* V, u16 * indices, CBoneData::FacesVec& faces)
10741103{
@@ -1300,7 +1329,7 @@ void CSkeletonX_ext::_EnumBoneVertices ( SEnumVerticesCallback &C, Fvisual* V, u
13001329 u16 * indices = 0 ;
13011330 // . R_CHK (V->pIndices->Lock(iBase,iCount, (void**)&indices, D3DLOCK_READONLY));
13021331
1303- #if defined(USE_DX10) || defined(USE_DX11)
1332+ #if defined(USE_DX10) || defined(USE_DX11) || defined(USE_OGL)
13041333 VERIFY (*m_Indices);
13051334 indices = *m_Indices;
13061335#else USE_DX10
@@ -1323,7 +1352,7 @@ void CSkeletonX_ext::_EnumBoneVertices ( SEnumVerticesCallback &C, Fvisual* V, u
13231352 VERIFY ( !!(*Vertices4W) );
13241353 TEnumBoneVertices ( Vertices4W, indices+iBase, *faces, C );
13251354 }
1326- #if !defined(USE_DX10) && !defined(USE_DX11)
1355+ #if !defined(USE_DX10) && !defined(USE_DX11) && !defined(USE_OGL)
13271356 break ;
13281357 case RM_SINGLE:
13291358 case RM_SKINNING_1B: TEnumBoneVertices ( (vertHW_1W*)vertices, indices+iBase, *faces, C );break ;
0 commit comments