OROCHI
 
Loading...
Searching...
No Matches
GxPrimitiveContext.inl
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14GX_CORE_NAMESPACE_BEGIN()
15
16//---------------------------------------------------------------------------
17// 2D点
21//---------------------------------------------------------------------------
22void GxPrimitiveContext::draw2DPoint(const GxVector3& position, const GxColor color, const GxPrimitiveMaterial& material)
23{
24 auto* GX_RESTRICT pVertex = draw2DLineStrip(2, material, position._z);
25
26 if (pVertex)
27 {
28 pVertex[0]._position = position + LINE_PRIMITIVE_OFFSET_2D_XY;
29 pVertex[0]._color = color;
30 pVertex[1]._position = pVertex[0]._position + GxVector3(1.0f, 0.0f, 0.0);
31 pVertex[1]._color = color;
32 GX_TRACE(GX_TRACE_CATEGORY_CORE, "2D POINT プリミティブは仮実装です。サポートまでご連絡ください。");
33 }
34}
35
36//---------------------------------------------------------------------------
37// 2Dライン(Flat)
42//---------------------------------------------------------------------------
43void GxPrimitiveContext::draw2DLineF(const GxVector3& position0, const GxVector3& position1, const GxColor color, const GxPrimitiveMaterial& material)
44{
45 draw2DLineG(position0, position1, color, color, material);
46}
47
48//---------------------------------------------------------------------------
49// 2Dライン(Gradation)
55//---------------------------------------------------------------------------
56void GxPrimitiveContext::draw2DLineG(const GxVector3& position0, const GxVector3& position1, const GxColor color0, const GxColor color1, const GxPrimitiveMaterial& material)
57{
58 auto* GX_RESTRICT pVertex = draw2DLineStrip(2, material, position0._z);
59
60 if (pVertex)
61 {
62 pVertex[0]._position = position0 + LINE_PRIMITIVE_OFFSET_2D_XY;
63 pVertex[0]._color = color0;
64 pVertex[1]._position = position1 + LINE_PRIMITIVE_OFFSET_2D_XY;
65 pVertex[1]._color = color1;
66 }
67}
68
69//---------------------------------------------------------------------------
70// 2Dポリライン(Flat)
77//---------------------------------------------------------------------------
78void GxPrimitiveContext::draw2DPolyLineF(const GxVector3& position0, const GxVector3& position1, u32 width, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
79{
80 draw2DPolyLineG(position0, position1, width, color, color, fillMode, material);
81}
82
83//---------------------------------------------------------------------------
84// 2D三角形(Flat)
91//---------------------------------------------------------------------------
92void GxPrimitiveContext::draw2DTriangleF(const GxVector3& position0, const GxVector3& position1, const GxVector3& position2, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
93{
94 draw2DTriangleG(position0, position1, position2, color, color, color, fillMode, material);
95}
96
97//---------------------------------------------------------------------------
98// 2D四角形(Flat)
104//---------------------------------------------------------------------------
105void GxPrimitiveContext::draw2DRectF(const GxRectF& rect, f32 z, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
106{
107 draw2DRectG(rect, z, color, color, color, color, fillMode, material);
108}
109
110//---------------------------------------------------------------------------
111// 2D四角形(Flat)
118//---------------------------------------------------------------------------
119void GxPrimitiveContext::draw2DRectF(const GxRectF& rect, f32 positionZ, f32 z, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
120{
121 draw2DRectG(rect, positionZ, z, color, color, color, color, fillMode, material);
122}
123
124//---------------------------------------------------------------------------
125// 2D回転あり四角形(Flat)
133//---------------------------------------------------------------------------
134void GxPrimitiveContext::draw2DRectF(const GxRectF& rect, f32 z, const GxVector2& rotateCenter, const f32 rotateRadian, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
135{
136 draw2DRectG(rect, z, rotateCenter, rotateRadian, color, color, color, color, fillMode, material);
137}
138
139
140//---------------------------------------------------------------------------
141// 2Dテクスチャ付き四角形(Flat)
150//---------------------------------------------------------------------------
151void GxPrimitiveContext::draw2DRectTextureF(const GxRectF& rect, f32 z, const GxColor color, const GxFloat2& uv0, const GxFloat2& uv1, const GxPrimitiveMaterial& material, const GxFloat2& uvSecond0, const GxFloat2& uvSecond1)
152{
153 draw2DRectTextureG(rect, 0.0f, z, color, color, color, color, uv0, uv1, material, uvSecond0, uvSecond1);
154}
155
156//---------------------------------------------------------------------------
157// 2Dテクスチャ付き回転あり四角形(Flat)
168//---------------------------------------------------------------------------
169void GxPrimitiveContext::draw2DRectTextureF(const GxRectF& rect, f32 z, const GxVector2& rotateCenter, const f32 rotateRadian, const GxColor color, const GxFloat2& uv0, const GxFloat2& uv1, const GxPrimitiveMaterial& material, const GxFloat2& uvSecond0, const GxFloat2& uvSecond1)
170{
171 draw2DRectTextureG(rect, 0.0f, z, rotateCenter, rotateRadian, color, color, color, color, uv0, uv1, material, uvSecond0, uvSecond1);
172}
173
174//---------------------------------------------------------------------------
175// 2Dテクスチャ付き四角形(Gradation)
187//---------------------------------------------------------------------------
188void GxPrimitiveContext::draw2DRectTextureG(const GxRectF& rect, f32 z, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, const GxFloat2& uv0, const GxFloat2& uv1, const GxPrimitiveMaterial& material, const GxFloat2& uvSecond0, const GxFloat2& uvSecond1)
189{
190 draw2DRectTextureG(rect, 0.0f, z, color0, color1, color2, color3, uv0, uv1, material, uvSecond0, uvSecond1);
191}
192
193//---------------------------------------------------------------------------
194// 2Dテクスチャ付き四角形(Z値指定、Gradation)
207//---------------------------------------------------------------------------
208void GxPrimitiveContext::draw2DRectTextureG(const GxRectF& rect, f32 positionZ, f32 z, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, const GxFloat2& uv0, const GxFloat2& uv1, const GxPrimitiveMaterial& material, const GxFloat2& uvSecond0, const GxFloat2& uvSecond1)
209{
210 // ここの z はソートプライオリティ
211 auto* GX_RESTRICT pVertex = draw2DTriangleFan(4, material, z);
212
213 if (pVertex)
214 {
215 auto left = rect._left;
216 auto top = rect._top;
217 auto right = rect._right;
218 auto bottom = rect._bottom;
219
220 pVertex[0]._position = GxFloat3(left, top, positionZ);
221 pVertex[0]._color = color0;
222 pVertex[0]._texCoord = uv0;
223 pVertex[0]._texCoordSecond = uvSecond0;
224 pVertex[1]._position = GxFloat3(right, top, positionZ);
225 pVertex[1]._color = color1;
226 pVertex[1]._texCoord = GxFloat2(uv1._u, uv0._v);
227 pVertex[1]._texCoordSecond = GxFloat2(uvSecond1._u, uvSecond0._v);
228 pVertex[2]._position = GxFloat3(right, bottom, positionZ);
229 pVertex[2]._color = color2;
230 pVertex[2]._texCoord = uv1;
231 pVertex[2]._texCoordSecond = uvSecond1;
232 pVertex[3]._position = GxFloat3(left, bottom, positionZ);
233 pVertex[3]._color = color3;
234 pVertex[3]._texCoord = GxFloat2(uv0._u, uv1._v);
235 pVertex[3]._texCoordSecond = GxFloat2(uvSecond0._u, uvSecond1._v);
236 }
237}
238
239//---------------------------------------------------------------------------
240// 2Dテクスチャ付き回転あり四角形(Gradation)
254//---------------------------------------------------------------------------
255void GxPrimitiveContext::draw2DRectTextureG(const GxRectF& rect, f32 z, const GxVector2& rotateCenter, const f32 rotateRadian, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, const GxFloat2& uv0, const GxFloat2& uv1, const GxPrimitiveMaterial& material, const GxFloat2& uvSecond0, const GxFloat2& uvSecond1)
256{
257 draw2DRectTextureG(rect, 0.0f, z, rotateCenter, rotateRadian, color0, color1, color2, color3, uv0, uv1, material, uvSecond0, uvSecond1);
258}
259
260//---------------------------------------------------------------------------
261// 2Dテクスチャ付き回転あり四角形(Z値指定、Gradation)
276//---------------------------------------------------------------------------
277void GxPrimitiveContext::draw2DRectTextureG(const GxRectF& rect, f32 positionZ, f32 z, const GxVector2& rotateCenter, const f32 rotateRadian, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, const GxFloat2& uv0, const GxFloat2& uv1, const GxPrimitiveMaterial& material, const GxFloat2& uvSecond0, const GxFloat2& uvSecond1)
278{
279 auto* GX_RESTRICT pVertex = draw2DTriangleFan(4, material, z);
280
281 if (pVertex)
282 {
283 auto left = rect._left - rotateCenter._x;
284 auto top = rect._top - rotateCenter._y;
285 auto right = rect._right - rotateCenter._x;
286 auto bottom = rect._bottom - rotateCenter._y;
287
288 auto leftTopX = (left * GxMath::getFastCos(rotateRadian) - top * GxMath::getFastSin(rotateRadian)) + rotateCenter._x;
289 auto leftTopY = (left * GxMath::getFastSin(rotateRadian) + top * GxMath::getFastCos(rotateRadian)) + rotateCenter._y;
290
291 auto leftBottomX = (left * GxMath::getFastCos(rotateRadian) - bottom * GxMath::getFastSin(rotateRadian)) + rotateCenter._x;
292 auto leftBottomY = (left * GxMath::getFastSin(rotateRadian) + bottom * GxMath::getFastCos(rotateRadian)) + rotateCenter._y;
293
294 auto rightTopX = (right * GxMath::getFastCos(rotateRadian) - top * GxMath::getFastSin(rotateRadian)) + rotateCenter._x;
295 auto rightTopY = (right * GxMath::getFastSin(rotateRadian) + top * GxMath::getFastCos(rotateRadian)) + rotateCenter._y;
296
297 auto rightBottomX = (right * GxMath::getFastCos(rotateRadian) - bottom * GxMath::getFastSin(rotateRadian)) + rotateCenter._x;
298 auto rightBottomY = (right * GxMath::getFastSin(rotateRadian) + bottom * GxMath::getFastCos(rotateRadian)) + rotateCenter._y;
299
300 pVertex[0]._position = GxFloat3(leftTopX, leftTopY, positionZ);
301 pVertex[0]._color = color0;
302 pVertex[0]._texCoord = uv0;
303 pVertex[0]._texCoordSecond = uvSecond0;
304 pVertex[1]._position = GxFloat3(rightTopX, rightTopY, positionZ);
305 pVertex[1]._color = color1;
306 pVertex[1]._texCoord = GxFloat2(uv1._u, uv0._v);
307 pVertex[1]._texCoordSecond = GxFloat2(uvSecond1._u, uvSecond0._v);
308 pVertex[2]._position = GxFloat3(rightBottomX, rightBottomY, positionZ);
309 pVertex[2]._color = color2;
310 pVertex[2]._texCoord = uv1;
311 pVertex[2]._texCoordSecond = uvSecond1;
312 pVertex[3]._position = GxFloat3(leftBottomX, leftBottomY, positionZ);
313 pVertex[3]._color = color3;
314 pVertex[3]._texCoord = GxFloat2(uv0._u, uv1._v);
315 pVertex[3]._texCoordSecond = GxFloat2(uvSecond0._u, uvSecond1._v);
316 }
317}
318
319//---------------------------------------------------------------------------
320// 2D円(Flat)
327//---------------------------------------------------------------------------
328void GxPrimitiveContext::draw2DCircleF(const GxVector3& position, f32 radius, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
329{
330 draw2DCircleG(position, radius, color, color, divide, fillMode, material);
331}
332
333//---------------------------------------------------------------------------
334// 2D扇形(Flat)
335//
344//---------------------------------------------------------------------------
345void GxPrimitiveContext::draw2DFanF(const GxVector3& position, f32 radius, f32 startRadian, f32 deltaRadian, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material)
346{
347 draw2DFanG(position, radius, startRadian, deltaRadian, color, color, divide, fillMode, material);
348}
349
350//---------------------------------------------------------------------------
351// 2Dベクトル(Flat)
359//---------------------------------------------------------------------------
360void GxPrimitiveContext::draw2DArrowF(const GxVector3& position0, const GxVector3& position1, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, f32 arrowRate, f32 arrowRadius)
361{
362 draw2DArrowG(position0, position1, color, color, fillMode, material, arrowRate, arrowRadius);
363}
364
365//---------------------------------------------------------------------------
366// 2Dベクトル(Gradation)
375//---------------------------------------------------------------------------
376void GxPrimitiveContext::draw2DArrowG(const GxVector3& position0, const GxVector3& position1, const GxColor color0, const GxColor color1, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, f32 arrowRate, f32 arrowRadius)
377{
378 draw2DLineG(position0, position1, color0, color1, material);
379
380 // 終点から arrowRate % の長さのベクトル
381 GxVector3 v(position0 - position1);
382 v *= arrowRate;
383
384 // 左右に arrowRadius 開く
385 arrowRadius *= 0.5f;
386
387 GxVector3 vL;
388 vL._x = v._x * GxMath::getFastCos( arrowRadius) - v._y * GxMath::getFastSin( arrowRadius);
389 vL._y = v._x * GxMath::getFastSin( arrowRadius) + v._y * GxMath::getFastCos( arrowRadius);
390 vL._z = 0.0f;
391 vL += position1;
392
393 GxVector3 vR;
394 vR._x = v._x * GxMath::getFastCos(-arrowRadius) - v._y * GxMath::getFastSin(-arrowRadius);
395 vR._y = v._x * GxMath::getFastSin(-arrowRadius) + v._y * GxMath::getFastCos(-arrowRadius);
396 vR._z = 0.0f;
397 vR += position1;
398
399 // 色を作成
400 auto color2 = GxColor::getLerp(color0, color1, arrowRate);
401
402 draw2DTriangleG(position1, vL, vR, color1, color2, color2, fillMode, material);
403}
404
405//---------------------------------------------------------------------------
406// 3D点
411//---------------------------------------------------------------------------
412void GxPrimitiveContext::draw3DPoint(const GxVector3& position, const GxColor color, const GxPrimitiveMaterial& material, u32 viewFlag)
413{
414 auto* GX_RESTRICT pVertex = draw3DLineStrip(1, material, position, viewFlag);
415
416 if (pVertex)
417 {
418 pVertex[0]._position = position;
419 pVertex[0]._color = color;
420 }
421}
422
423//---------------------------------------------------------------------------
424// 3Dライン(Flat)
430//---------------------------------------------------------------------------
431void GxPrimitiveContext::draw3DLineF(const GxVector3& position0, const GxVector3& position1, const GxColor color, const GxPrimitiveMaterial& material, u32 viewFlag)
432{
433 draw3DLineG(position0, position1, color, color, material, viewFlag);
434}
435
436//---------------------------------------------------------------------------
437// 3Dライン(Gradation)
444//---------------------------------------------------------------------------
445void GxPrimitiveContext::draw3DLineG(const GxVector3& position0, const GxVector3& position1, const GxColor color0, const GxColor color1, const GxPrimitiveMaterial& material, u32 viewFlag)
446{
447 auto* GX_RESTRICT pVertex = draw3DLineStrip(2, material, (position0 + position1) * 0.5f, viewFlag);
448
449 if (pVertex)
450 {
451 pVertex[0]._position = position0;
452 pVertex[0]._color = color0;
453 pVertex[1]._position = position1;
454 pVertex[1]._color = color1;
455 }
456}
457
458//---------------------------------------------------------------------------
459// 3D三角形(Flat)
467//---------------------------------------------------------------------------
468void GxPrimitiveContext::draw3DTriangleF(const GxVector3& position0, const GxVector3& position1, const GxVector3& position2, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, u32 viewFlag)
469{
470 draw3DTriangleG(position0, position1, position2, color, color, color, fillMode, material, viewFlag);
471}
472
473//---------------------------------------------------------------------------
474// 3D四角形(Flat)
483//---------------------------------------------------------------------------
484void GxPrimitiveContext::draw3DQuadF(const GxVector3& position0, const GxVector3& position1, const GxVector3& position2, const GxVector3& position3, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, u32 viewFlag)
485{
486 draw3DQuadG(position0, position1, position2, position3, color, color, color, color, fillMode, material, viewFlag);
487}
488
489//---------------------------------------------------------------------------
490// 3Dテクスチャ付き四角形(Flat)
501//---------------------------------------------------------------------------
502void GxPrimitiveContext::draw3DQuadTextureF(const GxVector3& position0, const GxVector3& position1, const GxVector3& position2, const GxVector3& position3, const GxColor color, GxFloat2* pUvArray, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, GxFloat2* pUvArraySecond, u32 viewFlag)
503{
504 GxColor colorArray[4] = {color, color, color, color};
505 draw3DQuadTextureG(position0, position1, position2, position3, colorArray, pUvArray, fillMode, material, pUvArraySecond, viewFlag);
506}
507
508//---------------------------------------------------------------------------
509// 3Dベクトル(Flat)
518//---------------------------------------------------------------------------
519void GxPrimitiveContext::draw3DArrowF(const GxVector3& position0, const GxVector3& position1, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, f32 arrowRate, f32 arrowRadian, u32 viewFlag)
520{
521 draw3DArrowG(position0, position1, color, color, fillMode, material, arrowRate, arrowRadian, viewFlag );
522}
523
524//---------------------------------------------------------------------------
525// 3Dマトリクス
533//---------------------------------------------------------------------------
534void GxPrimitiveContext::draw3DMatrix(const GxMatrixAffine& matrix, f32 size, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, f32 arrowRate, f32 arrowRadius, u32 viewFlag)
535{
536 GxVector3 axisX((GxVector3::AXIS_X * size).getTransform(matrix));
537 GxVector3 axisY((GxVector3::AXIS_Y * size).getTransform(matrix));
538 GxVector3 axisZ((GxVector3::AXIS_Z * size).getTransform(matrix));
539
540 draw3DArrowG(matrix.getPosition(), axisX, GxColor::WHITE, GxColor::SYSTEM_AXIS_X, fillMode, material, arrowRate, arrowRadius, viewFlag);
541 draw3DArrowG(matrix.getPosition(), axisY, GxColor::WHITE, GxColor::SYSTEM_AXIS_Y, fillMode, material, arrowRate, arrowRadius, viewFlag);
542 draw3DArrowG(matrix.getPosition(), axisZ, GxColor::WHITE, GxColor::SYSTEM_AXIS_Z, fillMode, material, arrowRate, arrowRadius, viewFlag);
543}
544
545//---------------------------------------------------------------------------
546// 3Dマトリクス(ポジションのみ)
554//---------------------------------------------------------------------------
555void GxPrimitiveContext::draw3DMatrix(const GxVector3& position, f32 size, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, f32 arrowRate, f32 arrowRadius, u32 viewFlag)
556{
557 GxVector3 axisX((GxVector3::AXIS_X * size) + position);
558 GxVector3 axisY((GxVector3::AXIS_Y * size) + position);
559 GxVector3 axisZ((GxVector3::AXIS_Z * size) + position);
560
561 draw3DArrowG(position, axisX, GxColor::WHITE, GxColor::SYSTEM_AXIS_X, fillMode, material, arrowRate, arrowRadius, viewFlag);
562 draw3DArrowG(position, axisY, GxColor::WHITE, GxColor::SYSTEM_AXIS_Y, fillMode, material, arrowRate, arrowRadius, viewFlag);
563 draw3DArrowG(position, axisZ, GxColor::WHITE, GxColor::SYSTEM_AXIS_Z, fillMode, material, arrowRate, arrowRadius, viewFlag);
564}
565
566//---------------------------------------------------------------------------
567// 3D球(形状指定)
574//---------------------------------------------------------------------------
575void GxPrimitiveContext::draw3DSphere(const GxShapeSphere& sphere, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, u32 viewFlag)
576{
577 draw3DSphere(GxMatrixAffine(sphere.getPosition()), sphere.getRadius(), color, divide, fillMode, material, viewFlag);
578}
579
580//---------------------------------------------------------------------------
581// 3D球(ポジション指定)
589//---------------------------------------------------------------------------
590void GxPrimitiveContext::draw3DSphere(const GxVector3& center, f32 radius, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, u32 viewFlag)
591{
592 draw3DSphere(GxMatrixAffine(center), radius, color, divide, fillMode, material, viewFlag);
593}
594
595//---------------------------------------------------------------------------
596// 3D箱(形状指定)
602//---------------------------------------------------------------------------
603void GxPrimitiveContext::draw3DBox(const GxShapeBox& box, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial& material, u32 viewFlag)
604{
605 draw3DBox(box.getMatrix(), box.getExtent(), color, fillMode, material, viewFlag);
606}
607
608//---------------------------------------------------------------------------
609// パケットを確保
611//---------------------------------------------------------------------------
612GxPrimitiveManager::GxPacket* GxPrimitiveContext::allocatePacket(void)
613{
614 if( (GxPrimitiveManager::PACKET_BLOCK_SIZE / sizeof(GxPrimitiveManager::GxPacket)) - 1 <= _packetCountBlock )
615 {
616 // メモリが足りないので、マネージャからバッファを取得しなおす
617
618 auto* pNewPacket = _pManager->allocatePacketBlock();
619 if (pNewPacket)
620 {
621 if (!_pPacketTop)
622 {
623 _pPacketTop = pNewPacket; // 先頭を記録
624 }
625 else
626 {
627 // 残り1個は残っているはず
628 auto** ppNext = reinterpret_cast<GxPrimitiveManager::GxPacket**>(&(_pPacketBlock[_packetCountBlock]));
629 *ppNext = pNewPacket;
630
631 _packetCount++; // アドレス指定用の物もカウントする
632 }
633
634 _packetCountBlock = 0;
635 _pPacketBlock = pNewPacket;
636 }
637 else
638 {
639 return nullptr; // メモリ確保に失敗
640 }
641 }
642
643 _packetCount++;
644 return &_pPacketBlock[_packetCountBlock++];
645}
646
647//---------------------------------------------------------------------------
648// コマンドバッファを確保
651//---------------------------------------------------------------------------
652void* GxPrimitiveContext::allocateCommand(u32 size)
653{
654 // 16バイトアライメント
656
657 if( GxPrimitiveManager::COMMAND_BLOCK_SIZE < _commandSizeBlock + size )
658 {
659 // メモリが足りないので、マネージャからバッファを取得しなおす
660 auto* pBuffer = _pManager->allocateCommandBlock();
661 if (pBuffer)
662 {
663 _pCommandBlock = pBuffer;
664 _commandSizeBlock = 0;
665 }
666 else
667 {
668 return nullptr; // メモリ確保に失敗
669 }
670 }
671
672 auto* pCommand = _pCommandBlock;
673 _pCommandBlock = GX_POINTER_ADD(_pCommandBlock, size);
674 _commandSizeBlock += size;
675
676 return pCommand;
677}
678
679//---------------------------------------------------------------------------
680// 頂点バッファを確保
683//---------------------------------------------------------------------------
684GxPrimitiveVertex* GxPrimitiveContext::allocateVertexBuffer(u32 vertexCount)
685{
686 static const u32 vertexCountLimit = GxPrimitiveManager::VERTEX_BLOCK_SIZE / sizeof(GxPrimitiveVertex);
687
688 if( vertexCount > vertexCountLimit )
689 {
690 GX_ASSERT(vertexCount <= vertexCountLimit, "プリミティブの頂点数が最大値(%d)を超えています。最大値を超えないように分割して描画してください。", vertexCountLimit);
691 return nullptr;
692 }
693
694 if( _vertexCountBlock + vertexCount > vertexCountLimit )
695 {
696 // メモリが足りないので、マネージャからバッファを取得しなおす
697 auto* pBuffer = _pManager->allocateVertexBlock();
698 if (pBuffer)
699 {
700 _pVertexBlock = pBuffer;
701 _vertexCountBlock = 0;
702 }
703 else
704 {
705 return nullptr; // メモリ確保に失敗
706 }
707 }
708
709 auto* pVertex = _pVertexBlock;
710
711 _pVertexBlock += vertexCount;
712 _vertexCount += vertexCount;
713 _vertexCountBlock += vertexCount;
714
715 return pVertex;
716}
717
718GX_CORE_NAMESPACE_END()
PRIMITIVE_FILL_MODE
塗りつぶしモード
Definition GxPrimitive.h:31
static GX_FORCE_INLINE T getRoundUpFast(T value, size_t alignment)
数値切り上げ(高速版 ※2のべき乗指定)
Definition GxMath.h:537
static GX_FORCE_INLINE f32 getFastCos(const f32 radian)
余弦を取得(FPU, f32)
Definition GxMath.h:216
static GX_FORCE_INLINE f32 getFastSin(const f32 radian)
正弦を取得(FPU, f32)
Definition GxMath.h:209
@ _16
16byteアライメント
Definition GxMemory.h:54
プリミティブの並列発行を管理します。
Definition GxPrimitiveContext.h:22
GxPrimitiveVertex * draw3DLineStrip(u32 vertexCount, const GxPrimitiveMaterial &material, const GxVector3 &priorityPoint, u32 viewFlag=0xFFFFFFFF)
3Dラインストリップ
Definition GxPrimitiveContext.cpp:923
GX_FORCE_INLINE void draw2DRectTextureG(const GxRectF &rect, f32 z, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, const GxFloat2 &uv0, const GxFloat2 &uv1, const GxPrimitiveMaterial &material, const GxFloat2 &uvSecond0=GxFloat2(0.f, 0.f), const GxFloat2 &uvSecond1=GxFloat2(1.f, 1.f))
2Dテクスチャ付き四角形(Gradation)
Definition GxPrimitiveContext.inl:188
void draw3DQuadG(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxVector3 &position3, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D四角形(Gradation)
Definition GxPrimitiveContext.cpp:1172
GX_FORCE_INLINE void draw2DRectF(const GxRectF &rect, f32 z, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D四角形(Flat)
Definition GxPrimitiveContext.inl:105
GX_FORCE_INLINE void draw2DLineF(const GxVector3 &position0, const GxVector3 &position1, const GxColor color, const GxPrimitiveMaterial &material)
2Dライン(Flat)
Definition GxPrimitiveContext.inl:43
void draw2DFanG(const GxVector3 &position, f32 radius, f32 startRadian, f32 deltaRadian, const GxColor color0, const GxColor color1, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D扇形(Gradation)
Definition GxPrimitiveContext.cpp:816
GX_FORCE_INLINE void draw3DBox(const GxShapeBox &box, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D箱(形状指定)
Definition GxPrimitiveContext.inl:603
GX_FORCE_INLINE void draw2DArrowF(const GxVector3 &position0, const GxVector3 &position1, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, f32 arrowRate=0.2f, f32 arrowRadius=DEGREE_TO_RADIAN(30.0f))
2Dベクトル(Flat)
Definition GxPrimitiveContext.inl:360
GX_FORCE_INLINE void draw3DLineF(const GxVector3 &position0, const GxVector3 &position1, const GxColor color, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3Dライン(Flat)
Definition GxPrimitiveContext.inl:431
GX_FORCE_INLINE void draw3DQuadTextureF(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxVector3 &position3, const GxColor color, GxFloat2 *pUvArray, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, GxFloat2 *pUvArraySecond=nullptr, u32 viewFlag=0xFFFFFFFF)
3Dテクスチャ付き四角形(Flat)
Definition GxPrimitiveContext.inl:502
void draw2DTriangleG(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxColor color0, const GxColor color1, const GxColor color2, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D三角形(Gradation)
Definition GxPrimitiveContext.cpp:482
GX_FORCE_INLINE void draw3DTriangleF(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D三角形(Flat)
Definition GxPrimitiveContext.inl:468
GX_FORCE_INLINE void draw2DLineG(const GxVector3 &position0, const GxVector3 &position1, const GxColor color0, const GxColor color1, const GxPrimitiveMaterial &material)
2Dライン(Gradation)
Definition GxPrimitiveContext.inl:56
void draw3DQuadTextureG(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxVector3 &position3, GxColor *pColorArray, GxFloat2 *pUvArray, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, GxFloat2 *pUvArraySecond=nullptr, u32 viewFlag=0xFFFFFFFF)
3Dテクスチャ付き四角形(Gradation)
Definition GxPrimitiveContext.cpp:1246
void draw3DArrowG(const GxVector3 &position0, const GxVector3 &position1, const GxColor color0, const GxColor color1, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, f32 arrowRate=0.2f, f32 arrowRadian=DEGREE_TO_RADIAN(30.0f), u32 viewFlag=0xFFFFFFFF)
3Dベクトル(Gradation)
Definition GxPrimitiveContext.cpp:1344
GX_FORCE_INLINE void draw3DMatrix(const GxMatrixAffine &matrix, f32 size, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, f32 arrowRate=0.2f, f32 arrowRadius=DEGREE_TO_RADIAN(30.0f), u32 viewFlag=0xFFFFFFFF)
3Dマトリクス
Definition GxPrimitiveContext.inl:534
GX_FORCE_INLINE void draw3DQuadF(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxVector3 &position3, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D四角形(Flat)
Definition GxPrimitiveContext.inl:484
GX_FORCE_INLINE void draw3DLineG(const GxVector3 &position0, const GxVector3 &position1, const GxColor color0, const GxColor color1, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3Dライン(Gradation)
Definition GxPrimitiveContext.inl:445
void draw2DRectG(const GxRectF &rect, f32 z, const GxColor color0, const GxColor color1, const GxColor color2, const GxColor color3, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D四角形(Gradation)
Definition GxPrimitiveContext.cpp:535
GxPrimitiveVertex * draw2DTriangleFan(u32 vertexCount, const GxPrimitiveMaterial &material, f32 priority)
2Dトライアングルファン
Definition GxPrimitiveContext.cpp:350
GX_FORCE_INLINE void draw2DArrowG(const GxVector3 &position0, const GxVector3 &position1, const GxColor color0, const GxColor color1, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, f32 arrowRate=0.2f, f32 arrowRadius=DEGREE_TO_RADIAN(30.0f))
2Dベクトル(Gradation)
Definition GxPrimitiveContext.inl:376
GX_FORCE_INLINE void draw3DSphere(const GxShapeSphere &sphere, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D球(形状指定)
Definition GxPrimitiveContext.inl:575
GX_FORCE_INLINE void draw2DTriangleF(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D三角形(Flat)
Definition GxPrimitiveContext.inl:92
GX_FORCE_INLINE void draw2DRectTextureF(const GxRectF &rect, f32 z, const GxColor color, const GxFloat2 &uv0, const GxFloat2 &uv1, const GxPrimitiveMaterial &material, const GxFloat2 &uvSecond0=GxFloat2(0.f, 0.f), const GxFloat2 &uvSecond1=GxFloat2(1.f, 1.f))
2Dテクスチャ付き四角形(Flat)
Definition GxPrimitiveContext.inl:151
GX_FORCE_INLINE void draw3DPoint(const GxVector3 &position, const GxColor color, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D点
Definition GxPrimitiveContext.inl:412
GX_FORCE_INLINE void draw3DArrowF(const GxVector3 &position0, const GxVector3 &position1, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, f32 arrowRate=0.2f, f32 arrowRadian=DEGREE_TO_RADIAN(30.0f), u32 viewFlag=0xFFFFFFFF)
3Dベクトル(Flat)
Definition GxPrimitiveContext.inl:519
GxPrimitiveVertex * draw2DLineStrip(u32 vertexCount, const GxPrimitiveMaterial &material, f32 priority)
2Dラインストリップ
Definition GxPrimitiveContext.cpp:248
void draw3DTriangleG(const GxVector3 &position0, const GxVector3 &position1, const GxVector3 &position2, const GxColor color0, const GxColor color1, const GxColor color2, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material, u32 viewFlag=0xFFFFFFFF)
3D三角形(Gradation)
Definition GxPrimitiveContext.cpp:1102
GX_FORCE_INLINE void draw2DFanF(const GxVector3 &position, f32 radius, f32 startRadian, f32 deltaRadian, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D扇形(Flat)
Definition GxPrimitiveContext.inl:345
void draw2DCircleG(const GxVector3 &position, f32 radius, const GxColor color0, const GxColor color1, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D円(Gradation)
Definition GxPrimitiveContext.cpp:751
void draw2DPolyLineG(const GxVector3 &position0, const GxVector3 &position1, u32 width, const GxColor color0, const GxColor color1, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2Dポリライン(Gradation)
Definition GxPrimitiveContext.cpp:421
GX_FORCE_INLINE void draw2DCircleF(const GxVector3 &position, f32 radius, const GxColor color, u32 divide, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2D円(Flat)
Definition GxPrimitiveContext.inl:328
GX_FORCE_INLINE void draw2DPolyLineF(const GxVector3 &position0, const GxVector3 &position1, u32 width, const GxColor color, PRIMITIVE_FILL_MODE fillMode, const GxPrimitiveMaterial &material)
2Dポリライン(Flat)
Definition GxPrimitiveContext.inl:78
箱形状クラス
Definition GxShape.h:333
GX_FORCE_INLINE const GxVector3 & getExtent(void) const
大きさ取得
Definition GxShape.h:373
GX_FORCE_INLINE const GxMatrixAffine & getMatrix(void) const
マトリクス取得
Definition GxShape.h:379
球形状クラス
Definition GxShape.h:240
GX_FORCE_INLINE const GxVector3 & getPosition(void) const
位置取得
Definition GxShape.h:305
constexpr f32 getRadius(void) const
半径取得
Definition GxShape.h:301
Definition GxColor.h:21
static const GxColor SYSTEM_AXIS_X
X軸
Definition GxColor.h:55
static const GxColor SYSTEM_AXIS_Z
Z軸
Definition GxColor.h:57
static GX_FORCE_INLINE GxColor getLerp(const GxColor color0, const GxColor color1, f32 t)
補間値を取得(互換用)
Definition GxColor.inl:468
static const GxColor WHITE
Definition GxColor.h:37
static const GxColor SYSTEM_AXIS_Y
Y軸
Definition GxColor.h:56
2次元浮動小数点数クラス
Definition GxStruct.h:22
f32 _u
U値
Definition GxStruct.h:76
f32 _v
V値
Definition GxStruct.h:81
3次元浮動小数点数クラス
Definition GxStruct.h:91
アフィン変換行列(行優先)
Definition GxMatrix.h:330
GX_FORCE_INLINE const GxVector3 & getPosition(void) const
平行移動量を取得
Definition GxMatrix.h:454
描画パケット
Definition GxPrimitiveManager.h:136
プリミティブマテリアル
Definition GxPrimitive.h:103
プリミティブ頂点
Definition GxPrimitive.h:20
実数矩形
Definition GxStruct.h:1100
f32 _left
左辺
Definition GxStruct.h:1231
f32 _bottom
底辺
Definition GxStruct.h:1234
f32 _top
上辺
Definition GxStruct.h:1232
f32 _right
右辺
Definition GxStruct.h:1233
2次元ベクトル
Definition GxVector.h:34
f32 _y
Y値
Definition GxVector.h:235
f32 _x
X値
Definition GxVector.h:234
3次元ベクトル
Definition GxVector.h:245
f32 _z
Z値
Definition GxVector.h:572
f32 _y
Y値
Definition GxVector.h:571
static const GxVector3 AXIS_Z
(0, 0, 1)
Definition GxVector.h:264
static const GxVector3 AXIS_X
(1, 0, 0)
Definition GxVector.h:260
static const GxVector3 AXIS_Y
(0, 1, 0)
Definition GxVector.h:262
f32 _x
X値
Definition GxVector.h:570