DDraceNetwork Documentation
Loading...
Searching...
No Matches
graphics_threaded.h
Go to the documentation of this file.
1#ifndef ENGINE_CLIENT_GRAPHICS_THREADED_H
2#define ENGINE_CLIENT_GRAPHICS_THREADED_H
3
4#include <base/system.h>
5
6#include <engine/graphics.h>
8
9#include <atomic>
10#include <cstddef>
11#include <mutex>
12#include <string>
13#include <vector>
14
15constexpr int CMD_BUFFER_DATA_BUFFER_SIZE = 1024 * 1024 * 2;
16constexpr int CMD_BUFFER_CMD_BUFFER_SIZE = 1024 * 256;
17
19{
20 class CBuffer
21 {
22 unsigned char *m_pData;
23 unsigned m_Size;
24 unsigned m_Used;
25
26 public:
28 {
30 m_pData = new unsigned char[m_Size];
31 m_Used = 0;
32 }
33
35 {
36 delete[] m_pData;
37 m_pData = nullptr;
38 m_Used = 0;
39 m_Size = 0;
40 }
41
42 void Reset()
43 {
44 m_Used = 0;
45 }
46
47 void *Alloc(unsigned Requested, unsigned Alignment = alignof(std::max_align_t))
48 {
49 size_t Offset = reinterpret_cast<uintptr_t>(m_pData + m_Used) % Alignment;
50 if(Offset)
52
54 return nullptr;
55
56 void *pPtr = &m_pData[m_Used + Offset];
58 return pPtr;
59 }
60
61 unsigned char *DataPtr() { return m_pData; }
62 unsigned DataSize() const { return m_Size; }
63 unsigned DataUsed() const { return m_Used; }
64 };
65
66public:
68 size_t m_CommandCount = 0;
70
72
73 enum
74 {
75 MAX_TEXTURES = 1024 * 8,
76 MAX_VERTICES = 32 * 1024,
77 };
78
80 {
81 // command groups
82 CMDGROUP_CORE = 0, // commands that everyone has to implement
83 CMDGROUP_PLATFORM_GL = 10000, // commands specific to a platform
85
87
88 // synchronization
90
91 // texture commands
97
98 // rendering
102
103 // opengl 2.0+ commands (some are just emulated and only exist in opengl 3.3+)
107 CMD_COPY_BUFFER_OBJECT, // copy vbo to another
109
113
114 CMD_INDICES_REQUIRED_NUM_NOTIFY, // create indices that are required
115
116 CMD_RENDER_TILE_LAYER, // render a tilelayer
117 CMD_RENDER_BORDER_TILE, // render one tile multiple times
118 CMD_RENDER_QUAD_LAYER, // render a quad layer
119 CMD_RENDER_QUAD_LAYER_GROUPED, // render a quad layer in groups meaning they all share the same envelope and offset (which can be none)
120 CMD_RENDER_TEXT, // render text
121 CMD_RENDER_QUAD_CONTAINER, // render a quad buffer container
122 CMD_RENDER_QUAD_CONTAINER_EX, // render a quad buffer container with extended parameters
123 CMD_RENDER_QUAD_CONTAINER_SPRITE_MULTIPLE, // render a quad buffer container as sprite multiple times
124
125 // swap
127
128 // misc
134
135 // in Android a window that minimizes gets destroyed
138
140 };
141
142 enum
143 {
146
151 };
152
153 enum
154 {
155 //
160 };
161
162 enum
163 {
167 };
168
169 enum
170 {
173 };
174
175 typedef vec2 SPoint;
182
183 struct SCommand
184 {
185 public:
186 SCommand(unsigned Cmd) :
188 unsigned m_Cmd;
190 };
193
209
217
224
225 struct SCommand_Render : public SCommand
226 {
230 unsigned m_PrimType;
231 unsigned m_PrimCount;
232 SVertex *m_pVertices; // you should use the command buffer data to allocate vertices for this command
233 };
234
236 {
240 unsigned m_PrimType;
241 unsigned m_PrimCount;
242 SVertexTex3DStream *m_pVertices; // you should use the command buffer data to allocate vertices for this command
243 };
244
246 {
249
251
255
256 int m_Flags; // @see EBufferObjectCreateFlags
257 };
258
260 {
263
265
269
270 int m_Flags; // @see EBufferObjectCreateFlags
271 };
272
285
298
306
320
334
343
351
353 {
357 SColorf m_Color; // the color of the whole tilelayer -- already enveloped
358
359 // the char offset of all indices that should be rendered, and the amount of renders
361 unsigned int *m_pDrawCount;
362
365 };
366
380
392
409
421
438
456
458 {
462 SColorf *m_pColor; // processor will fill this out
463 bool *m_pSwapped; // processor may set this to true, must be initialized to false by the caller
464 };
465
467 {
470 CImageInfo *m_pImage; // processor will fill this out, the one who adds this command must free the data as well
471 bool *m_pSwapped; // processor may set this to true, must be initialized to false by the caller
472 };
473
474 struct SCommand_Swap : public SCommand
475 {
478 };
479
480 struct SCommand_VSync : public SCommand
481 {
484
486 bool *m_pRetOk;
487 };
488
498
500 {
503
504 int m_X;
505 int m_Y;
508 bool m_ByResize; // resized by an resize event.. a hint to make clear that the viewport update can be deferred if wanted
509 };
510
512 {
515
516 // texture information
518
519 size_t m_Width;
520 size_t m_Height;
522 // data must be in RGBA format
523 uint8_t *m_pData; // will be freed by the command processor
524 };
525
527 {
530
531 // texture information
533 };
534
536 {
539
540 // texture information
543
544 size_t m_Width;
545 size_t m_Height;
546
547 uint8_t *m_pTextData; // will be freed by the command processor
548 uint8_t *m_pTextOutlineData; // will be freed by the command processor
549 };
550
552 {
555
556 // texture information
559 };
560
562 {
565
566 // texture information
568
569 int m_X;
570 int m_Y;
571 size_t m_Width;
572 size_t m_Height;
573 uint8_t *m_pData; // will be freed by the command processor
574 };
575
583
591
592 //
597
598 void *AllocData(unsigned WantedSize)
599 {
601 }
602
603 template<class T>
605 {
606 // make sure that we don't do something stupid like ->AddCommand(&Cmd);
607 (void)static_cast<const SCommand *>(&Command);
608
609 // allocate and copy the command into the buffer
610 T *pCmd = (T *)m_CmdBuffer.Alloc(sizeof(*pCmd), alignof(T));
611 if(!pCmd)
612 return false;
613 *pCmd = Command;
614 pCmd->m_pNext = nullptr;
615
621
623
624 return true;
625 }
626
628 {
629 return m_pCmdBufferHead;
630 }
631
632 void Reset()
633 {
637
638 m_CommandCount = 0;
640 }
641
646};
647
660
661// interface for the graphics backend
662// all these functions are called on the main thread
664{
665public:
666 enum
667 {
673 };
674
675 virtual ~IGraphicsBackend() = default;
676
677 virtual int Init(const char *pName, int *pScreen, int *pWidth, int *pHeight, int *pRefreshRate, int *pFsaaSamples, int Flags, int *pDesktopWidth, int *pDesktopHeight, int *pCurrentWidth, int *pCurrentHeight, class IStorage *pStorage) = 0;
678 virtual int Shutdown() = 0;
679
680 virtual uint64_t TextureMemoryUsage() const = 0;
681 virtual uint64_t BufferMemoryUsage() const = 0;
682 virtual uint64_t StreamedMemoryUsage() const = 0;
683 virtual uint64_t StagingMemoryUsage() const = 0;
684
685 virtual const TTwGraphicsGpuList &GetGpus() const = 0;
686
687 virtual void GetVideoModes(CVideoMode *pModes, int MaxModes, int *pNumModes, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen) = 0;
688 virtual void GetCurrentVideoMode(CVideoMode &CurMode, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen) = 0;
689
690 virtual int GetNumScreens() const = 0;
691 virtual const char *GetScreenName(int Screen) const = 0;
692
693 virtual void Minimize() = 0;
694 virtual void Maximize() = 0;
695 virtual void SetWindowParams(int FullscreenMode, bool IsBorderless) = 0;
696 virtual bool SetWindowScreen(int Index) = 0;
697 virtual bool UpdateDisplayMode(int Index) = 0;
698 virtual int GetWindowScreen() = 0;
699 virtual int WindowActive() = 0;
700 virtual int WindowOpen() = 0;
701 virtual void SetWindowGrab(bool Grab) = 0;
702 // returns true, if the video mode changed
703 virtual bool ResizeWindow(int w, int h, int RefreshRate) = 0;
704 virtual void GetViewportSize(int &w, int &h) = 0;
705 virtual void NotifyWindow() = 0;
706 virtual bool IsScreenKeyboardShown() = 0;
707
710
711 virtual void RunBuffer(CCommandBuffer *pBuffer) = 0;
713 virtual bool IsIdle() const = 0;
714 virtual void WaitForIdle() = 0;
715
717 // checks if the current values of the config are a graphics modern API
718 virtual bool IsConfigModernAPI() { return false; }
719 virtual bool UseTrianglesAsQuad() { return false; }
720 virtual bool HasTileBuffering() { return false; }
721 virtual bool HasQuadBuffering() { return false; }
722 virtual bool HasTextBuffering() { return false; }
723 virtual bool HasQuadContainerBuffering() { return false; }
724 virtual bool Uses2DTextureArrays() { return false; }
725 virtual bool HasTextureArraysSupport() { return false; }
726 virtual const char *GetErrorString() { return nullptr; }
727
728 virtual const char *GetVendorString() = 0;
729 virtual const char *GetVersionString() = 0;
730 virtual const char *GetRendererString() = 0;
731
732 // be aware that this function should only be called from the graphics thread, and even then you should really know what you are doing
734
735 virtual bool GetWarning(std::vector<std::string> &WarningStrings) = 0;
736
740 virtual std::optional<int> ShowMessageBox(const IGraphics::CMessageBox &MessageBox) = 0;
741};
742
744{
745 enum
746 {
748
752 };
753
763
767
768 //
772
774
778
781
783
788
790
791 std::vector<int> m_vTextureIndices;
794
795 std::atomic<bool> m_WarnPngliteIncompatibleImages = false;
796
797 std::mutex m_WarningsMutex;
798 std::vector<SWarning> m_vWarnings;
799
800 // is a non full windowed (in a sense that the viewport won't include the whole window),
801 // forced viewport, so that it justifies our UI ratio needs
802 bool m_IsForcedViewport = false;
803
805 {
808 // keep a reference to it, so we can free the ID
810
812 };
813 std::vector<SVertexArrayInfo> m_vVertexArrayInfo;
815
816 std::vector<int> m_vBufferObjectIndices;
818
844 std::vector<SQuadContainer> m_vQuadContainers;
846
847 std::vector<WINDOW_RESIZE_FUNC> m_vResizeListeners;
848 std::vector<WINDOW_PROPS_CHANGED_FUNC> m_vPropChangeListeners;
849
850 void *AllocCommandBufferData(size_t AllocSize);
851
852 void AddVertices(int Count);
855
856 template<typename TName>
857 void Rotate(const CCommandBuffer::SPoint &rCenter, TName *pPoints, int NumPoints)
858 {
859 float c = std::cos(m_Rotation);
860 float s = std::sin(m_Rotation);
861 float x, y;
862 int i;
863
865 for(i = 0; i < NumPoints; i++)
866 {
867 x = pVertices[i].m_Pos.x - rCenter.x;
868 y = pVertices[i].m_Pos.y - rCenter.y;
869 pVertices[i].m_Pos.x = x * c - y * s + rCenter.x;
870 pVertices[i].m_Pos.y = x * s + y * c + rCenter.y;
871 }
872 }
873
874 template<typename TName>
875 void AddCmd(
876 TName &Cmd, std::function<bool()> FailFunc = [] { return true; })
877 {
879 return;
880
881 // kick command buffer and try again
883
884 dbg_assert(FailFunc(), "graphics: failed to run fail handler for command '%s'", typeid(TName).name());
885 dbg_assert(m_pCommandBuffer->AddCommandUnsafe(Cmd), "graphics: failed to add command '%s' to command buffer", typeid(TName).name());
886 }
887
888 void KickCommandBuffer();
889
891
893
896 void ReadPixelDirect(bool *pSwapped);
897 void ScreenshotDirect(bool *pSwapped);
898
899 int IssueInit();
900 int InitWindow();
901
902public:
904
905 void ClipEnable(int x, int y, int w, int h) override;
906 void ClipDisable() override;
907
908 void BlendNone() override;
909 void BlendNormal() override;
910 void BlendAdditive() override;
911
912 void WrapNormal() override;
913 void WrapClamp() override;
914
915 uint64_t TextureMemoryUsage() const override;
916 uint64_t BufferMemoryUsage() const override;
917 uint64_t StreamedMemoryUsage() const override;
918 uint64_t StagingMemoryUsage() const override;
919
920 const TTwGraphicsGpuList &GetGpus() const override;
921
922 void MapScreen(float TopLeftX, float TopLeftY, float BottomRightX, float BottomRightY) override;
923 void GetScreen(float *pTopLeftX, float *pTopLeftY, float *pBottomRightX, float *pBottomRightY) override;
924
925 void LinesBegin() override;
926 void LinesEnd() override;
927 void LinesDraw(const CLineItem *pArray, size_t Num) override;
928
929 void LinesBatchBegin(CLineItemBatch *pBatch) override;
930 void LinesBatchEnd(CLineItemBatch *pBatch) override;
931 void LinesBatchDraw(CLineItemBatch *pBatch, const CLineItem *pArray, size_t Num) override;
932
936 void LoadTextureAddWarning(size_t Width, size_t Height, int Flags, const char *pTexName);
937 IGraphics::CTextureHandle LoadTextureRaw(const CImageInfo &Image, int Flags, const char *pTexName = nullptr) override;
938 IGraphics::CTextureHandle LoadTextureRawMove(CImageInfo &Image, int Flags, const char *pTexName = nullptr) override;
939
942 bool UpdateTextTexture(CTextureHandle TextureId, int x, int y, size_t Width, size_t Height, uint8_t *pData, bool IsMovedPointer) override;
943
945
946 bool IsImageSubFullyTransparent(const CImageInfo &FromImageInfo, int x, int y, int w, int h) override;
948
949 // simple uncompressed RGBA loaders
950 IGraphics::CTextureHandle LoadTexture(const char *pFilename, int StorageType, int Flags = 0) override;
951 bool LoadPng(CImageInfo &Image, const char *pFilename, int StorageType) override;
952 bool LoadPng(CImageInfo &Image, const uint8_t *pData, size_t DataSize, const char *pContextName) override;
953
954 bool CheckImageDivisibility(const char *pContextName, CImageInfo &Image, int DivX, int DivY, bool AllowResize) override;
955 bool IsImageFormatRgba(const char *pContextName, const CImageInfo &Image) override;
956
957 void TextureSet(CTextureHandle TextureId) override;
958
959 void Clear(float r, float g, float b, bool ForceClearNow = false) override;
960
961 void QuadsBegin() override;
962 void QuadsEnd() override;
963 void QuadsTex3DBegin() override;
964 void QuadsTex3DEnd() override;
965 void TrianglesBegin() override;
966 void TrianglesEnd() override;
967 void QuadsEndKeepVertices() override;
968 void QuadsDrawCurrentVertices(bool KeepVertices = true) override;
969 void QuadsSetRotation(float Angle) override;
970
971 template<typename TName>
973 {
975 pVert->m_Color = m_aColor[ColorIndex];
976 }
977
978 void SetColorVertex(const CColorVertex *pArray, size_t Num) override;
979 void SetColor(float r, float g, float b, float a) override;
980 void SetColor(ColorRGBA Color) override;
982
983 // go through all vertices and change their color (only works for quads)
984 void ChangeColorOfCurrentQuadVertices(float r, float g, float b, float a) override;
985 void ChangeColorOfQuadVertices(size_t QuadOffset, unsigned char r, unsigned char g, unsigned char b, unsigned char a) override;
986
987 void QuadsSetSubset(float TlU, float TlV, float BrU, float BrV) override;
989 float x0, float y0, float x1, float y1,
990 float x2, float y2, float x3, float y3, int Index = -1) override;
991
992 void QuadsDraw(CQuadItem *pArray, int Num) override;
993
994 template<typename TName>
996 {
998
999 dbg_assert(m_Drawing == DRAWING_QUADS, "called Graphics()->QuadsDrawTL without begin");
1000
1001 if(g_Config.m_GfxQuadAsTriangle && !m_GLUseTrianglesAsQuad)
1002 {
1003 for(int i = 0; i < Num; ++i)
1004 {
1005 // first triangle
1006 pVertices[m_NumVertices + 6 * i].m_Pos.x = pArray[i].m_X;
1007 pVertices[m_NumVertices + 6 * i].m_Pos.y = pArray[i].m_Y;
1008 pVertices[m_NumVertices + 6 * i].m_Tex = m_aTexture[0];
1009 SetColor(&pVertices[m_NumVertices + 6 * i], 0);
1010
1011 pVertices[m_NumVertices + 6 * i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1012 pVertices[m_NumVertices + 6 * i + 1].m_Pos.y = pArray[i].m_Y;
1013 pVertices[m_NumVertices + 6 * i + 1].m_Tex = m_aTexture[1];
1014 SetColor(&pVertices[m_NumVertices + 6 * i + 1], 1);
1015
1016 pVertices[m_NumVertices + 6 * i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1017 pVertices[m_NumVertices + 6 * i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1018 pVertices[m_NumVertices + 6 * i + 2].m_Tex = m_aTexture[2];
1019 SetColor(&pVertices[m_NumVertices + 6 * i + 2], 2);
1020
1021 // second triangle
1022 pVertices[m_NumVertices + 6 * i + 3].m_Pos.x = pArray[i].m_X;
1023 pVertices[m_NumVertices + 6 * i + 3].m_Pos.y = pArray[i].m_Y;
1024 pVertices[m_NumVertices + 6 * i + 3].m_Tex = m_aTexture[0];
1025 SetColor(&pVertices[m_NumVertices + 6 * i + 3], 0);
1026
1027 pVertices[m_NumVertices + 6 * i + 4].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1028 pVertices[m_NumVertices + 6 * i + 4].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1029 pVertices[m_NumVertices + 6 * i + 4].m_Tex = m_aTexture[2];
1030 SetColor(&pVertices[m_NumVertices + 6 * i + 4], 2);
1031
1032 pVertices[m_NumVertices + 6 * i + 5].m_Pos.x = pArray[i].m_X;
1033 pVertices[m_NumVertices + 6 * i + 5].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1034 pVertices[m_NumVertices + 6 * i + 5].m_Tex = m_aTexture[3];
1035 SetColor(&pVertices[m_NumVertices + 6 * i + 5], 3);
1036
1037 if(m_Rotation != 0)
1038 {
1039 Center.x = pArray[i].m_X + pArray[i].m_Width / 2;
1040 Center.y = pArray[i].m_Y + pArray[i].m_Height / 2;
1041
1042 Rotate(Center, &pVertices[m_NumVertices + 6 * i], 6);
1043 }
1044 }
1045
1046 AddVertices(3 * 2 * Num, pVertices);
1047 }
1048 else
1049 {
1050 for(int i = 0; i < Num; ++i)
1051 {
1052 pVertices[m_NumVertices + 4 * i].m_Pos.x = pArray[i].m_X;
1053 pVertices[m_NumVertices + 4 * i].m_Pos.y = pArray[i].m_Y;
1054 pVertices[m_NumVertices + 4 * i].m_Tex = m_aTexture[0];
1055 SetColor(&pVertices[m_NumVertices + 4 * i], 0);
1056
1057 pVertices[m_NumVertices + 4 * i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1058 pVertices[m_NumVertices + 4 * i + 1].m_Pos.y = pArray[i].m_Y;
1059 pVertices[m_NumVertices + 4 * i + 1].m_Tex = m_aTexture[1];
1060 SetColor(&pVertices[m_NumVertices + 4 * i + 1], 1);
1061
1062 pVertices[m_NumVertices + 4 * i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1063 pVertices[m_NumVertices + 4 * i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1064 pVertices[m_NumVertices + 4 * i + 2].m_Tex = m_aTexture[2];
1065 SetColor(&pVertices[m_NumVertices + 4 * i + 2], 2);
1066
1067 pVertices[m_NumVertices + 4 * i + 3].m_Pos.x = pArray[i].m_X;
1068 pVertices[m_NumVertices + 4 * i + 3].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1069 pVertices[m_NumVertices + 4 * i + 3].m_Tex = m_aTexture[3];
1070 SetColor(&pVertices[m_NumVertices + 4 * i + 3], 3);
1071
1072 if(m_Rotation != 0)
1073 {
1074 Center.x = pArray[i].m_X + pArray[i].m_Width / 2;
1075 Center.y = pArray[i].m_Y + pArray[i].m_Height / 2;
1076
1077 Rotate(Center, &pVertices[m_NumVertices + 4 * i], 4);
1078 }
1079 }
1080
1081 AddVertices(4 * Num, pVertices);
1082 }
1083 }
1084
1085 void QuadsDrawTL(const CQuadItem *pArray, int Num) override;
1086
1087 void QuadsTex3DDrawTL(const CQuadItem *pArray, int Num) override;
1088
1089 void QuadsDrawFreeform(const CFreeformItem *pArray, int Num) override;
1090 void QuadsText(float x, float y, float Size, const char *pText) override;
1091
1092 void DrawRectExt(float x, float y, float w, float h, float r, int Corners) override;
1093 void DrawRectExt4(float x, float y, float w, float h, ColorRGBA ColorTopLeft, ColorRGBA ColorTopRight, ColorRGBA ColorBottomLeft, ColorRGBA ColorBottomRight, float r, int Corners) override;
1094 int CreateRectQuadContainer(float x, float y, float w, float h, float r, int Corners) override;
1095 void DrawRect(float x, float y, float w, float h, ColorRGBA Color, int Corners, float Rounding) override;
1096 void DrawRect4(float x, float y, float w, float h, ColorRGBA ColorTopLeft, ColorRGBA ColorTopRight, ColorRGBA ColorBottomLeft, ColorRGBA ColorBottomRight, int Corners, float Rounding) override;
1097 void DrawCircle(float CenterX, float CenterY, float Radius, int Segments) override;
1098
1099 int CreateQuadContainer(bool AutomaticUpload = true) override;
1101 void QuadContainerUpload(int ContainerIndex) override;
1102 int QuadContainerAddQuads(int ContainerIndex, CQuadItem *pArray, int Num) override;
1103 int QuadContainerAddQuads(int ContainerIndex, CFreeformItem *pArray, int Num) override;
1104 void QuadContainerReset(int ContainerIndex) override;
1105 void DeleteQuadContainer(int &ContainerIndex) override;
1106 void RenderQuadContainer(int ContainerIndex, int QuadDrawNum) override;
1107 void RenderQuadContainer(int ContainerIndex, int QuadOffset, int QuadDrawNum, bool ChangeWrapMode = true) override;
1108 void RenderQuadContainerEx(int ContainerIndex, int QuadOffset, int QuadDrawNum, float X, float Y, float ScaleX = 1.f, float ScaleY = 1.f) override;
1109 void RenderQuadContainerAsSprite(int ContainerIndex, int QuadOffset, float X, float Y, float ScaleX = 1.f, float ScaleY = 1.f) override;
1110 void RenderQuadContainerAsSpriteMultiple(int ContainerIndex, int QuadOffset, int DrawCount, SRenderSpriteInfo *pRenderInfo) override;
1111
1112 // sprites
1113private:
1114 vec2 m_SpriteScale = vec2(-1.0f, -1.0f);
1115
1116protected:
1117 void SelectSprite(const CDataSprite *pSprite, int Flags);
1118
1119public:
1120 void SelectSprite(int Id, int Flags = 0) override;
1121 void SelectSprite7(int Id, int Flags = 0) override;
1122
1123 void GetSpriteScale(const CDataSprite *pSprite, float &ScaleX, float &ScaleY) const override;
1124 void GetSpriteScale(int Id, float &ScaleX, float &ScaleY) const override;
1125 void GetSpriteScaleImpl(int Width, int Height, float &ScaleX, float &ScaleY) const override;
1126
1127 void DrawSprite(float x, float y, float Size) override;
1128 void DrawSprite(float x, float y, float ScaledWidth, float ScaledHeight) override;
1129
1130 int QuadContainerAddSprite(int QuadContainerIndex, float x, float y, float Size) override;
1131 int QuadContainerAddSprite(int QuadContainerIndex, float Size) override;
1132 int QuadContainerAddSprite(int QuadContainerIndex, float Width, float Height) override;
1133 int QuadContainerAddSprite(int QuadContainerIndex, float X, float Y, float Width, float Height) override;
1134
1135 template<typename TName>
1136 void FlushVerticesImpl(bool KeepVertices, int &PrimType, size_t &PrimCount, size_t &NumVerts, TName &Command, size_t VertSize)
1137 {
1138 Command.m_pVertices = nullptr;
1139 if(m_NumVertices == 0)
1140 return;
1141
1143
1144 if(!KeepVertices)
1145 m_NumVertices = 0;
1146
1148 {
1149 if(g_Config.m_GfxQuadAsTriangle && !m_GLUseTrianglesAsQuad)
1150 {
1152 PrimCount = NumVerts / 3;
1153 }
1154 else
1155 {
1157 PrimCount = NumVerts / 4;
1158 }
1159 }
1160 else if(m_Drawing == DRAWING_LINES)
1161 {
1163 PrimCount = NumVerts / 2;
1164 }
1165 else if(m_Drawing == DRAWING_TRIANGLES)
1166 {
1168 PrimCount = NumVerts / 3;
1169 }
1170 else
1171 return;
1172
1173 Command.m_pVertices = (decltype(Command.m_pVertices))AllocCommandBufferData(VertSize * NumVerts);
1174 Command.m_State = m_State;
1175
1176 Command.m_PrimType = PrimType;
1177 Command.m_PrimCount = PrimCount;
1178
1179 AddCmd(Command, [&] {
1180 Command.m_pVertices = (decltype(Command.m_pVertices))m_pCommandBuffer->AllocData(VertSize * NumVerts);
1181 return Command.m_pVertices != nullptr;
1182 });
1183
1185 }
1186
1187 void FlushVertices(bool KeepVertices = false) override;
1188 void FlushVerticesTex3D() override;
1189
1190 void RenderTileLayer(int BufferContainerIndex, const ColorRGBA &Color, char **pOffsets, unsigned int *pIndicedVertexDrawNum, size_t NumIndicesOffset) override;
1191 void RenderBorderTiles(int BufferContainerIndex, const ColorRGBA &Color, char *pIndexBufferOffset, const vec2 &Offset, const vec2 &Scale, uint32_t DrawNum) override;
1192 void RenderQuadLayer(int BufferContainerIndex, SQuadRenderInfo *pQuadInfo, size_t QuadNum, int QuadOffset, bool Grouped = false) override;
1193 void RenderText(int BufferContainerIndex, int TextQuadNum, int TextureSize, int TextureTextIndex, int TextureTextOutlineIndex, const ColorRGBA &TextColor, const ColorRGBA &TextOutlineColor) override;
1194
1195 // modern GL functions
1196 int CreateBufferObject(size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer = false) override;
1197 void RecreateBufferObject(int BufferIndex, size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer = false) override;
1198 void UpdateBufferObjectInternal(int BufferIndex, size_t UploadDataSize, void *pUploadData, void *pOffset, bool IsMovedPointer = false);
1200 void DeleteBufferObject(int BufferIndex) override;
1201
1203 // destroying all buffer objects means, that all referenced VBOs are destroyed automatically, so the user does not need to save references to them
1204 void DeleteBufferContainer(int &ContainerIndex, bool DestroyAllBO = true) override;
1206 void IndicesNumRequiredNotify(unsigned int RequiredIndicesCount) override;
1207
1208 int GetNumScreens() const override;
1209 const char *GetScreenName(int Screen) const override;
1210
1211 void Minimize() override;
1212 void Maximize() override;
1213 void WarnPngliteIncompatibleImages(bool Warn) override;
1214 void SetWindowParams(int FullscreenMode, bool IsBorderless) override;
1215 bool SetWindowScreen(int Index) override;
1216 bool SwitchWindowScreen(int Index) override;
1217 void Move(int x, int y) override;
1218 bool Resize(int w, int h, int RefreshRate) override;
1219 void ResizeToScreen() override;
1220 void GotResized(int w, int h, int RefreshRate) override;
1221 void UpdateViewport(int X, int Y, int W, int H, bool ByResize) override;
1222 bool IsScreenKeyboardShown() override;
1223
1226 int GetWindowScreen() override;
1227
1228 void WindowDestroyNtf(uint32_t WindowId) override;
1229 void WindowCreateNtf(uint32_t WindowId) override;
1230
1231 int WindowActive() override;
1232 int WindowOpen() override;
1233
1234 void SetWindowGrab(bool Grab) override;
1235 void NotifyWindow() override;
1236
1237 int Init() override;
1238 void Shutdown() override;
1239
1240 void ReadPixel(ivec2 Position, ColorRGBA *pColor) override;
1241 void TakeScreenshot(const char *pFilename) override;
1242 void TakeCustomScreenshot(const char *pFilename) override;
1243 void Swap() override;
1244 bool SetVSync(bool State) override;
1246
1247 int GetVideoModes(CVideoMode *pModes, int MaxModes, int Screen) override;
1248 void GetCurrentVideoMode(CVideoMode &CurMode, int Screen) override;
1249
1250 virtual int GetDesktopScreenWidth() const { return g_Config.m_GfxDesktopWidth; }
1251 virtual int GetDesktopScreenHeight() const { return g_Config.m_GfxDesktopHeight; }
1252
1253 // synchronization
1254 void InsertSignal(CSemaphore *pSemaphore) override;
1255 bool IsIdle() const override;
1256 void WaitForIdle() override;
1257
1258 void AddWarning(const SWarning &Warning);
1259 std::optional<SWarning> CurrentWarning() override;
1260
1261 std::optional<int> ShowMessageBox(const CMessageBox &MessageBox) override;
1262
1263 bool IsBackendInitialized() override;
1264
1266 bool IsConfigModernAPI() override { return m_pBackend->IsConfigModernAPI(); }
1273
1274 const char *GetVendorString() override;
1275 const char *GetVersionString() override;
1276 const char *GetRendererString() override;
1277
1279};
1280
1281typedef std::function<const char *(const char *, const char *)> TTranslateFunc;
1283
1284#endif // ENGINE_CLIENT_GRAPHICS_THREADED_H
Definition graphics_threaded.h:21
unsigned char * m_pData
Definition graphics_threaded.h:22
~CBuffer()
Definition graphics_threaded.h:34
unsigned m_Used
Definition graphics_threaded.h:24
void Reset()
Definition graphics_threaded.h:42
unsigned DataSize() const
Definition graphics_threaded.h:62
CBuffer(unsigned BufferSize)
Definition graphics_threaded.h:27
void * Alloc(unsigned Requested, unsigned Alignment=alignof(std::max_align_t))
Definition graphics_threaded.h:47
unsigned DataUsed() const
Definition graphics_threaded.h:63
unsigned char * DataPtr()
Definition graphics_threaded.h:61
unsigned m_Size
Definition graphics_threaded.h:23
Definition graphics_threaded.h:19
SCommand * Head()
Definition graphics_threaded.h:627
GL_SVertexTex3D SVertexTex3D
Definition graphics_threaded.h:180
bool AddCommandUnsafe(const T &Command)
Definition graphics_threaded.h:604
void * AllocData(unsigned WantedSize)
Definition graphics_threaded.h:598
vec2 STexCoord
Definition graphics_threaded.h:176
SCommand * m_pCmdBufferHead
Definition graphics_threaded.h:191
@ MAX_VERTICES
Definition graphics_threaded.h:76
@ MAX_TEXTURES
Definition graphics_threaded.h:75
ECommandBufferCMD
Definition graphics_threaded.h:80
@ CMD_MULTISAMPLING
Definition graphics_threaded.h:129
@ CMD_COPY_BUFFER_OBJECT
Definition graphics_threaded.h:107
@ CMD_RECREATE_BUFFER_OBJECT
Definition graphics_threaded.h:105
@ CMD_RENDER_QUAD_LAYER_GROUPED
Definition graphics_threaded.h:119
@ CMD_VSYNC
Definition graphics_threaded.h:130
@ CMD_TEXT_TEXTURES_DESTROY
Definition graphics_threaded.h:95
@ CMD_RENDER_BORDER_TILE
Definition graphics_threaded.h:117
@ CMD_RENDER_QUAD_CONTAINER_SPRITE_MULTIPLE
Definition graphics_threaded.h:123
@ CMD_TEXTURE_DESTROY
Definition graphics_threaded.h:93
@ CMD_UPDATE_VIEWPORT
Definition graphics_threaded.h:133
@ CMD_INDICES_REQUIRED_NUM_NOTIFY
Definition graphics_threaded.h:114
@ CMD_UPDATE_BUFFER_OBJECT
Definition graphics_threaded.h:106
@ CMD_TEXTURE_CREATE
Definition graphics_threaded.h:92
@ CMDGROUP_PLATFORM_GL
Definition graphics_threaded.h:83
@ CMD_RENDER_TEX3D
Definition graphics_threaded.h:101
@ CMD_SIGNAL
Definition graphics_threaded.h:89
@ CMD_RENDER_QUAD_CONTAINER_EX
Definition graphics_threaded.h:122
@ CMD_WINDOW_CREATE_NTF
Definition graphics_threaded.h:136
@ CMDGROUP_CORE
Definition graphics_threaded.h:82
@ CMD_RENDER_QUAD_CONTAINER
Definition graphics_threaded.h:121
@ CMD_RENDER_TEXT
Definition graphics_threaded.h:120
@ CMD_RENDER
Definition graphics_threaded.h:100
@ CMD_UPDATE_BUFFER_CONTAINER
Definition graphics_threaded.h:112
@ CMD_WINDOW_DESTROY_NTF
Definition graphics_threaded.h:137
@ CMD_RENDER_TILE_LAYER
Definition graphics_threaded.h:116
@ CMD_CLEAR
Definition graphics_threaded.h:99
@ CMD_TEXT_TEXTURE_UPDATE
Definition graphics_threaded.h:96
@ CMD_TRY_SWAP_AND_READ_PIXEL
Definition graphics_threaded.h:131
@ CMD_SWAP
Definition graphics_threaded.h:126
@ CMD_RENDER_QUAD_LAYER
Definition graphics_threaded.h:118
@ CMDGROUP_PLATFORM_SDL
Definition graphics_threaded.h:84
@ CMD_COUNT
Definition graphics_threaded.h:139
@ CMD_FIRST
Definition graphics_threaded.h:86
@ CMD_CREATE_BUFFER_OBJECT
Definition graphics_threaded.h:104
@ CMD_DELETE_BUFFER_CONTAINER
Definition graphics_threaded.h:111
@ CMD_DELETE_BUFFER_OBJECT
Definition graphics_threaded.h:108
@ CMD_TRY_SWAP_AND_SCREENSHOT
Definition graphics_threaded.h:132
@ CMD_TEXT_TEXTURES_CREATE
Definition graphics_threaded.h:94
@ CMD_CREATE_BUFFER_CONTAINER
Definition graphics_threaded.h:110
@ BLEND_NONE
Definition graphics_threaded.h:164
@ BLEND_ALPHA
Definition graphics_threaded.h:165
@ BLEND_ADDITIVE
Definition graphics_threaded.h:166
@ WRAP_REPEAT
Definition graphics_threaded.h:171
@ WRAP_CLAMP
Definition graphics_threaded.h:172
size_t m_CommandCount
Definition graphics_threaded.h:68
GL_SVertex SVertex
Definition graphics_threaded.h:179
vec2 SPoint
Definition graphics_threaded.h:175
GL_SColorf SColorf
Definition graphics_threaded.h:177
SCommand * m_pCmdBufferTail
Definition graphics_threaded.h:192
GL_SColor SColor
Definition graphics_threaded.h:178
@ TEXFLAG_NOMIPMAPS
Definition graphics_threaded.h:147
@ TEXFLAG_NO_2D_TEXTURE
Definition graphics_threaded.h:150
@ TEXFORMAT_INVALID
Definition graphics_threaded.h:144
@ TEXFLAG_TO_3D_TEXTURE
Definition graphics_threaded.h:148
@ TEXFORMAT_RGBA
Definition graphics_threaded.h:145
@ TEXFLAG_TO_2D_ARRAY_TEXTURE
Definition graphics_threaded.h:149
void Reset()
Definition graphics_threaded.h:632
GL_SVertexTex3DStream SVertexTex3DStream
Definition graphics_threaded.h:181
CCommandBuffer(unsigned CmdBufferSize, unsigned DataBufferSize)
Definition graphics_threaded.h:593
size_t m_RenderCallCount
Definition graphics_threaded.h:69
void AddRenderCalls(size_t RenderCallCountToAdd)
Definition graphics_threaded.h:642
CBuffer m_CmdBuffer
Definition graphics_threaded.h:67
CBuffer m_DataBuffer
Definition graphics_threaded.h:71
@ PRIMTYPE_TRIANGLES
Definition graphics_threaded.h:159
@ PRIMTYPE_QUADS
Definition graphics_threaded.h:158
@ PRIMTYPE_LINES
Definition graphics_threaded.h:157
@ PRIMTYPE_INVALID
Definition graphics_threaded.h:156
Definition graphics_threaded.h:744
void AddVertices(int Count)
Definition graphics_threaded.cpp:88
void Move(int x, int y) override
Definition graphics_threaded.cpp:2596
ivec2 m_ReadPixelPosition
Definition graphics_threaded.h:894
void SelectSprite(const CDataSprite *pSprite, int Flags)
Definition graphics_threaded_sprites.cpp:7
int Init() override
Definition graphics_threaded.cpp:2408
void DrawRectExt(float x, float y, float w, float h, float r, int Corners) override
Definition graphics_threaded.cpp:1051
void AddWarning(const SWarning &Warning)
Definition graphics_threaded.cpp:2880
void WindowCreateNtf(uint32_t WindowId) override
Definition graphics_threaded.cpp:2727
bool IsBackendInitialized() override
Definition graphics_threaded.cpp:2911
std::optional< SWarning > CurrentWarning() override
Definition graphics_threaded.cpp:2886
int m_TextureMemoryUsage
Definition graphics_threaded.h:793
std::vector< WINDOW_PROPS_CHANGED_FUNC > m_vPropChangeListeners
Definition graphics_threaded.h:848
int CreateBufferObject(size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer=false) override
Definition graphics_threaded.cpp:1948
void CopyBufferObjectInternal(int WriteBufferIndex, int ReadBufferIndex, size_t WriteOffset, size_t ReadOffset, size_t CopyDataSize)
Definition graphics_threaded.cpp:2086
int WindowOpen() override
Definition graphics_threaded.cpp:2745
void DeleteQuadContainer(int &ContainerIndex) override
Definition graphics_threaded.cpp:1667
void RenderQuadContainerAsSprite(int ContainerIndex, int QuadOffset, float X, float Y, float ScaleX=1.f, float ScaleY=1.f) override
Definition graphics_threaded.cpp:1862
bool m_GLHasTextureArraysSupport
Definition graphics_threaded.h:761
void DrawRect(float x, float y, float w, float h, ColorRGBA Color, int Corners, float Rounding) override
Definition graphics_threaded.cpp:1326
bool GetDriverVersion(EGraphicsDriverAgeType DriverAgeType, int &Major, int &Minor, int &Patch, const char *&pName, EBackendType BackendType) override
Definition graphics_threaded.h:1265
std::mutex m_WarningsMutex
Definition graphics_threaded.h:797
void QuadsTex3DEnd() override
Definition graphics_threaded.cpp:778
int CreateQuadContainer(bool AutomaticUpload=true) override
Definition graphics_threaded.cpp:1488
void LoadTextureAddWarning(size_t Width, size_t Height, int Flags, const char *pTexName)
Definition graphics_threaded.cpp:388
int WindowActive() override
Definition graphics_threaded.cpp:2740
void MapScreen(float TopLeftX, float TopLeftY, float BottomRightX, float BottomRightY) override
Definition graphics_threaded.cpp:216
std::atomic< bool > m_WarnPngliteIncompatibleImages
Definition graphics_threaded.h:795
CCommandBuffer::SVertexTex3DStream m_aVerticesTex3D[CCommandBuffer::MAX_VERTICES]
Definition graphics_threaded.h:776
void TakeScreenshot(const char *pFilename) override
Definition graphics_threaded.cpp:2786
void QuadsBegin() override
Definition graphics_threaded.cpp:756
CCommandBuffer::SState m_State
Definition graphics_threaded.h:754
const char * GetVersionString() override
Definition graphics_threaded.cpp:2921
void ReadPixelDirect(bool *pSwapped)
Definition graphics_threaded.cpp:2769
const TTwGraphicsGpuList & GetGpus() const override
Definition graphics_threaded.cpp:211
int InitWindow()
Definition graphics_threaded.cpp:2281
void LinesBegin() override
Definition graphics_threaded.cpp:232
IGraphics::CTextureHandle LoadTextureRawMove(CImageInfo &Image, int Flags, const char *pTexName=nullptr) override
Definition graphics_threaded.cpp:444
const char * GetRendererString() override
Definition graphics_threaded.cpp:2926
bool CheckImageDivisibility(const char *pContextName, CImageInfo &Image, int DivX, int DivY, bool AllowResize) override
Definition graphics_threaded.cpp:603
int QuadContainerAddSprite(int QuadContainerIndex, float x, float y, float Size) override
Definition graphics_threaded_sprites.cpp:75
int m_CurIndex
Definition graphics_threaded.h:773
void QuadsEnd() override
Definition graphics_threaded.cpp:766
IGraphicsBackend * m_pBackend
Definition graphics_threaded.h:755
void SetColor4(ColorRGBA TopLeft, ColorRGBA TopRight, ColorRGBA BottomLeft, ColorRGBA BottomRight) override
Definition graphics_threaded.cpp:859
void RenderBorderTiles(int BufferContainerIndex, const ColorRGBA &Color, char *pIndexBufferOffset, const vec2 &Offset, const vec2 &Scale, uint32_t DrawNum) override
Definition graphics_threaded.cpp:1412
void GetSpriteScale(const CDataSprite *pSprite, float &ScaleX, float &ScaleY) const override
Definition graphics_threaded_sprites.cpp:44
std::vector< SWarning > m_vWarnings
Definition graphics_threaded.h:798
void WindowDestroyNtf(uint32_t WindowId) override
Definition graphics_threaded.cpp:2714
void LinesBatchEnd(CLineItemBatch *pBatch) override
Definition graphics_threaded.cpp:275
void AddBackEndWarningIfExists()
Definition graphics_threaded.cpp:2270
void FlushVerticesTex3D() override
Definition graphics_threaded.cpp:75
void LinesEnd() override
Definition graphics_threaded.cpp:239
void UnloadTexture(IGraphics::CTextureHandle *pIndex) override
Definition graphics_threaded.cpp:326
void TrianglesBegin() override
Definition graphics_threaded.cpp:785
void BlendNormal() override
Definition graphics_threaded.cpp:171
char m_aScreenshotName[IO_MAX_PATH_LENGTH]
Definition graphics_threaded.h:787
void DrawSprite(float x, float y, float Size) override
Definition graphics_threaded_sprites.cpp:63
void TrianglesEnd() override
Definition graphics_threaded.cpp:795
void QuadsDrawFreeform(const CFreeformItem *pArray, int Num) override
Definition graphics_threaded.cpp:952
CCommandBuffer::STexCoord m_aTexture[4]
Definition graphics_threaded.h:780
void DeleteBufferContainer(int &ContainerIndex, bool DestroyAllBO=true) override
Definition graphics_threaded.cpp:2145
bool SetMultiSampling(uint32_t ReqMultiSamplingCount, uint32_t &MultiSamplingCountBackend) override
Definition graphics_threaded.cpp:2843
void QuadsSetSubsetFree(float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, int Index=-1) override
Definition graphics_threaded.cpp:905
bool Uses2DTextureArrays() override
Definition graphics_threaded.h:1271
int m_FirstFreeVertexArrayInfo
Definition graphics_threaded.h:814
void TextureSet(CTextureHandle TextureId) override
Definition graphics_threaded.cpp:738
void QuadsDrawTL(const CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:931
void QuadContainerUpload(int ContainerIndex) override
Definition graphics_threaded.cpp:1512
bool SetVSync(bool State) override
Definition graphics_threaded.cpp:2821
bool IsScreenKeyboardShown() override
Definition graphics_threaded.cpp:2694
bool Resize(int w, int h, int RefreshRate) override
Definition graphics_threaded.cpp:2614
void ResizeToScreen() override
Definition graphics_threaded.cpp:2635
std::vector< WINDOW_RESIZE_FUNC > m_vResizeListeners
Definition graphics_threaded.h:847
void WaitForIdle() override
Definition graphics_threaded.cpp:2875
IGraphics::CTextureHandle LoadTexture(const char *pFilename, int StorageType, int Flags=0) override
Definition graphics_threaded.cpp:469
class IStorage * m_pStorage
Definition graphics_threaded.h:769
void LinesBatchDraw(CLineItemBatch *pBatch, const CLineItem *pArray, size_t Num) override
Definition graphics_threaded.cpp:285
void Swap() override
Definition graphics_threaded.cpp:2801
CTextureHandle m_NullTexture
Definition graphics_threaded.h:789
bool SwitchWindowScreen(int Index) override
Definition graphics_threaded.cpp:2568
void Shutdown() override
Definition graphics_threaded.cpp:2494
std::optional< int > ShowMessageBox(const CMessageBox &MessageBox) override
Definition graphics_threaded.cpp:2901
size_t m_FirstFreeTexture
Definition graphics_threaded.h:792
void QuadsEndKeepVertices() override
Definition graphics_threaded.cpp:802
void ClipEnable(int x, int y, int w, int h) override
Definition graphics_threaded.cpp:142
void BlendNone() override
Definition graphics_threaded.cpp:166
TGLBackendReadPresentedImageData & GetReadPresentedImageDataFuncUnsafe() override
Definition graphics_threaded.cpp:2931
bool IsConfigModernAPI() override
Definition graphics_threaded.h:1266
void Maximize() override
Definition graphics_threaded.cpp:2524
void RenderQuadContainer(int ContainerIndex, int QuadDrawNum) override
Definition graphics_threaded.cpp:1680
void RenderText(int BufferContainerIndex, int TextQuadNum, int TextureSize, int TextureTextIndex, int TextureTextOutlineIndex, const ColorRGBA &TextColor, const ColorRGBA &TextOutlineColor) override
Definition graphics_threaded.cpp:1468
ColorRGBA * m_pReadPixelColor
Definition graphics_threaded.h:895
int m_Drawing
Definition graphics_threaded.h:785
CGraphics_Threaded()
Definition graphics_threaded.cpp:107
void AddWindowResizeListener(WINDOW_RESIZE_FUNC pFunc) override
Definition graphics_threaded.cpp:2699
void KickCommandBuffer()
Definition graphics_threaded.cpp:656
bool IsTextBufferingEnabled() override
Definition graphics_threaded.h:1269
void RenderQuadContainerEx(int ContainerIndex, int QuadOffset, int QuadDrawNum, float X, float Y, float ScaleX=1.f, float ScaleY=1.f) override
Definition graphics_threaded.cpp:1742
CCommandBuffer::SColor m_aColor[4]
Definition graphics_threaded.h:779
class IConsole * m_pConsole
Definition graphics_threaded.h:770
void FlushVertices(bool KeepVertices=false) override
Definition graphics_threaded.cpp:62
float m_Rotation
Definition graphics_threaded.h:784
void BlendAdditive() override
Definition graphics_threaded.cpp:176
void Clear(float r, float g, float b, bool ForceClearNow=false) override
Definition graphics_threaded.cpp:745
bool m_GLUses2DTextureArrays
Definition graphics_threaded.h:760
void DrawRectExt4(float x, float y, float w, float h, ColorRGBA ColorTopLeft, ColorRGBA ColorTopRight, ColorRGBA ColorBottomLeft, ColorRGBA ColorBottomRight, float r, int Corners) override
Definition graphics_threaded.cpp:1120
int m_FirstFreeBufferObjectIndex
Definition graphics_threaded.h:817
void RenderQuadContainerAsSpriteMultiple(int ContainerIndex, int QuadOffset, int DrawCount, SRenderSpriteInfo *pRenderInfo) override
Definition graphics_threaded.cpp:1867
void DeleteBufferObject(int BufferIndex) override
Definition graphics_threaded.cpp:2097
void QuadsSetRotation(float Angle) override
Definition graphics_threaded.cpp:816
int m_NumVertices
Definition graphics_threaded.h:777
vec2 m_SpriteScale
Definition graphics_threaded.h:1114
bool m_RenderEnable
Definition graphics_threaded.h:782
bool IsQuadBufferingEnabled() override
Definition graphics_threaded.h:1268
void WrapClamp() override
Definition graphics_threaded.cpp:186
CCommandBuffer * m_pCommandBuffer
Definition graphics_threaded.h:765
void ReadPixel(ivec2 Position, ColorRGBA *pColor) override
Definition graphics_threaded.cpp:2760
int GetNumScreens() const override
Definition graphics_threaded.cpp:2506
int GetVideoModes(CVideoMode *pModes, int MaxModes, int Screen) override
Definition graphics_threaded.cpp:2936
std::vector< int > m_vTextureIndices
Definition graphics_threaded.h:791
void QuadsDrawCurrentVertices(bool KeepVertices=true) override
Definition graphics_threaded.cpp:809
void QuadContainerChangeAutomaticUpload(int ContainerIndex, bool AutomaticUpload) override
Definition graphics_threaded.cpp:1506
void RenderTileLayer(int BufferContainerIndex, const ColorRGBA &Color, char **pOffsets, unsigned int *pIndicedVertexDrawNum, size_t NumIndicesOffset) override
Definition graphics_threaded.cpp:1368
void WrapNormal() override
Definition graphics_threaded.cpp:181
const char * GetScreenName(int Screen) const override
Definition graphics_threaded.cpp:2511
bool m_GLQuadBufferingEnabled
Definition graphics_threaded.h:757
bool UpdateTextTexture(CTextureHandle TextureId, int x, int y, size_t Width, size_t Height, uint8_t *pData, bool IsMovedPointer) override
Definition graphics_threaded.cpp:522
bool m_GLTileBufferingEnabled
Definition graphics_threaded.h:756
bool m_DoScreenshot
Definition graphics_threaded.h:786
bool SetWindowScreen(int Index) override
Definition graphics_threaded.cpp:2552
void ScreenshotDirect(bool *pSwapped)
Definition graphics_threaded.cpp:714
void RecreateBufferObject(int BufferIndex, size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer=false) override
Definition graphics_threaded.cpp:2011
void QuadsSetSubset(float TlU, float TlV, float BrU, float BrV) override
Definition graphics_threaded.cpp:892
void UpdateBufferContainerInternal(int ContainerIndex, SBufferContainerInfo *pContainerInfo)
Definition graphics_threaded.cpp:2174
void WarnPngliteIncompatibleImages(bool Warn) override
Definition graphics_threaded.cpp:2533
uint64_t TextureMemoryUsage() const override
Definition graphics_threaded.cpp:191
unsigned m_CurrentCommandBuffer
Definition graphics_threaded.h:766
void * AllocCommandBufferData(size_t AllocSize)
Definition graphics_threaded.cpp:1934
CCommandBuffer * m_apCommandBuffers[NUM_CMDBUFFERS]
Definition graphics_threaded.h:764
const char * GetVendorString() override
Definition graphics_threaded.cpp:2916
int GetWindowScreen() override
Definition graphics_threaded.cpp:2709
void LinesBatchBegin(CLineItemBatch *pBatch) override
Definition graphics_threaded.cpp:269
void DrawRect4(float x, float y, float w, float h, ColorRGBA ColorTopLeft, ColorRGBA ColorTopRight, ColorRGBA ColorBottomLeft, ColorRGBA ColorBottomRight, int Corners, float Rounding) override
Definition graphics_threaded.cpp:1335
std::vector< int > m_vBufferObjectIndices
Definition graphics_threaded.h:816
bool m_GLQuadContainerBufferingEnabled
Definition graphics_threaded.h:759
void UpdateBufferObjectInternal(int BufferIndex, size_t UploadDataSize, void *pUploadData, void *pOffset, bool IsMovedPointer=false)
Definition graphics_threaded.cpp:2060
bool HasTextureArraysSupport() override
Definition graphics_threaded.h:1272
bool IsIdle() const override
Definition graphics_threaded.cpp:2870
bool IsTileBufferingEnabled() override
Definition graphics_threaded.h:1267
void GetCurrentVideoMode(CVideoMode &CurMode, int Screen) override
Definition graphics_threaded.cpp:2950
uint64_t StreamedMemoryUsage() const override
Definition graphics_threaded.cpp:201
uint64_t StagingMemoryUsage() const override
Definition graphics_threaded.cpp:206
bool LoadTextTextures(size_t Width, size_t Height, CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture, uint8_t *pTextData, uint8_t *pTextOutlineData) override
Definition graphics_threaded.cpp:488
void UpdateViewport(int X, int Y, int W, int H, bool ByResize) override
Definition graphics_threaded.cpp:2259
bool IsSpriteTextureFullyTransparent(const CImageInfo &FromImageInfo, const struct CDataSprite *pSprite) override
Definition graphics_threaded.cpp:377
void ClipDisable() override
Definition graphics_threaded.cpp:161
void QuadsDraw(CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:920
bool m_GLTextBufferingEnabled
Definition graphics_threaded.h:758
bool IsImageFormatRgba(const char *pContextName, const CImageInfo &Image) override
Definition graphics_threaded.cpp:641
int CreateBufferContainer(SBufferContainerInfo *pContainerInfo) override
Definition graphics_threaded.cpp:2111
int CreateRectQuadContainer(float x, float y, float w, float h, float r, int Corners) override
Definition graphics_threaded.cpp:1238
void RenderQuadLayer(int BufferContainerIndex, SQuadRenderInfo *pQuadInfo, size_t QuadNum, int QuadOffset, bool Grouped=false) override
Definition graphics_threaded.cpp:1433
void FlushVerticesImpl(bool KeepVertices, int &PrimType, size_t &PrimCount, size_t &NumVerts, TName &Command, size_t VertSize)
Definition graphics_threaded.h:1136
void IndicesNumRequiredNotify(unsigned int RequiredIndicesCount) override
Definition graphics_threaded.cpp:2193
void AddCmd(TName &Cmd, std::function< bool()> FailFunc=[] { return true;})
Definition graphics_threaded.h:875
void SetWindowGrab(bool Grab) override
Definition graphics_threaded.cpp:2750
bool LoadPng(CImageInfo &Image, const char *pFilename, int StorageType) override
Definition graphics_threaded.cpp:572
void AdjustViewport(bool SendViewportChangeToBackend)
Definition graphics_threaded.cpp:2239
CCommandBuffer::SVertex m_aVertices[CCommandBuffer::MAX_VERTICES]
Definition graphics_threaded.h:775
int m_FirstFreeQuadContainer
Definition graphics_threaded.h:845
int QuadContainerAddQuads(int ContainerIndex, CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:1564
std::vector< SQuadContainer > m_vQuadContainers
Definition graphics_threaded.h:844
void QuadsDrawTLImpl(TName *pVertices, const CQuadItem *pArray, int Num)
Definition graphics_threaded.h:995
void AddWindowPropChangeListener(WINDOW_PROPS_CHANGED_FUNC pFunc) override
Definition graphics_threaded.cpp:2704
bool m_GLUseTrianglesAsQuad
Definition graphics_threaded.h:762
class IEngine * m_pEngine
Definition graphics_threaded.h:771
void FreeTextureIndex(CTextureHandle *pIndex)
Definition graphics_threaded.cpp:316
@ DRAWING_LINES
Definition graphics_threaded.h:750
@ NUM_CMDBUFFERS
Definition graphics_threaded.h:747
@ DRAWING_TRIANGLES
Definition graphics_threaded.h:751
@ DRAWING_QUADS
Definition graphics_threaded.h:749
void GetSpriteScaleImpl(int Width, int Height, float &ScaleX, float &ScaleY) const override
Definition graphics_threaded_sprites.cpp:56
void QuadsText(float x, float y, float Size, const char *pText) override
Definition graphics_threaded.cpp:1022
virtual int GetDesktopScreenHeight() const
Definition graphics_threaded.h:1251
void ChangeColorOfCurrentQuadVertices(float r, float g, float b, float a) override
Definition graphics_threaded.cpp:869
void SelectSprite7(int Id, int Flags=0) override
Definition graphics_threaded_sprites.cpp:38
void SetColor(TName *pVertex, int ColorIndex)
Definition graphics_threaded.h:972
void TakeCustomScreenshot(const char *pFilename) override
Definition graphics_threaded.cpp:2795
bool UnloadTextTextures(CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture) override
Definition graphics_threaded.cpp:508
bool m_IsForcedViewport
Definition graphics_threaded.h:802
void SetColorVertex(const CColorVertex *pArray, size_t Num) override
Definition graphics_threaded.cpp:826
void LinesDraw(const CLineItem *pArray, size_t Num) override
Definition graphics_threaded.cpp:246
IGraphics::CTextureHandle LoadTextureRaw(const CImageInfo &Image, int Flags, const char *pTexName=nullptr) override
Definition graphics_threaded.cpp:421
void SetWindowParams(int FullscreenMode, bool IsBorderless) override
Definition graphics_threaded.cpp:2538
IGraphics::CTextureHandle FindFreeTextureIndex()
Definition graphics_threaded.cpp:301
void GotResized(int w, int h, int RefreshRate) override
Definition graphics_threaded.cpp:2646
std::vector< SVertexArrayInfo > m_vVertexArrayInfo
Definition graphics_threaded.h:813
bool IsImageSubFullyTransparent(const CImageInfo &FromImageInfo, int x, int y, int w, int h) override
Definition graphics_threaded.cpp:356
void NotifyWindow() override
Definition graphics_threaded.cpp:2755
CTextureHandle LoadSpriteTexture(const CImageInfo &FromImageInfo, const struct CDataSprite *pSprite) override
Definition graphics_threaded.cpp:338
int IssueInit()
Definition graphics_threaded.cpp:2200
void QuadContainerReset(int ContainerIndex) override
Definition graphics_threaded.cpp:1655
uint64_t BufferMemoryUsage() const override
Definition graphics_threaded.cpp:196
void Rotate(const CCommandBuffer::SPoint &rCenter, TName *pPoints, int NumPoints)
Definition graphics_threaded.h:857
void ChangeColorOfQuadVertices(size_t QuadOffset, unsigned char r, unsigned char g, unsigned char b, unsigned char a) override
Definition graphics_threaded.cpp:882
void GetScreen(float *pTopLeftX, float *pTopLeftY, float *pBottomRightX, float *pBottomRightY) override
Definition graphics_threaded.cpp:224
void QuadsTex3DBegin() override
Definition graphics_threaded.cpp:773
void QuadsTex3DDrawTL(const CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:936
bool IsQuadContainerBufferingEnabled() override
Definition graphics_threaded.h:1270
virtual int GetDesktopScreenWidth() const
Definition graphics_threaded.h:1250
void DrawCircle(float CenterX, float CenterY, float Radius, int Segments) override
Definition graphics_threaded.cpp:1343
void Minimize() override
Definition graphics_threaded.cpp:2516
void InsertSignal(CSemaphore *pSemaphore) override
Definition graphics_threaded.cpp:2863
Definition image.h:12
Definition threading.h:8
Definition graphics.h:75
Definition color.h:198
Definition console.h:18
Definition graphics.h:605
Definition engine.h:15
Definition graphics_threaded.h:664
virtual void GetCurrentVideoMode(CVideoMode &CurMode, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen)=0
virtual int WindowActive()=0
virtual bool HasTextureArraysSupport()
Definition graphics_threaded.h:725
virtual bool HasTileBuffering()
Definition graphics_threaded.h:720
virtual const char * GetErrorString()
Definition graphics_threaded.h:726
virtual bool IsScreenKeyboardShown()=0
virtual bool UpdateDisplayMode(int Index)=0
virtual bool GetWarning(std::vector< std::string > &WarningStrings)=0
@ INITFLAG_BORDERLESS
Definition graphics_threaded.h:671
@ INITFLAG_FULLSCREEN
Definition graphics_threaded.h:668
@ INITFLAG_DESKTOP_FULLSCREEN
Definition graphics_threaded.h:672
@ INITFLAG_VSYNC
Definition graphics_threaded.h:669
@ INITFLAG_RESIZABLE
Definition graphics_threaded.h:670
virtual bool IsConfigModernAPI()
Definition graphics_threaded.h:718
virtual uint64_t StagingMemoryUsage() const =0
virtual void GetViewportSize(int &w, int &h)=0
virtual int GetWindowScreen()=0
virtual const char * GetVendorString()=0
virtual void GetVideoModes(CVideoMode *pModes, int MaxModes, int *pNumModes, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen)=0
virtual const char * GetScreenName(int Screen) const =0
virtual void WindowCreateNtf(uint32_t WindowId)=0
virtual int Shutdown()=0
virtual std::optional< int > ShowMessageBox(const IGraphics::CMessageBox &MessageBox)=0
virtual void RunBuffer(CCommandBuffer *pBuffer)=0
virtual bool ResizeWindow(int w, int h, int RefreshRate)=0
virtual void NotifyWindow()=0
virtual bool UseTrianglesAsQuad()
Definition graphics_threaded.h:719
virtual bool HasQuadContainerBuffering()
Definition graphics_threaded.h:723
virtual void Minimize()=0
virtual void SetWindowGrab(bool Grab)=0
virtual uint64_t StreamedMemoryUsage() const =0
virtual const char * GetRendererString()=0
virtual void RunBufferSingleThreadedUnsafe(CCommandBuffer *pBuffer)=0
virtual const char * GetVersionString()=0
virtual int Init(const char *pName, int *pScreen, int *pWidth, int *pHeight, int *pRefreshRate, int *pFsaaSamples, int Flags, int *pDesktopWidth, int *pDesktopHeight, int *pCurrentWidth, int *pCurrentHeight, class IStorage *pStorage)=0
virtual void WindowDestroyNtf(uint32_t WindowId)=0
virtual bool GetDriverVersion(EGraphicsDriverAgeType DriverAgeType, int &Major, int &Minor, int &Patch, const char *&pName, EBackendType BackendType)=0
virtual ~IGraphicsBackend()=default
virtual int WindowOpen()=0
virtual uint64_t TextureMemoryUsage() const =0
virtual void Maximize()=0
virtual void WaitForIdle()=0
virtual bool Uses2DTextureArrays()
Definition graphics_threaded.h:724
virtual bool SetWindowScreen(int Index)=0
virtual void SetWindowParams(int FullscreenMode, bool IsBorderless)=0
virtual uint64_t BufferMemoryUsage() const =0
virtual bool HasTextBuffering()
Definition graphics_threaded.h:722
virtual TGLBackendReadPresentedImageData & GetReadPresentedImageDataFuncUnsafe()=0
virtual int GetNumScreens() const =0
virtual const TTwGraphicsGpuList & GetGpus() const =0
virtual bool IsIdle() const =0
virtual bool HasQuadBuffering()
Definition graphics_threaded.h:721
Definition graphics.h:362
Definition graphics.h:350
Definition graphics.h:560
Definition graphics.h:205
Definition storage.h:21
Definition vmath.h:15
T x
Definition vmath.h:19
T y
Definition vmath.h:23
CConfig g_Config
Definition config.cpp:13
static SHA256_DIGEST s(const char *pSha256)
Definition mapbugs.cpp:37
EBackendType
Definition graphics.h:145
EGraphicsDriverAgeType
Definition graphics.h:136
std::function< bool(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector< uint8_t > &vDstData)> TGLBackendReadPresentedImageData
Definition graphics.h:183
std::function< void()> WINDOW_RESIZE_FUNC
Definition graphics.h:180
std::function< void()> WINDOW_PROPS_CHANGED_FUNC
Definition graphics.h:181
std::function< const char *(const char *, const char *)> TTranslateFunc
Definition graphics_threaded.h:1281
constexpr int CMD_BUFFER_DATA_BUFFER_SIZE
Definition graphics_threaded.h:15
IGraphicsBackend * CreateGraphicsBackend(TTranslateFunc &&TranslateFunc)
Definition backend_sdl.cpp:1789
constexpr int CMD_BUFFER_CMD_BUFFER_SIZE
Definition graphics_threaded.h:16
EGraphicsBackendErrorCodes
Definition graphics_threaded.h:649
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_SCREEN_INFO_REQUEST_FAILED
Definition graphics_threaded.h:656
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_INIT_FAILED
Definition graphics_threaded.h:654
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_SCREEN_RESOLUTION_REQUEST_FAILED
Definition graphics_threaded.h:657
@ GRAPHICS_BACKEND_ERROR_CODE_NONE
Definition graphics_threaded.h:650
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_WINDOW_CREATE_FAILED
Definition graphics_threaded.h:658
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_SCREEN_REQUEST_FAILED
Definition graphics_threaded.h:655
@ GRAPHICS_BACKEND_ERROR_CODE_GL_VERSION_FAILED
Definition graphics_threaded.h:652
@ GRAPHICS_BACKEND_ERROR_CODE_GL_CONTEXT_FAILED
Definition graphics_threaded.h:651
@ GRAPHICS_BACKEND_ERROR_CODE_GLEW_INIT_FAILED
Definition graphics_threaded.h:653
#define dbg_assert(test, fmt,...)
Definition system.h:64
Definition graphics_threaded.h:211
SColorf m_Color
Definition graphics_threaded.h:214
SCommand_Clear()
Definition graphics_threaded.h:212
bool m_ForceClear
Definition graphics_threaded.h:215
Definition graphics_threaded.h:287
SCommand_CopyBufferObject()
Definition graphics_threaded.h:288
size_t m_WriteOffset
Definition graphics_threaded.h:295
int m_WriteBufferIndex
Definition graphics_threaded.h:291
int m_ReadBufferIndex
Definition graphics_threaded.h:292
size_t m_ReadOffset
Definition graphics_threaded.h:294
size_t m_CopySize
Definition graphics_threaded.h:296
Definition graphics_threaded.h:308
SCommand_CreateBufferContainer()
Definition graphics_threaded.h:309
int m_Stride
Definition graphics_threaded.h:314
int m_VertBufferBindingIndex
Definition graphics_threaded.h:315
int m_BufferContainerIndex
Definition graphics_threaded.h:312
size_t m_AttrCount
Definition graphics_threaded.h:317
SBufferContainerInfo::SAttribute * m_pAttributes
Definition graphics_threaded.h:318
Definition graphics_threaded.h:246
size_t m_DataSize
Definition graphics_threaded.h:254
void * m_pUploadData
Definition graphics_threaded.h:253
int m_BufferIndex
Definition graphics_threaded.h:250
bool m_DeletePointer
Definition graphics_threaded.h:252
SCommand_CreateBufferObject()
Definition graphics_threaded.h:247
int m_Flags
Definition graphics_threaded.h:256
Definition graphics_threaded.h:336
int m_BufferContainerIndex
Definition graphics_threaded.h:340
bool m_DestroyAllBO
Definition graphics_threaded.h:341
SCommand_DeleteBufferContainer()
Definition graphics_threaded.h:337
Definition graphics_threaded.h:300
SCommand_DeleteBufferObject()
Definition graphics_threaded.h:301
int m_BufferIndex
Definition graphics_threaded.h:304
Definition graphics_threaded.h:345
SCommand_IndicesRequiredNumNotify()
Definition graphics_threaded.h:346
unsigned int m_RequiredIndicesNum
Definition graphics_threaded.h:349
Definition graphics_threaded.h:490
SCommand_MultiSampling()
Definition graphics_threaded.h:491
bool * m_pRetOk
Definition graphics_threaded.h:496
uint32_t * m_pRetMultiSamplingCount
Definition graphics_threaded.h:495
uint32_t m_RequestedMultiSamplingCount
Definition graphics_threaded.h:494
Definition graphics_threaded.h:260
void * m_pUploadData
Definition graphics_threaded.h:267
int m_BufferIndex
Definition graphics_threaded.h:264
int m_Flags
Definition graphics_threaded.h:270
size_t m_DataSize
Definition graphics_threaded.h:268
bool m_DeletePointer
Definition graphics_threaded.h:266
SCommand_RecreateBufferObject()
Definition graphics_threaded.h:261
Definition graphics_threaded.h:368
SState m_State
Definition graphics_threaded.h:371
uint32_t m_DrawNum
Definition graphics_threaded.h:374
char * m_pIndicesOffset
Definition graphics_threaded.h:373
vec2 m_Offset
Definition graphics_threaded.h:377
SColorf m_Color
Definition graphics_threaded.h:372
SCommand_RenderBorderTile()
Definition graphics_threaded.h:369
int m_BufferContainerIndex
Definition graphics_threaded.h:375
vec2 m_Scale
Definition graphics_threaded.h:378
SCommand_RenderQuadContainerAsSpriteMultiple()
Definition graphics_threaded.h:441
SPoint m_Center
Definition graphics_threaded.h:449
int m_BufferContainerIndex
Definition graphics_threaded.h:445
unsigned int m_DrawNum
Definition graphics_threaded.h:452
unsigned int m_DrawCount
Definition graphics_threaded.h:453
SState m_State
Definition graphics_threaded.h:443
void * m_pOffset
Definition graphics_threaded.h:454
IGraphics::SRenderSpriteInfo * m_pRenderInfo
Definition graphics_threaded.h:447
SColorf m_VertexColor
Definition graphics_threaded.h:450
Definition graphics_threaded.h:423
int m_BufferContainerIndex
Definition graphics_threaded.h:428
void * m_pOffset
Definition graphics_threaded.h:436
SPoint m_Center
Definition graphics_threaded.h:431
SState m_State
Definition graphics_threaded.h:426
float m_Rotation
Definition graphics_threaded.h:430
SCommand_RenderQuadContainerEx()
Definition graphics_threaded.h:424
unsigned int m_DrawNum
Definition graphics_threaded.h:435
SColorf m_VertexColor
Definition graphics_threaded.h:433
Definition graphics_threaded.h:411
unsigned int m_DrawNum
Definition graphics_threaded.h:418
SCommand_RenderQuadContainer()
Definition graphics_threaded.h:412
void * m_pOffset
Definition graphics_threaded.h:419
int m_BufferContainerIndex
Definition graphics_threaded.h:416
SState m_State
Definition graphics_threaded.h:414
Definition graphics_threaded.h:382
int m_QuadOffset
Definition graphics_threaded.h:390
SCommand_RenderQuadLayer(bool Grouped)
Definition graphics_threaded.h:383
SState m_State
Definition graphics_threaded.h:385
int m_BufferContainerIndex
Definition graphics_threaded.h:387
SQuadRenderInfo * m_pQuadInfo
Definition graphics_threaded.h:388
size_t m_QuadNum
Definition graphics_threaded.h:389
Definition graphics_threaded.h:236
unsigned m_PrimCount
Definition graphics_threaded.h:241
SVertexTex3DStream * m_pVertices
Definition graphics_threaded.h:242
SCommand_RenderTex3D()
Definition graphics_threaded.h:237
unsigned m_PrimType
Definition graphics_threaded.h:240
SState m_State
Definition graphics_threaded.h:239
Definition graphics_threaded.h:394
ColorRGBA m_TextOutlineColor
Definition graphics_threaded.h:407
ColorRGBA m_TextColor
Definition graphics_threaded.h:406
SCommand_RenderText()
Definition graphics_threaded.h:395
int m_TextureSize
Definition graphics_threaded.h:400
int m_DrawNum
Definition graphics_threaded.h:405
int m_TextOutlineTextureIndex
Definition graphics_threaded.h:403
int m_TextTextureIndex
Definition graphics_threaded.h:402
SState m_State
Definition graphics_threaded.h:397
int m_BufferContainerIndex
Definition graphics_threaded.h:399
Definition graphics_threaded.h:353
int m_BufferContainerIndex
Definition graphics_threaded.h:364
SColorf m_Color
Definition graphics_threaded.h:357
char ** m_pIndicesOffsets
Definition graphics_threaded.h:360
int m_IndicesDrawNum
Definition graphics_threaded.h:363
SState m_State
Definition graphics_threaded.h:356
SCommand_RenderTileLayer()
Definition graphics_threaded.h:354
unsigned int * m_pDrawCount
Definition graphics_threaded.h:361
Definition graphics_threaded.h:226
SVertex * m_pVertices
Definition graphics_threaded.h:232
SState m_State
Definition graphics_threaded.h:229
unsigned m_PrimCount
Definition graphics_threaded.h:231
SCommand_Render()
Definition graphics_threaded.h:227
unsigned m_PrimType
Definition graphics_threaded.h:230
Definition graphics_threaded.h:219
SCommand_Signal()
Definition graphics_threaded.h:220
CSemaphore * m_pSemaphore
Definition graphics_threaded.h:222
Definition graphics_threaded.h:475
SCommand_Swap()
Definition graphics_threaded.h:476
Definition graphics_threaded.h:562
uint8_t * m_pData
Definition graphics_threaded.h:573
SCommand_TextTexture_Update()
Definition graphics_threaded.h:563
size_t m_Width
Definition graphics_threaded.h:571
int m_Slot
Definition graphics_threaded.h:567
int m_X
Definition graphics_threaded.h:569
int m_Y
Definition graphics_threaded.h:570
size_t m_Height
Definition graphics_threaded.h:572
Definition graphics_threaded.h:536
SCommand_TextTextures_Create()
Definition graphics_threaded.h:537
int m_SlotOutline
Definition graphics_threaded.h:542
size_t m_Width
Definition graphics_threaded.h:544
uint8_t * m_pTextData
Definition graphics_threaded.h:547
uint8_t * m_pTextOutlineData
Definition graphics_threaded.h:548
size_t m_Height
Definition graphics_threaded.h:545
int m_Slot
Definition graphics_threaded.h:541
Definition graphics_threaded.h:552
int m_Slot
Definition graphics_threaded.h:557
int m_SlotOutline
Definition graphics_threaded.h:558
SCommand_TextTextures_Destroy()
Definition graphics_threaded.h:553
Definition graphics_threaded.h:512
SCommand_Texture_Create()
Definition graphics_threaded.h:513
size_t m_Height
Definition graphics_threaded.h:520
uint8_t * m_pData
Definition graphics_threaded.h:523
size_t m_Width
Definition graphics_threaded.h:519
int m_Flags
Definition graphics_threaded.h:521
int m_Slot
Definition graphics_threaded.h:517
Definition graphics_threaded.h:527
SCommand_Texture_Destroy()
Definition graphics_threaded.h:528
int m_Slot
Definition graphics_threaded.h:532
Definition graphics_threaded.h:458
ivec2 m_Position
Definition graphics_threaded.h:461
bool * m_pSwapped
Definition graphics_threaded.h:463
SColorf * m_pColor
Definition graphics_threaded.h:462
SCommand_TrySwapAndReadPixel()
Definition graphics_threaded.h:459
Definition graphics_threaded.h:467
CImageInfo * m_pImage
Definition graphics_threaded.h:470
SCommand_TrySwapAndScreenshot()
Definition graphics_threaded.h:468
bool * m_pSwapped
Definition graphics_threaded.h:471
Definition graphics_threaded.h:322
SBufferContainerInfo::SAttribute * m_pAttributes
Definition graphics_threaded.h:332
int m_VertBufferBindingIndex
Definition graphics_threaded.h:329
int m_BufferContainerIndex
Definition graphics_threaded.h:326
SCommand_UpdateBufferContainer()
Definition graphics_threaded.h:323
int m_Stride
Definition graphics_threaded.h:328
size_t m_AttrCount
Definition graphics_threaded.h:331
Definition graphics_threaded.h:274
SCommand_UpdateBufferObject()
Definition graphics_threaded.h:275
size_t m_DataSize
Definition graphics_threaded.h:283
void * m_pUploadData
Definition graphics_threaded.h:282
int m_BufferIndex
Definition graphics_threaded.h:278
bool m_DeletePointer
Definition graphics_threaded.h:280
void * m_pOffset
Definition graphics_threaded.h:281
Definition graphics_threaded.h:500
SCommand_Update_Viewport()
Definition graphics_threaded.h:501
int m_Height
Definition graphics_threaded.h:507
int m_X
Definition graphics_threaded.h:504
bool m_ByResize
Definition graphics_threaded.h:508
int m_Width
Definition graphics_threaded.h:506
int m_Y
Definition graphics_threaded.h:505
Definition graphics_threaded.h:481
int m_VSync
Definition graphics_threaded.h:485
SCommand_VSync()
Definition graphics_threaded.h:482
bool * m_pRetOk
Definition graphics_threaded.h:486
Definition graphics_threaded.h:577
uint32_t m_WindowId
Definition graphics_threaded.h:581
SCommand_WindowCreateNtf()
Definition graphics_threaded.h:578
Definition graphics_threaded.h:585
SCommand_WindowDestroyNtf()
Definition graphics_threaded.h:586
uint32_t m_WindowId
Definition graphics_threaded.h:589
Definition graphics_threaded.h:184
SCommand(unsigned Cmd)
Definition graphics_threaded.h:186
SCommand * m_pNext
Definition graphics_threaded.h:189
unsigned m_Cmd
Definition graphics_threaded.h:188
Definition graphics_threaded.h:195
bool m_ClipEnable
Definition graphics_threaded.h:203
int m_Texture
Definition graphics_threaded.h:198
int m_WrapMode
Definition graphics_threaded.h:197
int m_ClipW
Definition graphics_threaded.h:206
SPoint m_ScreenTL
Definition graphics_threaded.h:199
int m_BlendMode
Definition graphics_threaded.h:196
SPoint m_ScreenBR
Definition graphics_threaded.h:200
int m_ClipY
Definition graphics_threaded.h:205
int m_ClipH
Definition graphics_threaded.h:207
int m_ClipX
Definition graphics_threaded.h:204
Definition data_types.h:30
Definition graphics_threaded.h:831
CCommandBuffer::SVertex m_aVertices[4]
Definition graphics_threaded.h:832
Definition graphics_threaded.h:820
int m_FreeIndex
Definition graphics_threaded.h:840
int m_QuadBufferObjectIndex
Definition graphics_threaded.h:837
std::vector< SQuad > m_vQuads
Definition graphics_threaded.h:835
int m_QuadBufferContainerIndex
Definition graphics_threaded.h:838
bool m_AutomaticUpload
Definition graphics_threaded.h:842
SQuadContainer(bool AutomaticUpload=true)
Definition graphics_threaded.h:821
Definition graphics_threaded.h:805
SVertexArrayInfo()
Definition graphics_threaded.h:806
int m_AssociatedBufferObjectIndex
Definition graphics_threaded.h:809
int m_FreeIndex
Definition graphics_threaded.h:811
Definition graphics.h:126
Definition graphics.h:119
Definition graphics.h:112
Definition graphics.h:392
Definition graphics.h:416
Definition graphics.h:32
Definition graphics.h:26
Definition graphics.h:45
Definition graphics.h:157
Definition warning.h:5
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:49
vector2_base< int > ivec2
Definition vmath.h:163
vector2_base< float > vec2
Definition vmath.h:161