DI-Guy SDK Documentation  13.8
diguyOsgGraphicsInstanceGroup.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2024 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
6 #ifndef __diguyOsgGraphicsInstanceGroup_H
7 #define __diguyOsgGraphicsInstanceGroup_H
8 
9 /*
10  * Note: Requires OSG 3.2 or greater for texture buffer object support.
11  */
12 
13 #include <osg/Version>
14 
15 /*
16  * OSG > 3.2.0 has native support for texture buffer objects
17  * via osg::TextureBuffer. For versions of OSG prior to 3.2.0,
18  * support for texture buffer objects is provided in the classes
19  * diguyOsgTextureBufferObject and diguyOsgTextureBufferApplyAttribute.
20  */
21 #if OSG_MIN_VERSION_REQUIRED(3,2,0)
22 #define USE_OSG_TEXTURE_BUFFER 1
23 #else
24 #endif
25 
26 #if USE_OSG_TEXTURE_BUFFER
27 #include <osg/TextureBuffer>
28 #endif
29 
32 
33 #include <osg/Geode>
35 
36 
57 {
58 public:
59  diguyOsgGraphicsInstanceGroup(void* internal_data);
61 
62  virtual void build() override;
63  virtual void unbuild() override;
64  virtual void update() override;
65 
66 private:
67  void create_and_add_shared_tbo_to_state_set(osg::StateSet& state_set);
68  void build_shared_tbo();
69 
70  // All instance groups attached to this node.
71  static osg::ref_ptr<osg::Group> s_shared_tbo_node;
72 
73 #ifdef USE_OSG_TEXTURE_BUFFER
74  // Shared TBO OSG version >= 3.2.0
75  static osg::ref_ptr<osg::TextureBuffer> s_osg_texture_buffer;
76  static osg::ref_ptr<osg::Image> s_osg_image;
77 #else
78  // Shared TBO OSG version < 3.2.0
80  static osg::ref_ptr<diguyOsgTextureBufferObjectApplyAttribute> s_diguy_texture_buffer_attribute;
81 #endif
82 
83  osg::ref_ptr<osg::Geode> m_geode;
84  osg::ref_ptr<osg::Geometry> m_geometry;
85  osg::ref_ptr<osg::PrimitiveSet> m_primitiveSet;
86 
87  osg::ref_ptr<osg::Uniform> ufrm_base_matrices_start;
88  osg::ref_ptr<osg::Uniform> ufrm_link_matrices_start;
89  osg::ref_ptr<osg::Uniform> ufrm_link_matrices_count;
90  osg::ref_ptr<osg::Uniform> ufrm_extra_per_instance_data;
91  osg::ref_ptr<osg::Uniform> ufrm_apply_matrices_flag;
92  osg::ref_ptr<osg::Uniform> ufrm_instance_group_color;
93 };
94 
95 
102 
103 #endif __diguyOsgGraphicsInstanceGroup_H
static osg::ref_ptr< osg::Group > s_shared_tbo_node
Definition: diguyOsgGraphicsInstanceGroup.h:70
A class that represents an instance group. An instance group is a collection of meshes, attached to shapes, that can be drawn with a single draw call using supplemental instance data information. An instance group can contain segmented meshes or skinned mesh.
Definition: diguyGraphicsInstanceGroup.h:48
osg::ref_ptr< osg::Uniform > ufrm_apply_matrices_flag
Definition: diguyOsgGraphicsInstanceGroup.h:90
osg::ref_ptr< osg::Geode > m_geode
Definition: diguyOsgGraphicsInstanceGroup.h:82
static diguyOsgTextureBufferObject * s_diguy_texture_buffer
Definition: diguyOsgGraphicsInstanceGroup.h:78
Definition: diguyOsgGraphicsInstanceGroup.h:55
osg::ref_ptr< osg::Geometry > m_geometry
Definition: diguyOsgGraphicsInstanceGroup.h:83
osg::ref_ptr< osg::Uniform > ufrm_base_matrices_start
Definition: diguyOsgGraphicsInstanceGroup.h:86
void create_and_add_shared_tbo_to_state_set(osg::StateSet &state_set)
diguyGraphicsInstanceGroup * diguyOsgGraphicsInstanceGroup_create_func(void *internal_data)
Create function declaration.
virtual void build() override
This function will be called by DI-Guy when it is time for a renderer specific instance group to be c...
static osg::ref_ptr< diguyOsgTextureBufferObjectApplyAttribute > s_diguy_texture_buffer_attribute
Definition: diguyOsgGraphicsInstanceGroup.h:79
virtual void unbuild() override
This function will be called by DI-Guy when it is time for a instance group to be destroyed...
osg::ref_ptr< osg::PrimitiveSet > m_primitiveSet
Definition: diguyOsgGraphicsInstanceGroup.h:84
osg::ref_ptr< osg::Uniform > ufrm_link_matrices_count
Definition: diguyOsgGraphicsInstanceGroup.h:88
osg::ref_ptr< osg::Uniform > ufrm_link_matrices_start
Definition: diguyOsgGraphicsInstanceGroup.h:87
diguyOsgGraphicsInstanceGroup(void *internal_data)
osg::ref_ptr< osg::Uniform > ufrm_instance_group_color
Definition: diguyOsgGraphicsInstanceGroup.h:91
Definition: diguyOsgTextureBufferObject.h:13
osg::ref_ptr< osg::Uniform > ufrm_extra_per_instance_data
Definition: diguyOsgGraphicsInstanceGroup.h:89
virtual void update() override
This function will be called by DI-Guy when it is time for the instance group to be updated with new ...