@@ -271,14 +271,17 @@ struct vertex_format_data
271271 MODEL_ID ,
272272 RADIUS ,
273273 UVEC ,
274+ MATRIX4 ,
274275 };
275276
276277 vertex_format format_type;
277278 size_t stride;
278279 size_t offset;
280+ size_t divisor;
281+ size_t buffer_number;
279282
280- vertex_format_data (vertex_format i_format_type, size_t i_stride, size_t i_offset) :
281- format_type (i_format_type), stride(i_stride), offset(i_offset) {}
283+ vertex_format_data (vertex_format i_format_type, size_t i_stride, size_t i_offset, size_t i_divisor, size_t i_buffer_number ) :
284+ format_type (i_format_type), stride(i_stride), offset(i_offset), divisor(i_divisor), buffer_number(i_buffer_number) {}
282285
283286 static inline uint mask (vertex_format v_format) { return 1 << v_format; }
284287
@@ -291,7 +294,7 @@ class vertex_layout
291294 SCP_vector<vertex_format_data> Vertex_components;
292295
293296 uint Vertex_mask = 0 ;
294- size_t Vertex_stride = 0 ;
297+ SCP_unordered_map< size_t , size_t > Vertex_stride ;
295298public:
296299 vertex_layout () {}
297300
@@ -301,9 +304,9 @@ class vertex_layout
301304
302305 bool resident_vertex_format (vertex_format_data::vertex_format format_type) const ;
303306
304- void add_vertex_component (vertex_format_data::vertex_format format_type, size_t stride, size_t offset);
307+ void add_vertex_component (vertex_format_data::vertex_format format_type, size_t stride, size_t offset, size_t divisor = 0 , size_t buffer_number = 0 );
305308
306- size_t get_vertex_stride () const { return Vertex_stride; }
309+ size_t get_vertex_stride (size_t buffer_number = 0 ) const { return Vertex_stride. at (buffer_number) ; }
307310
308311 bool operator ==(const vertex_layout& other) const ;
309312
@@ -333,7 +336,8 @@ enum class gr_capability {
333336 CAPABILITY_SEPARATE_BLEND_FUNCTIONS ,
334337 CAPABILITY_PERSISTENT_BUFFER_MAPPING ,
335338 CAPABILITY_BPTC ,
336- CAPABILITY_LARGE_SHADER
339+ CAPABILITY_LARGE_SHADER ,
340+ CAPABILITY_INSTANCED_RENDERING
337341};
338342
339343struct gr_capability_def {
@@ -891,7 +895,9 @@ typedef struct screen {
891895 primitive_type prim_type,
892896 vertex_layout* layout,
893897 int num_elements,
894- const indexed_vertex_source& buffers)>
898+ const indexed_vertex_source& buffers,
899+ const gr_buffer_handle& instance_buffer,
900+ int num_instances)>
895901 gf_render_decals;
896902 void (*gf_render_rocket_primitives)(interface_material* material_info,
897903 primitive_type prim_type,
0 commit comments