Develop and Download Open Source Software

Browse Subversion Repository

Contents of /trunk/CVertexDump.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1 - (show annotations) (download) (as text)
Sun Aug 15 01:53:13 2010 UTC (13 years, 9 months ago) by okadu
File MIME type: text/x-c++src
File size: 13604 byte(s)


1 #include "stdafx.h"
2
3 // 内部定数
4 const int LINE_DUMP_MAX_MAX = 32767; // 直線ダンプ最大値の最大値
5 const int QUAD_DUMP_MAX_MAX = 10922; // 四角形ダンプ最大値の最大値
6
7 // 外部グローバル
8 extern bool g_HidefCaptureFlag;
9 extern int g_HidefQuality;
10 extern MTX4 g_BoldLineMtx[8][8];
11
12 /*
13 * コンストラクタ
14 */
15 CLineDumpTL::CLineDumpTL(
16 int linenum // 直線数
17 ){
18 m_LineNum = linenum;
19 if(m_LineNum>LINE_DUMP_MAX_MAX) m_LineNum = LINE_DUMP_MAX_MAX;
20 m_Count = 0;
21 m_Buffer = new VTX_TL[m_LineNum*2];
22 m_Next = NULL;
23 }
24
25 /*
26 * コンストラクタ
27 */
28 CLineDumpTL::CLineDumpTL(
29 CLineDumpTL *src // 引き継ぎ元
30 ){
31 m_LineNum = src->m_LineNum;
32 m_Count = src->m_Count;
33 m_Buffer = src->m_Buffer;
34 m_Next = src->m_Next;
35 }
36
37 /*
38 * デストラクタ
39 */
40 CLineDumpTL::~CLineDumpTL(){
41 DELETE_A(m_Buffer);
42 DELETE_V(m_Next);
43 }
44
45 /*
46 * バッファ追加
47 */
48 void CLineDumpTL::Feed(){
49 m_Next = new CLineDumpTL(this);
50 m_Count = 0;
51 m_Buffer = new VTX_TL[m_LineNum*2];
52 }
53
54 /*
55 * プリミティブ追加
56 */
57 void CLineDumpTL::Add(
58 VEC2 p1, D3DCOLOR c1, // 頂点 1
59 VEC2 p2, D3DCOLOR c2 // 頂点 2
60 ){
61 if(m_Count==m_LineNum) Feed();
62 VTX_TL *buf = &m_Buffer[m_Count*2];
63 buf->x = p1.x; buf->y = p1.y; buf->z = 0.0f; buf->rhw = 1.0f; buf->d = c1;
64 buf++;
65 buf->x = p2.x; buf->y = p2.y; buf->z = 0.0f; buf->rhw = 1.0f; buf->d = c2;
66 m_Count++;
67 }
68
69 /*
70 * 即描画
71 */
72 void CLineDumpTL::Preview(
73 VEC2 p1, D3DCOLOR c1, // 頂点 1
74 VEC2 p2, D3DCOLOR c2 // 頂点 2
75 ){
76 VTX_TL prev[2], *buf = prev;
77 buf->x = p1.x; buf->y = p1.y; buf->z = 0.0f; buf->d = c1;
78 buf++;
79 buf->x = p2.x; buf->y = p2.y; buf->z = 0.0f; buf->d = c2;
80 sv3.pDev->SetVertexShader(FVF_TL);
81 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, 1, prev, sizeof(VTX_TL));
82 }
83
84 /*
85 * バーテックス準備
86 */
87 void CLineDumpTL::PrepareVertex(){
88 m_Vertex.Create(m_Buffer, FVF_TL, m_Count*2*sizeof(VTX_TL));
89 if(m_Next) m_Next->PrepareVertex();
90 }
91
92 /*
93 * レンダリング
94 */
95 void CLineDumpTL::Render(
96 bool drawup // DrawPrimitiveUp を使用
97 ){
98 devSetTexture(0, NULL);
99 if(m_Next) m_Next->Render(drawup);
100 if(drawup){
101 sv3.pDev->SetVertexShader(FVF_TL);
102 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, m_Count, m_Buffer, sizeof(VTX_TL));
103 }else{
104 m_Vertex.RenderLL();
105 }
106 }
107
108 ////////////////////////////////////////////////////////////////////////////////
109 ////////////////////////////////////////////////////////////////////////////////
110
111 /*
112 * コンストラクタ
113 */
114 CLineDumpL::CLineDumpL(
115 int linenum // 直線数
116 ){
117 m_LineNum = linenum;
118 if(m_LineNum>LINE_DUMP_MAX_MAX) m_LineNum = LINE_DUMP_MAX_MAX;
119 m_Count = 0;
120 m_Buffer = new VTX_L[m_LineNum*2];
121 m_Next = NULL;
122 }
123
124 /*
125 * コンストラクタ
126 */
127 CLineDumpL::CLineDumpL(
128 CLineDumpL *src // 引き継ぎ元
129 ){
130 m_LineNum = src->m_LineNum;
131 m_Count = src->m_Count;
132 m_Buffer = src->m_Buffer;
133 m_Next = src->m_Next;
134 }
135
136 /*
137 * デストラクタ
138 */
139 CLineDumpL::~CLineDumpL(){
140 DELETE_A(m_Buffer);
141 DELETE_V(m_Next);
142 }
143
144 /*
145 * バッファ追加
146 */
147 void CLineDumpL::Feed(){
148 m_Next = new CLineDumpL(this);
149 m_Count = 0;
150 m_Buffer = new VTX_L[m_LineNum*2];
151 }
152
153 /*
154 * プリミティブ追加
155 */
156 void CLineDumpL::Add(
157 VEC3 p1, D3DCOLOR c1, // 頂点 1
158 VEC3 p2, D3DCOLOR c2 // 頂点 2
159 ){
160 if(m_Count==m_LineNum) Feed();
161 VTX_L *buf = &m_Buffer[m_Count*2];
162 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z; buf->d = c1;
163 buf++;
164 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z; buf->d = c2;
165 m_Count++;
166 }
167
168 /*
169 * 即描画
170 */
171 void CLineDumpL::Preview(
172 VEC3 p1, D3DCOLOR c1, // 頂点 1
173 VEC3 p2, D3DCOLOR c2 // 頂点 2
174 ){
175 VTX_L prev[2], *buf = prev;
176 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z; buf->d = c1;
177 buf++;
178 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z; buf->d = c2;
179 sv3.pDev->SetVertexShader(FVF_L);
180 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, 1, prev, sizeof(VTX_L));
181 }
182
183 /*
184 * バーテックス準備
185 */
186 void CLineDumpL::PrepareVertex(){
187 m_Vertex.Create(m_Buffer, FVF_L, m_Count*2*sizeof(VTX_L));
188 if(m_Next) m_Next->PrepareVertex();
189 }
190
191 /*
192 * レンダリング
193 */
194 void CLineDumpL::Render(
195 bool drawup // DrawPrimitiveUp を使用
196 ){
197 devSetTexture(0, NULL);
198 if(drawup){
199 sv3.pDev->SetVertexShader(FVF_L);
200 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, m_Count, m_Buffer, sizeof(VTX_L));
201 }else{
202 m_Vertex.RenderLL();
203 }
204 if(m_Next) m_Next->Render(drawup);
205 }
206
207 ////////////////////////////////////////////////////////////////////////////////
208 ////////////////////////////////////////////////////////////////////////////////
209
210 /*
211 * コンストラクタ
212 */
213 CLineDumpN::CLineDumpN(
214 int linenum // 直線数
215 ){
216 m_LineNum = linenum;
217 if(m_LineNum>LINE_DUMP_MAX_MAX) m_LineNum = LINE_DUMP_MAX_MAX;
218 m_Count = 0;
219 m_Buffer = new VTX_N[m_LineNum*2];
220 m_Next = NULL;
221 }
222
223 /*
224 * コンストラクタ
225 */
226 CLineDumpN::CLineDumpN(
227 CLineDumpN *src // 引き継ぎ元
228 ){
229 m_LineNum = src->m_LineNum;
230 m_Count = src->m_Count;
231 m_Buffer = src->m_Buffer;
232 m_Next = src->m_Next;
233 }
234
235 /*
236 * デストラクタ
237 */
238 CLineDumpN::~CLineDumpN(){
239 DELETE_A(m_Buffer);
240 DELETE_V(m_Next);
241 }
242
243 /*
244 * バッファ追加
245 */
246 void CLineDumpN::Feed(){
247 m_Next = new CLineDumpN(this);
248 m_Count = 0;
249 m_Buffer = new VTX_N[m_LineNum*2];
250 }
251
252 /*
253 * プリミティブ追加
254 */
255 void CLineDumpN::Add(
256 VEC3 p1, D3DCOLOR c1, // 頂点 1
257 VEC3 p2, D3DCOLOR c2 // 頂点 2
258 ){
259 if(m_Count==m_LineNum) Feed();
260 VTX_N *buf = &m_Buffer[m_Count*2];
261 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z; buf->d = c1; buf->n = V3UP;
262 buf++;
263 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z; buf->d = c2; buf->n = V3UP;
264 m_Count++;
265 }
266
267 /*
268 * 即描画
269 */
270 void CLineDumpN::Preview(
271 VEC3 p1, D3DCOLOR c1, // 頂点 1
272 VEC3 p2, D3DCOLOR c2 // 頂点 2
273 ){
274 VTX_N prev[2], *buf = prev;
275 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z; buf->d = c1; buf->n = V3UP;
276 buf++;
277 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z; buf->d = c2; buf->n = V3UP;
278 sv3.pDev->SetVertexShader(FVF_N);
279 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, 1, prev, sizeof(VTX_N));
280 }
281
282 /*
283 * バーテックス準備
284 */
285 void CLineDumpN::PrepareVertex(){
286 m_Vertex.Create(m_Buffer, FVF_N, m_Count*2*sizeof(VTX_N));
287 if(m_Next) m_Next->PrepareVertex();
288 }
289
290 /*
291 * レンダリング
292 */
293 void CLineDumpN::Render(
294 bool drawup // DrawPrimitiveUp を使用
295 ){
296 devSetTexture(0, NULL);
297 if(g_HidefCaptureFlag){
298 int bx, by;
299 for(by = 0; by<g_HidefQuality; ++by){
300 for(bx = 0; bx<g_HidefQuality; ++bx){
301 sv3.pDev->SetTransform(D3DTS_PROJECTION, &g_BoldLineMtx[by][bx]);
302 if(drawup){
303 sv3.pDev->SetVertexShader(FVF_N);
304 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, m_Count, m_Buffer, sizeof(VTX_N));
305 }else{
306 m_Vertex.RenderLL();
307 }
308 }
309 }
310 sv3.pDev->SetTransform(D3DTS_PROJECTION, &sv3.mtxProj);
311 }else{
312 if(drawup){
313 sv3.pDev->SetVertexShader(FVF_N);
314 sv3.pDev->DrawPrimitiveUP(D3DPT_LINELIST, m_Count, m_Buffer, sizeof(VTX_N));
315 }else{
316 m_Vertex.RenderLL();
317 }
318 }
319 if(m_Next) m_Next->Render(drawup);
320 }
321
322 ////////////////////////////////////////////////////////////////////////////////
323 ////////////////////////////////////////////////////////////////////////////////
324
325 /*
326 * コンストラクタ
327 */
328 CQuadDumpN::CQuadDumpN(
329 int quadnum // 四角形数
330 ){
331 m_QuadNum = quadnum;
332 if(m_QuadNum>QUAD_DUMP_MAX_MAX) m_QuadNum = QUAD_DUMP_MAX_MAX;
333 m_Count = 0;
334 m_Buffer = new VTX_N[m_QuadNum*6];
335 m_Next = NULL;
336 }
337
338 /*
339 * コンストラクタ
340 */
341 CQuadDumpN::CQuadDumpN(
342 CQuadDumpN *src // 引き継ぎ元
343 ){
344 m_QuadNum = src->m_QuadNum;
345 m_Count = src->m_Count;
346 m_Buffer = src->m_Buffer;
347 m_Next = src->m_Next;
348 }
349
350 /*
351 * デストラクタ
352 */
353 CQuadDumpN::~CQuadDumpN(){
354 DELETE_A(m_Buffer);
355 DELETE_V(m_Next);
356 }
357
358 /*
359 * バッファ追加
360 */
361 void CQuadDumpN::Feed(){
362 m_Next = new CQuadDumpN(this);
363 m_Count = 0;
364 m_Buffer = new VTX_N[m_QuadNum*6];
365 }
366
367 /*
368 * プリミティブ追加
369 */
370 void CQuadDumpN::Add(
371 VEC3 p1, VEC3 n1, D3DCOLOR c1, // 頂点 1
372 VEC3 p2, VEC3 n2, D3DCOLOR c2, // 頂点 2
373 VEC3 p3, VEC3 n3, D3DCOLOR c3, // 頂点 3
374 VEC3 p4, VEC3 n4, D3DCOLOR c4 // 頂点 4
375 ){
376 if(m_Count==m_QuadNum) Feed();
377 VTX_N *buf = &m_Buffer[m_Count*6];
378 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
379 buf->n = n1; buf->d = c1;
380 buf++;
381 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z;
382 buf->n = n2; buf->d = c2;
383 buf++;
384 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
385 buf->n = n3; buf->d = c3;
386 buf++;
387 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
388 buf->n = n3; buf->d = c3;
389 buf++;
390 buf->x = p4.x; buf->y = p4.y; buf->z = p4.z;
391 buf->n = n4; buf->d = c4;
392 buf++;
393 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
394 buf->n = n1; buf->d = c1;
395 m_Count++;
396 }
397
398 /*
399 * 即描画
400 */
401 void CQuadDumpN::Preview(
402 VEC3 p1, VEC3 n1, D3DCOLOR c1, // 頂点 1
403 VEC3 p2, VEC3 n2, D3DCOLOR c2, // 頂点 2
404 VEC3 p3, VEC3 n3, D3DCOLOR c3, // 頂点 3
405 VEC3 p4, VEC3 n4, D3DCOLOR c4 // 頂点 4
406 ){
407 VTX_N prev[6], *buf = prev;
408 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
409 buf->n = n1; buf->d = c1;
410 buf++;
411 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z;
412 buf->n = n2; buf->d = c2;
413 buf++;
414 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
415 buf->n = n3; buf->d = c3;
416 buf++;
417 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
418 buf->n = n3; buf->d = c3;
419 buf++;
420 buf->x = p4.x; buf->y = p4.y; buf->z = p4.z;
421 buf->n = n4; buf->d = c4;
422 buf++;
423 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
424 buf->n = n1; buf->d = c1;
425 sv3.pDev->SetVertexShader(FVF_N);
426 sv3.pDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, prev, sizeof(VTX_N));
427 }
428
429 /*
430 * バーテックス準備
431 */
432 void CQuadDumpN::PrepareVertex(){
433 m_Vertex.Create(m_Buffer, FVF_N, m_Count*6*sizeof(VTX_N));
434 if(m_Next) m_Next->PrepareVertex();
435 }
436
437 /*
438 * レンダリング
439 */
440 void CQuadDumpN::Render(
441 bool drawup // DrawPrimitiveUp を使用
442 ){
443 devSetTexture(0, NULL);
444 if(drawup){
445 sv3.pDev->SetVertexShader(FVF_N);
446 sv3.pDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, m_Count*2, m_Buffer, sizeof(VTX_N));
447 }else{
448 m_Vertex.RenderTL();
449 }
450 if(m_Next) m_Next->Render(drawup);
451 }
452
453 ////////////////////////////////////////////////////////////////////////////////
454 ////////////////////////////////////////////////////////////////////////////////
455
456 /*
457 * コンストラクタ
458 */
459 CQuadDumpNX::CQuadDumpNX(
460 int quadnum, // 四角形数
461 LPTEX8 tex // テクスチャ
462 ){
463 m_QuadNum = quadnum;
464 if(m_QuadNum>QUAD_DUMP_MAX_MAX) m_QuadNum = QUAD_DUMP_MAX_MAX;
465 m_Count = 0;
466 m_Buffer = new VTX_NX[m_QuadNum*6];
467 m_Texture = tex;
468 m_Next = NULL;
469 }
470
471 /*
472 * コンストラクタ
473 */
474 CQuadDumpNX::CQuadDumpNX(
475 CQuadDumpNX *src // 引き継ぎ元
476 ){
477 m_QuadNum = src->m_QuadNum;
478 m_Count = src->m_Count;
479 m_Buffer = src->m_Buffer;
480 m_Texture = src->m_Texture;
481 m_Next = src->m_Next;
482 }
483
484 /*
485 * デストラクタ
486 */
487 CQuadDumpNX::~CQuadDumpNX(){
488 DELETE_A(m_Buffer);
489 DELETE_V(m_Next);
490 }
491
492 /*
493 * バッファ追加
494 */
495 void CQuadDumpNX::Feed(){
496 m_Next = new CQuadDumpNX(this);
497 m_Count = 0;
498 m_Buffer = new VTX_NX[m_QuadNum*6];
499 }
500
501 /*
502 * プリミティブ追加
503 */
504 void CQuadDumpNX::Add(
505 VEC3 p1, VEC3 n1, D3DCOLOR c1, float u1, float v1, // 頂点 1
506 VEC3 p2, VEC3 n2, D3DCOLOR c2, float u2, float v2, // 頂点 2
507 VEC3 p3, VEC3 n3, D3DCOLOR c3, float u3, float v3, // 頂点 3
508 VEC3 p4, VEC3 n4, D3DCOLOR c4, float u4, float v4 // 頂点 4
509 ){
510 if(m_Count==m_QuadNum) Feed();
511 VTX_NX *buf = &m_Buffer[m_Count*6];
512 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
513 buf->n = n1; buf->d = c1; buf->u = u1; buf->v = v1;
514 buf++;
515 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z;
516 buf->n = n2; buf->d = c2; buf->u = u2; buf->v = v2;
517 buf++;
518 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
519 buf->n = n3; buf->d = c3; buf->u = u3; buf->v = v3;
520 buf++;
521 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
522 buf->n = n3; buf->d = c3; buf->u = u3; buf->v = v3;
523 buf++;
524 buf->x = p4.x; buf->y = p4.y; buf->z = p4.z;
525 buf->n = n4; buf->d = c4; buf->u = u4; buf->v = v4;
526 buf++;
527 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
528 buf->n = n1; buf->d = c1; buf->u = u1; buf->v = v1;
529 m_Count++;
530 }
531
532 /*
533 * 即描画
534 */
535 void CQuadDumpNX::Preview(
536 VEC3 p1, VEC3 n1, D3DCOLOR c1, float u1, float v1, // 頂点 1
537 VEC3 p2, VEC3 n2, D3DCOLOR c2, float u2, float v2, // 頂点 2
538 VEC3 p3, VEC3 n3, D3DCOLOR c3, float u3, float v3, // 頂点 3
539 VEC3 p4, VEC3 n4, D3DCOLOR c4, float u4, float v4 // 頂点 4
540 ){
541 VTX_NX prev[6], *buf = prev;
542 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
543 buf->n = n1; buf->d = c1; buf->u = u1; buf->v = v1;
544 buf++;
545 buf->x = p2.x; buf->y = p2.y; buf->z = p2.z;
546 buf->n = n2; buf->d = c2; buf->u = u2; buf->v = v2;
547 buf++;
548 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
549 buf->n = n3; buf->d = c3; buf->u = u3; buf->v = v3;
550 buf++;
551 buf->x = p3.x; buf->y = p3.y; buf->z = p3.z;
552 buf->n = n3; buf->d = c3; buf->u = u3; buf->v = v3;
553 buf++;
554 buf->x = p4.x; buf->y = p4.y; buf->z = p4.z;
555 buf->n = n4; buf->d = c4; buf->u = u4; buf->v = v4;
556 buf++;
557 buf->x = p1.x; buf->y = p1.y; buf->z = p1.z;
558 buf->n = n1; buf->d = c1; buf->u = u1; buf->v = v1;
559 sv3.pDev->SetVertexShader(FVF_NX);
560 sv3.pDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, 2, prev, sizeof(VTX_NX));
561 }
562
563 /*
564 * バーテックス準備
565 */
566 void CQuadDumpNX::PrepareVertex(){
567 m_Vertex.Create(m_Buffer, FVF_NX, m_Count*6*sizeof(VTX_NX));
568 if(m_Next) m_Next->PrepareVertex();
569 }
570
571 /*
572 * レンダリング
573 */
574 void CQuadDumpNX::Render(
575 bool drawup // DrawPrimitiveUp を使用
576 ){
577 devSetTexture(0, m_Texture);
578 if(drawup){
579 sv3.pDev->SetVertexShader(FVF_NX);
580 sv3.pDev->DrawPrimitiveUP(D3DPT_TRIANGLELIST, m_Count*2, m_Buffer, sizeof(VTX_NX));
581 }else{
582 m_Vertex.RenderTL();
583 }
584 if(m_Next) m_Next->Render(drawup);
585 }

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26