Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright 2011 Joakim Sindholt <opensource@zhasha.com>
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * on the rights to use, copy, modify, merge, publish, distribute, sub
  8.  * license, and/or sell copies of the Software, and to permit persons to whom
  9.  * the Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
  18.  * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
  19.  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  20.  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  21.  * USE OR OTHER DEALINGS IN THE SOFTWARE. */
  22.  
  23. #ifndef _NINE_VERTEXDECLARATION9_H_
  24. #define _NINE_VERTEXDECLARATION9_H_
  25.  
  26. #include "nine_defines.h"
  27. #include "iunknown.h"
  28.  
  29. struct pipe_resource;
  30. struct pipe_vertex_element;
  31. struct pipe_stream_output_info;
  32. struct NineDevice9;
  33. struct NineVertexBuffer9;
  34.  
  35. struct NineVertexDeclaration9
  36. {
  37.     struct NineUnknown base;
  38.  
  39.     /* G3D state */
  40.     struct pipe_vertex_element *elems;
  41.     unsigned nelems;
  42.  
  43.     /* index -> DECLUSAGE, for selecting the vertex element
  44.      * for each VS input */
  45.     uint16_t *usage_map;
  46.  
  47.     D3DVERTEXELEMENT9 *decls;
  48.     DWORD fvf;
  49. };
  50. static INLINE struct NineVertexDeclaration9 *
  51. NineVertexDeclaration9( void *data )
  52. {
  53.     return (struct NineVertexDeclaration9 *)data;
  54. }
  55.  
  56. HRESULT
  57. NineVertexDeclaration9_new( struct NineDevice9 *pDevice,
  58.                             const D3DVERTEXELEMENT9 *pElements,
  59.                             struct NineVertexDeclaration9 **ppOut );
  60.  
  61. HRESULT
  62. NineVertexDeclaration9_new_from_fvf( struct NineDevice9 *pDevice,
  63.                                      DWORD FVF,
  64.                                      struct NineVertexDeclaration9 **ppOut );
  65.  
  66. HRESULT
  67. NineVertexDeclaration9_ctor( struct NineVertexDeclaration9 *This,
  68.                              struct NineUnknownParams *pParams,
  69.                              const D3DVERTEXELEMENT9 *pElements );
  70.  
  71. void
  72. NineVertexDeclaration9_dtor( struct NineVertexDeclaration9 *This );
  73.  
  74. HRESULT WINAPI
  75. NineVertexDeclaration9_GetDeclaration( struct NineVertexDeclaration9 *This,
  76.                                        D3DVERTEXELEMENT9 *pElement,
  77.                                        UINT *pNumElements );
  78.  
  79. /* Convert stream output data to the vertex declaration's format. */
  80. HRESULT
  81. NineVertexDeclaration9_ConvertStreamOutput(
  82.     struct NineVertexDeclaration9 *This,
  83.     struct NineVertexBuffer9 *pDstBuf,
  84.     UINT DestIndex,
  85.     UINT VertexCount,
  86.     struct pipe_resource *pSrcBuf,
  87.     const struct pipe_stream_output_info *so );
  88.  
  89. #endif /* _NINE_VERTEXDECLARATION9_H_ */
  90.