Skip to content

Commit 0ef0e08

Browse files
committed
Visuals: Add OpenGL implementations.
1 parent d62c8e8 commit 0ef0e08

File tree

5 files changed

+105
-36
lines changed

5 files changed

+105
-36
lines changed

src/Layers/xrRender/FBasicVisual.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,14 @@
1717
//////////////////////////////////////////////////////////////////////
1818

1919
IRender_Mesh::~IRender_Mesh()
20-
{
21-
_RELEASE(p_rm_Vertices);
22-
_RELEASE(p_rm_Indices);
20+
{
21+
#ifdef USE_OGL
22+
GLuint buffers[] = { p_rm_Vertices, p_rm_Indices };
23+
glDeleteBuffers(2, buffers);
24+
#else
25+
_RELEASE(p_rm_Vertices);
26+
_RELEASE(p_rm_Indices);
27+
#endif // USE_OGL
2328
}
2429

2530
dxRender_Visual::dxRender_Visual ()

src/Layers/xrRender/FSkinned.cpp

Lines changed: 42 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,11 @@
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;
10371066
case RM_SINGLE:
10381067
case 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

10731102
void 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;

src/Layers/xrRender/FTreeVisual.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,9 @@ void FTreeVisual::Load (const char* N, IReader *data, u32 dwFlags)
4747
VERIFY (NULL==p_rm_Vertices);
4848

4949
p_rm_Vertices = RImplementation.getVB (ID);
50+
#ifndef USE_OGL
5051
p_rm_Vertices->AddRef();
52+
#endif // !USE_OGL
5153

5254
// indices
5355
dwPrimitives = 0;
@@ -58,7 +60,9 @@ void FTreeVisual::Load (const char* N, IReader *data, u32 dwFlags)
5860

5961
VERIFY (NULL==p_rm_Indices);
6062
p_rm_Indices = RImplementation.getIB (ID);
63+
#ifndef USE_OGL
6164
p_rm_Indices->AddRef ();
65+
#endif // !USE_OGL
6266
}
6367

6468
// load tree-def
@@ -147,12 +151,18 @@ void FTreeVisual::Copy (dxRender_Visual *pSrc)
147151

148152
PCOPY(rm_geom);
149153

150-
PCOPY(p_rm_Vertices); if (p_rm_Vertices) p_rm_Vertices->AddRef();
154+
PCOPY(p_rm_Vertices);
155+
#ifndef USE_OGL
156+
if (p_rm_Vertices) p_rm_Vertices->AddRef();
157+
#endif // !USE_OGL
151158

152159
PCOPY(vBase);
153160
PCOPY(vCount);
154161

155-
PCOPY(p_rm_Indices); if (p_rm_Indices) p_rm_Indices->AddRef();
162+
PCOPY(p_rm_Indices);
163+
#ifndef USE_OGL
164+
if (p_rm_Indices) p_rm_Indices->AddRef();
165+
#endif // !USE_OGL
156166

157167
PCOPY(iBase);
158168
PCOPY(iCount);

0 commit comments

Comments
 (0)