[2197] | 1 | #pragma once
|
---|
| 2 |
|
---|
[2304] | 3 | class FlexFormat
|
---|
| 4 | {
|
---|
| 5 | public:
|
---|
| 6 | unsigned int posByteOffset;
|
---|
| 7 | unsigned int normalByteOffset;
|
---|
| 8 | unsigned int diffuseByteOffset;
|
---|
| 9 | unsigned int specularByteOffset;
|
---|
| 10 | unsigned int texByteOffset[16];
|
---|
| 11 | unsigned int nTex;
|
---|
| 12 | FlexFormat();
|
---|
| 13 | };
|
---|
| 14 |
|
---|
[2197] | 15 | class FlexVertex
|
---|
| 16 | {
|
---|
[2304] | 17 | static FlexFormat* format;
|
---|
[2197] | 18 | public:
|
---|
[2304] | 19 | static void setFormat(FlexFormat* format);
|
---|
[2197] | 20 |
|
---|
| 21 | D3DXVECTOR3& pos()
|
---|
| 22 | {
|
---|
[2304] | 23 | return *(D3DXVECTOR3*)(((char*)this) + format->posByteOffset);
|
---|
[2197] | 24 | }
|
---|
| 25 | D3DXVECTOR3& normal()
|
---|
| 26 | {
|
---|
[2304] | 27 | return *(D3DXVECTOR3*)(((char*)this) + format->normalByteOffset);
|
---|
[2197] | 28 | }
|
---|
| 29 | D3DXVECTOR2& tex0()
|
---|
| 30 | {
|
---|
[2304] | 31 | return *(D3DXVECTOR2*)(((char*)this) + format->texByteOffset[0]);
|
---|
[2197] | 32 | }
|
---|
| 33 | D3DXVECTOR2& tex1()
|
---|
| 34 | {
|
---|
[2304] | 35 | return *(D3DXVECTOR2*)(((char*)this) + format->texByteOffset[1]);
|
---|
[2197] | 36 | }
|
---|
| 37 | D3DXVECTOR2& tex(unsigned int i)
|
---|
| 38 | {
|
---|
[2304] | 39 | return *(D3DXVECTOR2*)(((char*)this) + format->texByteOffset[i]);
|
---|
[2197] | 40 | }
|
---|
| 41 | D3DCOLOR& diffuse()
|
---|
| 42 | {
|
---|
[2304] | 43 | return *(D3DCOLOR*)(((char*)this) + format->diffuseByteOffset);
|
---|
[2197] | 44 | }
|
---|
| 45 | D3DCOLOR& specular()
|
---|
| 46 | {
|
---|
[2304] | 47 | return *(D3DCOLOR*)(((char*)this) + format->specularByteOffset);
|
---|
[2197] | 48 | }
|
---|
| 49 |
|
---|
| 50 | void operator=(const FlexVertex& o)
|
---|
| 51 | {
|
---|
| 52 | bool kamu = false; // use FlexVertexArray.assign to copy data
|
---|
| 53 | }
|
---|
| 54 | };
|
---|
| 55 |
|
---|
| 56 | class FlexVertexArray
|
---|
| 57 | {
|
---|
| 58 | unsigned int nBytesPerVertex;
|
---|
[2304] | 59 | FlexFormat format;
|
---|
[2197] | 60 | public:
|
---|
| 61 |
|
---|
[2304] | 62 | void setFormat(D3DVERTEXELEMENT9* decl);
|
---|
| 63 |
|
---|
[2197] | 64 | FlexVertex* arrayStart;
|
---|
| 65 | FlexVertex& operator[](unsigned int index)
|
---|
| 66 | {
|
---|
[2304] | 67 | FlexVertex::setFormat(&format);
|
---|
[2197] | 68 | return *((FlexVertex*)((char*)arrayStart + nBytesPerVertex * index));
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | void** getDataPointerReference()
|
---|
| 72 | {
|
---|
| 73 | return (void**)&arrayStart;
|
---|
| 74 | }
|
---|
| 75 |
|
---|
| 76 | FlexVertexArray(unsigned int nBytesPerVertex)
|
---|
| 77 | {
|
---|
| 78 | this->nBytesPerVertex = nBytesPerVertex;
|
---|
| 79 | }
|
---|
| 80 |
|
---|
| 81 | void assign(unsigned int index, FlexVertex& o)
|
---|
| 82 | {
|
---|
| 83 | memcpy(
|
---|
| 84 | (void**)((char*)arrayStart + nBytesPerVertex * index),
|
---|
| 85 | &o,
|
---|
| 86 | nBytesPerVertex);
|
---|
| 87 | }
|
---|
| 88 | }; |
---|