DDNet 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/dbg.h>
5#include <base/sphore.h>
6
7#include <engine/graphics.h>
9
10#include <atomic>
11#include <cstddef>
12#include <mutex>
13#include <string>
14#include <vector>
15
16constexpr int CMD_BUFFER_DATA_BUFFER_SIZE = 1024 * 1024 * 2;
17constexpr int CMD_BUFFER_CMD_BUFFER_SIZE = 1024 * 256;
18
19namespace TextureFlag
20{
21 inline constexpr uint32_t NO_MIPMAPS = 1 << 0;
22 inline constexpr uint32_t TO_3D_TEXTURE = 1 << 1;
23 inline constexpr uint32_t TO_2D_ARRAY_TEXTURE = 1 << 2;
24 inline constexpr uint32_t NO_2D_TEXTURE = 1 << 3;
25};
26
33
34enum class EBlendMode
35{
36 NONE,
39};
40
41enum class EWrapMode
42{
45};
46
48{
49 class CBuffer
50 {
51 unsigned char *m_pData;
52 unsigned m_Size;
53 unsigned m_Used;
54
55 public:
56 CBuffer(unsigned BufferSize)
57 {
58 m_Size = BufferSize;
59 m_pData = new unsigned char[m_Size];
60 m_Used = 0;
61 }
62
64 {
65 delete[] m_pData;
66 m_pData = nullptr;
67 m_Used = 0;
68 m_Size = 0;
69 }
70
71 void Reset()
72 {
73 m_Used = 0;
74 }
75
76 void *Alloc(unsigned Requested, unsigned Alignment = alignof(std::max_align_t))
77 {
78 size_t Offset = reinterpret_cast<uintptr_t>(m_pData + m_Used) % Alignment;
79 if(Offset)
80 Offset = Alignment - Offset;
81
82 if(Requested + Offset + m_Used > m_Size)
83 return nullptr;
84
85 void *pPtr = &m_pData[m_Used + Offset];
86 m_Used += Requested + Offset;
87 return pPtr;
88 }
89
90 unsigned char *DataPtr() { return m_pData; }
91 unsigned DataSize() const { return m_Size; }
92 unsigned DataUsed() const { return m_Used; }
93 };
94
95public:
97 size_t m_CommandCount = 0;
99
101
102 enum
103 {
104 MAX_TEXTURES = 1024 * 8,
105 MAX_VERTICES = 32 * 1024,
106 };
107
108 enum
109 {
110 // command groups
111 CMDGROUP_CORE = 0, // commands that everyone has to implement
112 CMDGROUP_PLATFORM_GL = 10000, // commands specific to a platform
114
116 };
117
119 {
120 // synchronization
122
123 // texture commands
129
130 // rendering
134
135 // opengl 2.0+ commands (some are just emulated and only exist in opengl 3.3+)
139 CMD_COPY_BUFFER_OBJECT, // copy vbo to another
141
145
146 CMD_INDICES_REQUIRED_NUM_NOTIFY, // create indices that are required
147
148 CMD_RENDER_TILE_LAYER, // render a tilelayer
149 CMD_RENDER_BORDER_TILE, // render one tile multiple times
150 CMD_RENDER_QUAD_LAYER, // render a quad layer
151 CMD_RENDER_QUAD_LAYER_GROUPED, // render a quad layer in groups meaning they all share the same envelope and offset (which can be none)
152 CMD_RENDER_TEXT, // render text
153 CMD_RENDER_QUAD_CONTAINER, // render a quad buffer container
154 CMD_RENDER_QUAD_CONTAINER_EX, // render a quad buffer container with extended parameters
155 CMD_RENDER_QUAD_CONTAINER_SPRITE_MULTIPLE, // render a quad buffer container as sprite multiple times
156
157 // swap
159
160 // misc
166
167 // in Android a window that minimizes gets destroyed
170
172 };
173
174 typedef vec2 SPoint;
181
182 struct SCommand
183 {
184 public:
185 SCommand(unsigned Cmd) :
186 m_Cmd(Cmd), m_pNext(nullptr) {}
187 unsigned m_Cmd;
189 };
190
206
214
221
222 struct SCommand_Render : public SCommand
223 {
228 unsigned m_PrimCount;
229 SVertex *m_pVertices; // you should use the command buffer data to allocate vertices for this command
230 };
231
233 {
238 unsigned m_PrimCount;
239 SVertexTex3DStream *m_pVertices; // you should use the command buffer data to allocate vertices for this command
240 };
241
243 {
246
248
252
253 int m_Flags; // @see EBufferObjectCreateFlags
254 };
255
257 {
260
262
266
267 int m_Flags; // @see EBufferObjectCreateFlags
268 };
269
282
295
303
317
331
340
348
350 {
354 SColorf m_Color; // the color of the whole tilelayer -- already enveloped
355
356 // the char offset of all indices that should be rendered, and the amount of renders
358 unsigned int *m_pDrawCount;
359
362 };
363
377
389
406
418
435
453
455 {
459 SColorf *m_pColor; // processor will fill this out
460 bool *m_pSwapped; // processor may set this to true, must be initialized to false by the caller
461 };
462
464 {
467 CImageInfo *m_pImage; // processor will fill this out, the one who adds this command must free the data as well
468 bool *m_pSwapped; // processor may set this to true, must be initialized to false by the caller
469 };
470
471 struct SCommand_Swap : public SCommand
472 {
475 };
476
477 struct SCommand_VSync : public SCommand
478 {
481
483 bool *m_pRetOk;
484 };
485
495
497 {
500
501 // Viewport rectangle, relative to the top left of the drawable area.
502 int m_X;
503 int m_Y;
506 // Size of the whole drawable area, which the viewport can be smaller than.
509 bool m_ByResize; // resized by an resize event.. a hint to make clear that the viewport update can be deferred if wanted
510 };
511
513 {
516
517 // texture information
519
520 size_t m_Width;
521 size_t m_Height;
523 // data must be in RGBA format
524 uint8_t *m_pData; // will be freed by the command processor
525 };
526
528 {
531
532 // texture information
534 };
535
537 {
540
541 // texture information
544
545 size_t m_Width;
546 size_t m_Height;
547
548 uint8_t *m_pTextData; // will be freed by the command processor
549 uint8_t *m_pTextOutlineData; // will be freed by the command processor
550 };
551
553 {
556
557 // texture information
560 };
561
563 {
566
567 // texture information
569
570 int m_X;
571 int m_Y;
572 size_t m_Width;
573 size_t m_Height;
574 uint8_t *m_pData; // will be freed by the command processor
575 };
576
584
592
593 //
594 CCommandBuffer(unsigned CmdBufferSize, unsigned DataBufferSize) :
595 m_CmdBuffer(CmdBufferSize), m_DataBuffer(DataBufferSize), m_pCmdBufferHead(nullptr), m_pCmdBufferTail(nullptr)
596 {
597 }
598
599 void *AllocData(unsigned WantedSize)
600 {
601 return m_DataBuffer.Alloc(WantedSize);
602 }
603
604 template<class T>
605 bool AddCommandUnsafe(const T &Command)
606 {
607 // make sure that we don't do something stupid like ->AddCommand(&Cmd);
608 (void)static_cast<const SCommand *>(&Command);
609
610 // allocate and copy the command into the buffer
611 T *pCmd = (T *)m_CmdBuffer.Alloc(sizeof(*pCmd), alignof(T));
612 if(!pCmd)
613 return false;
614 *pCmd = Command;
615 pCmd->m_pNext = nullptr;
616
620 m_pCmdBufferHead = pCmd;
621 m_pCmdBufferTail = pCmd;
622
624
625 return true;
626 }
627
628 const SCommand *Head() const { return m_pCmdBufferHead; }
630
631 void Reset()
632 {
636
637 m_CommandCount = 0;
639 }
640
641 void AddRenderCalls(size_t RenderCallCountToAdd)
642 {
643 m_RenderCallCount += RenderCallCountToAdd;
644 }
645
646private:
649};
650
663
664// interface for the graphics backend
665// all these functions are called on the main thread
667{
668public:
669 enum
670 {
676 };
677
678 virtual ~IGraphicsBackend() = default;
679
680 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;
681 virtual int Shutdown() = 0;
682
683 virtual uint64_t TextureMemoryUsage() const = 0;
684 virtual uint64_t BufferMemoryUsage() const = 0;
685 virtual uint64_t StreamedMemoryUsage() const = 0;
686 virtual uint64_t StagingMemoryUsage() const = 0;
687
688 virtual const TTwGraphicsGpuList &GetGpus() const = 0;
689
690 virtual void GetVideoModes(CVideoMode *pModes, int MaxModes, int *pNumModes, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen) = 0;
691 virtual void GetCurrentVideoMode(CVideoMode &CurMode, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen) = 0;
692
693 virtual int GetNumScreens() const = 0;
694 virtual const char *GetScreenName(int Screen) const = 0;
695
696 virtual void Minimize() = 0;
697 virtual void SetWindowParams(int FullscreenMode, bool IsBorderless) = 0;
698 virtual bool SetWindowScreen(int Index, bool MoveToCenter, ivec2 *pDesktopSize) = 0;
699 virtual bool UpdateDisplayMode(int Index, ivec2 *pDesktopSize) = 0;
700 virtual int GetWindowScreen() = 0;
701 virtual int WindowActive() = 0;
702 virtual int WindowOpen() = 0;
703 virtual void SetWindowGrab(bool Grab) = 0;
704 // returns true, if the video mode changed
705 virtual bool ResizeWindow(int w, int h, int RefreshRate) = 0;
706 virtual void GetViewportSize(int &w, int &h) = 0;
707 // Insets of the drawable area which are covered by the cutout of the display,
708 // in pixels. Only determined on iOS, zero on all other platforms.
709 virtual void GetDisplayCutoutInsets(int &Left, int &Right) = 0;
710 virtual void NotifyWindow() = 0;
711 virtual bool IsScreenKeyboardShown() = 0;
712
713 virtual void WindowDestroyNtf(uint32_t WindowId) = 0;
714 virtual void WindowCreateNtf(uint32_t WindowId) = 0;
715
716 virtual void RunBuffer(CCommandBuffer *pBuffer) = 0;
718 virtual bool IsIdle() const = 0;
719 virtual void WaitForIdle() = 0;
720
721 virtual bool GetDriverVersion(EGraphicsDriverAgeType DriverAgeType, int &Major, int &Minor, int &Patch, const char *&pName, EBackendType BackendType) = 0;
722 // checks if the current values of the config are a graphics modern API
723 virtual bool IsConfigModernAPI() { return false; }
724 virtual bool UseTrianglesAsQuad() { return false; }
725 virtual bool HasTileBuffering() { return false; }
726 virtual bool HasQuadBuffering() { return false; }
727 virtual bool HasTextBuffering() { return false; }
728 virtual bool HasQuadContainerBuffering() { return false; }
729 virtual bool Uses2DTextureArrays() { return false; }
730 virtual bool HasTextureArraysSupport() { return false; }
731 virtual const char *GetErrorString() { return nullptr; }
732
733 virtual const char *GetVendorString() = 0;
734 virtual const char *GetVersionString() = 0;
735 virtual const char *GetRendererString() = 0;
736
737 // be aware that this function should only be called from the graphics thread, and even then you should really know what you are doing
739
740 virtual const char *GetFatalError() const = 0;
741 virtual bool GetWarning(std::vector<std::string> &WarningStrings) = 0;
742
746 virtual std::optional<int> ShowMessageBox(const IGraphics::CMessageBox &MessageBox) = 0;
747};
748
750{
751 enum class EDrawing
752 {
753 NONE,
757 };
758
768
772
773 //
776
778
782
785
787
792
794
795 std::vector<int> m_vTextureIndices;
798
799 std::atomic<bool> m_WarnPngliteIncompatibleImages = false;
800
801 std::mutex m_WarningsMutex;
802 std::vector<SWarning> m_vWarnings;
803
804 // is a non full windowed (in a sense that the viewport won't include the whole window),
805 // forced viewport, so that it justifies our UI ratio needs
806 bool m_IsForcedViewport = false;
807
809 {
812 // keep a reference to it, so we can free the ID
814
816 };
817 std::vector<SVertexArrayInfo> m_vVertexArrayInfo;
819
820 std::vector<int> m_vBufferObjectIndices;
822
824 {
825 SQuadContainer(bool AutomaticUpload = true)
826 {
827 m_vQuads.clear();
829 m_FreeIndex = -1;
830
831 m_AutomaticUpload = AutomaticUpload;
832 }
833
838
839 std::vector<SQuad> m_vQuads;
840
843
845
847 };
848 std::vector<SQuadContainer> m_vQuadContainers;
850
851 std::vector<WINDOW_RESIZE_FUNC> m_vResizeListeners;
852 std::vector<WINDOW_PROPS_CHANGED_FUNC> m_vPropChangeListeners;
853
854 void *AllocCommandBufferData(size_t AllocSize);
855
856 void AddVertices(int Count);
857 void AddVertices(int Count, CCommandBuffer::SVertex *pVertices);
858 void AddVertices(int Count, CCommandBuffer::SVertexTex3DStream *pVertices);
859
860 template<typename TName>
861 void Rotate(const CCommandBuffer::SPoint &Center, TName *pPoints, int NumPoints)
862 {
863 float c = std::cos(m_Rotation);
864 float s = std::sin(m_Rotation);
865 float x, y;
866 int i;
867
868 TName *pVertices = pPoints;
869 for(i = 0; i < NumPoints; i++)
870 {
871 x = pVertices[i].m_Pos.x - Center.x;
872 y = pVertices[i].m_Pos.y - Center.y;
873 pVertices[i].m_Pos.x = x * c - y * s + Center.x;
874 pVertices[i].m_Pos.y = x * s + y * c + Center.y;
875 }
876 }
877
878 template<typename TName>
879 void AddCmd(
880 TName &Cmd, const std::function<bool()> &FailFunc = [] { return true; })
881 {
883 return;
884
885 // kick command buffer and try again
887
888 dbg_assert(FailFunc(), "graphics: failed to run fail handler for command '%s'", typeid(TName).name());
889 dbg_assert(m_pCommandBuffer->AddCommandUnsafe(Cmd), "graphics: failed to add command '%s' to command buffer", typeid(TName).name());
890 }
891
892 void KickCommandBuffer();
893
895
896 void AdjustViewport(bool SendViewportChangeToBackend);
897
900 void ReadPixelDirect(bool *pSwapped);
901 void ScreenshotDirect(bool *pSwapped);
902
903 int IssueInit();
904 int InitWindow();
905
906public:
908
909 void ClipEnable(int x, int y, int w, int h) override;
910 void ClipDisable() override;
911
912 void BlendNone() override;
913 void BlendNormal() override;
914 void BlendAdditive() override;
915
916 void WrapNormal() override;
917 void WrapClamp() override;
918
919 uint64_t TextureMemoryUsage() const override;
920 uint64_t BufferMemoryUsage() const override;
921 uint64_t StreamedMemoryUsage() const override;
922 uint64_t StagingMemoryUsage() const override;
923
924 const TTwGraphicsGpuList &GetGpus() const override;
925
926 void MapScreen(const CScreenRect &ScreenRect) override;
927 CScreenRect GetScreen() const override;
928
929 void LinesBegin() override;
930 void LinesEnd() override;
931 void LinesDraw(const CLineItem *pArray, size_t Num) override;
932
933 void LinesBatchBegin(CLineItemBatch *pBatch) override;
934 void LinesBatchEnd(CLineItemBatch *pBatch) override;
935 void LinesBatchDraw(CLineItemBatch *pBatch, const CLineItem *pArray, size_t Num) override;
936
938 void FreeTextureIndex(CTextureHandle *pIndex);
939 void UnloadTexture(IGraphics::CTextureHandle *pIndex) override;
940 void LoadTextureAddWarning(size_t Width, size_t Height, int Flags, const char *pTexName);
941 IGraphics::CTextureHandle LoadTextureRaw(const CImageInfo &Image, int Flags, const char *pTexName = nullptr) override;
942 IGraphics::CTextureHandle LoadTextureRawMove(CImageInfo &Image, int Flags, const char *pTexName = nullptr) override;
943
944 bool LoadTextTextures(size_t Width, size_t Height, CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture, uint8_t *pTextData, uint8_t *pTextOutlineData) override;
945 bool UnloadTextTextures(CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture) override;
946 bool UpdateTextTexture(CTextureHandle TextureId, int x, int y, size_t Width, size_t Height, uint8_t *pData, bool IsMovedPointer) override;
947
948 CTextureHandle LoadSpriteTexture(const CImageInfo &FromImageInfo, const std::optional<CImageInfo> &FallbackImageInfo, const struct CDataSprite *pSprite) override;
949
950 bool IsImageSubFullyTransparent(const CImageInfo &FromImageInfo, int x, int y, int w, int h) override;
951 bool IsSpriteTextureFullyTransparent(const CImageInfo &FromImageInfo, const struct CDataSprite *pSprite) override;
952
953 // simple uncompressed RGBA loaders
954 IGraphics::CTextureHandle LoadTexture(const char *pFilename, int StorageType, int Flags = 0) override;
955 bool LoadPng(CImageInfo &Image, const char *pFilename, int StorageType) override;
956 bool LoadPng(CImageInfo &Image, const uint8_t *pData, size_t DataSize, const char *pContextName) override;
957
958 bool CheckImageDivisibility(const char *pContextName, CImageInfo &Image, int DivX, int DivY, bool AllowResize) override;
959 bool IsImageFormatRgba(const char *pContextName, const CImageInfo &Image) override;
960
961 void TextureSet(CTextureHandle TextureId) override;
962
963 void Clear(float r, float g, float b, bool ForceClearNow = false) override;
964
965 void QuadsBegin() override;
966 void QuadsEnd() override;
967 void QuadsTex3DBegin() override;
968 void QuadsTex3DEnd() override;
969 void TrianglesBegin() override;
970 void TrianglesEnd() override;
971 void QuadsEndKeepVertices() override;
972 void QuadsDrawCurrentVertices(bool KeepVertices = true) override;
973 void QuadsSetRotation(float Angle) override;
974
975 void SetColor(float r, float g, float b, float a) override;
976 void SetColor(ColorRGBA Color) override;
977 void SetColor2(ColorRGBA First, ColorRGBA Second) override;
978 void SetColor4(ColorRGBA TopLeft, ColorRGBA TopRight, ColorRGBA BottomLeft, ColorRGBA BottomRight) override;
979
980 void ChangeColorOfQuadVertices(size_t QuadOffset, unsigned char r, unsigned char g, unsigned char b, unsigned char a) override;
981
982 void QuadsSetSubset(float TlU, float TlV, float BrU, float BrV) override;
984 float x0, float y0, float x1, float y1,
985 float x2, float y2, float x3, float y3, int Index = -1) override;
986
987 void QuadsDraw(CQuadItem *pArray, int Num) override;
988
989 template<typename TName>
990 void QuadsDrawTLImpl(TName *pVertices, const CQuadItem *pArray, int Num)
991 {
993
994 dbg_assert(m_Drawing == EDrawing::QUADS, "called Graphics()->QuadsDrawTL without begin");
995
997 {
998 for(int i = 0; i < Num; ++i)
999 {
1000 // first triangle
1001 pVertices[m_NumVertices + 6 * i].m_Pos.x = pArray[i].m_X;
1002 pVertices[m_NumVertices + 6 * i].m_Pos.y = pArray[i].m_Y;
1003 pVertices[m_NumVertices + 6 * i].m_Tex = m_aTexture[0];
1004 pVertices[m_NumVertices + 6 * i].m_Color = m_aColor[0];
1005
1006 pVertices[m_NumVertices + 6 * i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1007 pVertices[m_NumVertices + 6 * i + 1].m_Pos.y = pArray[i].m_Y;
1008 pVertices[m_NumVertices + 6 * i + 1].m_Tex = m_aTexture[1];
1009 pVertices[m_NumVertices + 6 * i + 1].m_Color = m_aColor[1];
1010
1011 pVertices[m_NumVertices + 6 * i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1012 pVertices[m_NumVertices + 6 * i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1013 pVertices[m_NumVertices + 6 * i + 2].m_Tex = m_aTexture[2];
1014 pVertices[m_NumVertices + 6 * i + 2].m_Color = m_aColor[2];
1015
1016 // second triangle
1017 pVertices[m_NumVertices + 6 * i + 3].m_Pos.x = pArray[i].m_X;
1018 pVertices[m_NumVertices + 6 * i + 3].m_Pos.y = pArray[i].m_Y;
1019 pVertices[m_NumVertices + 6 * i + 3].m_Tex = m_aTexture[0];
1020 pVertices[m_NumVertices + 6 * i + 3].m_Color = m_aColor[0];
1021
1022 pVertices[m_NumVertices + 6 * i + 4].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1023 pVertices[m_NumVertices + 6 * i + 4].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1024 pVertices[m_NumVertices + 6 * i + 4].m_Tex = m_aTexture[2];
1025 pVertices[m_NumVertices + 6 * i + 4].m_Color = m_aColor[2];
1026
1027 pVertices[m_NumVertices + 6 * i + 5].m_Pos.x = pArray[i].m_X;
1028 pVertices[m_NumVertices + 6 * i + 5].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1029 pVertices[m_NumVertices + 6 * i + 5].m_Tex = m_aTexture[3];
1030 pVertices[m_NumVertices + 6 * i + 5].m_Color = m_aColor[3];
1031
1032 if(m_Rotation != 0)
1033 {
1034 Center.x = pArray[i].m_X + pArray[i].m_Width / 2;
1035 Center.y = pArray[i].m_Y + pArray[i].m_Height / 2;
1036
1037 Rotate(Center, &pVertices[m_NumVertices + 6 * i], 6);
1038 }
1039 }
1040
1041 AddVertices(3 * 2 * Num, pVertices);
1042 }
1043 else
1044 {
1045 for(int i = 0; i < Num; ++i)
1046 {
1047 pVertices[m_NumVertices + 4 * i].m_Pos.x = pArray[i].m_X;
1048 pVertices[m_NumVertices + 4 * i].m_Pos.y = pArray[i].m_Y;
1049 pVertices[m_NumVertices + 4 * i].m_Tex = m_aTexture[0];
1050 pVertices[m_NumVertices + 4 * i].m_Color = m_aColor[0];
1051
1052 pVertices[m_NumVertices + 4 * i + 1].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1053 pVertices[m_NumVertices + 4 * i + 1].m_Pos.y = pArray[i].m_Y;
1054 pVertices[m_NumVertices + 4 * i + 1].m_Tex = m_aTexture[1];
1055 pVertices[m_NumVertices + 4 * i + 1].m_Color = m_aColor[1];
1056
1057 pVertices[m_NumVertices + 4 * i + 2].m_Pos.x = pArray[i].m_X + pArray[i].m_Width;
1058 pVertices[m_NumVertices + 4 * i + 2].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1059 pVertices[m_NumVertices + 4 * i + 2].m_Tex = m_aTexture[2];
1060 pVertices[m_NumVertices + 4 * i + 2].m_Color = m_aColor[2];
1061
1062 pVertices[m_NumVertices + 4 * i + 3].m_Pos.x = pArray[i].m_X;
1063 pVertices[m_NumVertices + 4 * i + 3].m_Pos.y = pArray[i].m_Y + pArray[i].m_Height;
1064 pVertices[m_NumVertices + 4 * i + 3].m_Tex = m_aTexture[3];
1065 pVertices[m_NumVertices + 4 * i + 3].m_Color = m_aColor[3];
1066
1067 if(m_Rotation != 0)
1068 {
1069 Center.x = pArray[i].m_X + pArray[i].m_Width / 2;
1070 Center.y = pArray[i].m_Y + pArray[i].m_Height / 2;
1071
1072 Rotate(Center, &pVertices[m_NumVertices + 4 * i], 4);
1073 }
1074 }
1075
1076 AddVertices(4 * Num, pVertices);
1077 }
1078 }
1079
1080 void QuadsDrawTL(const CQuadItem *pArray, int Num) override;
1081
1082 void QuadsTex3DDrawTL(const CQuadItem *pArray, int Num) override;
1083
1084 void QuadsDrawFreeform(const CFreeformItem *pArray, int Num) override;
1085 void QuadsText(float x, float y, float Size, const char *pText) override;
1086
1087 void DrawRectExt(float x, float y, float w, float h, float r, int Corners) override;
1088 void DrawRectExt4(float x, float y, float w, float h, ColorRGBA ColorTopLeft, ColorRGBA ColorTopRight, ColorRGBA ColorBottomLeft, ColorRGBA ColorBottomRight, float r, int Corners) override;
1089 int CreateRectQuadContainer(float x, float y, float w, float h, float r, int Corners) override;
1090 void DrawRect(float x, float y, float w, float h, ColorRGBA Color, int Corners, float Rounding) override;
1091 void DrawRect4(float x, float y, float w, float h, ColorRGBA ColorTopLeft, ColorRGBA ColorTopRight, ColorRGBA ColorBottomLeft, ColorRGBA ColorBottomRight, int Corners, float Rounding) override;
1092 void DrawCircle(float CenterX, float CenterY, float Radius, int Segments) override;
1093
1094 int CreateQuadContainer(bool AutomaticUpload = true) override;
1095 void QuadContainerChangeAutomaticUpload(int ContainerIndex, bool AutomaticUpload) override;
1096 void QuadContainerUpload(int ContainerIndex) override;
1097 int QuadContainerAddQuads(int ContainerIndex, CQuadItem *pArray, int Num) override;
1098 int QuadContainerAddQuads(int ContainerIndex, CFreeformItem *pArray, int Num) override;
1099 void QuadContainerReset(int ContainerIndex) override;
1100 void DeleteQuadContainer(int &ContainerIndex) override;
1101 void RenderQuadContainer(int ContainerIndex, int QuadDrawNum) override;
1102 void RenderQuadContainer(int ContainerIndex, int QuadOffset, int QuadDrawNum, bool ChangeWrapMode = true) override;
1103 void RenderQuadContainerEx(int ContainerIndex, int QuadOffset, int QuadDrawNum, float X, float Y, float ScaleX = 1.f, float ScaleY = 1.f) override;
1104 void RenderQuadContainerAsSprite(int ContainerIndex, int QuadOffset, float X, float Y, float ScaleX = 1.f, float ScaleY = 1.f) override;
1105 void RenderQuadContainerAsSpriteMultiple(int ContainerIndex, int QuadOffset, int DrawCount, SRenderSpriteInfo *pRenderInfo) override;
1106
1107 // sprites
1108private:
1109 vec2 m_SpriteScale = vec2(-1.0f, -1.0f);
1110
1111protected:
1112 void SelectSprite(const CDataSprite *pSprite, int Flags);
1113
1114public:
1115 void SelectSprite(int Id, int Flags = 0) override;
1116 void SelectSprite7(int Id, int Flags = 0) override;
1117
1118 void GetSpriteScale(const CDataSprite *pSprite, float &ScaleX, float &ScaleY) const override;
1119 void GetSpriteScale(int Id, float &ScaleX, float &ScaleY) const override;
1120 void GetSpriteScaleImpl(int Width, int Height, float &ScaleX, float &ScaleY) const override;
1121
1122 void DrawSprite(float x, float y, float Size) override;
1123 void DrawSprite(float x, float y, float ScaledWidth, float ScaledHeight) override;
1124
1125 int QuadContainerAddSprite(int QuadContainerIndex, float x, float y, float Size) override;
1126 int QuadContainerAddSprite(int QuadContainerIndex, float Size) override;
1127 int QuadContainerAddSprite(int QuadContainerIndex, float Width, float Height) override;
1128 int QuadContainerAddSprite(int QuadContainerIndex, float X, float Y, float Width, float Height) override;
1129
1130 template<typename TName>
1131 void FlushVerticesImpl(bool KeepVertices, EPrimitiveType &PrimType, size_t &PrimCount, size_t &NumVerts, TName &Command, size_t VertSize)
1132 {
1133 Command.m_pVertices = nullptr;
1134 if(m_NumVertices == 0)
1135 return;
1136
1137 NumVerts = m_NumVertices;
1138
1139 if(!KeepVertices)
1140 m_NumVertices = 0;
1141
1143 {
1145 {
1146 PrimType = EPrimitiveType::TRIANGLES;
1147 PrimCount = NumVerts / 3;
1148 }
1149 else
1150 {
1151 PrimType = EPrimitiveType::QUADS;
1152 PrimCount = NumVerts / 4;
1153 }
1154 }
1155 else if(m_Drawing == EDrawing::LINES)
1156 {
1157 PrimType = EPrimitiveType::LINES;
1158 PrimCount = NumVerts / 2;
1159 }
1160 else if(m_Drawing == EDrawing::TRIANGLES)
1161 {
1162 PrimType = EPrimitiveType::TRIANGLES;
1163 PrimCount = NumVerts / 3;
1164 }
1165 else
1166 {
1167 return;
1168 }
1169
1170 Command.m_pVertices = (decltype(Command.m_pVertices))AllocCommandBufferData(VertSize * NumVerts);
1171 Command.m_State = m_State;
1172
1173 Command.m_PrimType = PrimType;
1174 Command.m_PrimCount = PrimCount;
1175
1176 AddCmd(Command, [&] {
1177 Command.m_pVertices = (decltype(Command.m_pVertices))m_pCommandBuffer->AllocData(VertSize * NumVerts);
1178 return Command.m_pVertices != nullptr;
1179 });
1180
1182 }
1183
1184 void FlushVertices(bool KeepVertices = false) override;
1185 void FlushVerticesTex3D() override;
1186
1187 void RenderTileLayer(int BufferContainerIndex, const ColorRGBA &Color, char **pOffsets, unsigned int *pIndicedVertexDrawNum, size_t NumIndicesOffset) override;
1188 void RenderBorderTiles(int BufferContainerIndex, const ColorRGBA &Color, char *pIndexBufferOffset, const vec2 &Offset, const vec2 &Scale, uint32_t DrawNum) override;
1189 void RenderQuadLayer(int BufferContainerIndex, SQuadRenderInfo *pQuadInfo, size_t QuadNum, int QuadOffset, bool Grouped = false) override;
1190 void RenderText(int BufferContainerIndex, int TextQuadNum, int TextureSize, int TextureTextIndex, int TextureTextOutlineIndex, const ColorRGBA &TextColor, const ColorRGBA &TextOutlineColor) override;
1191
1192 // modern GL functions
1193 int CreateBufferObject(size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer = false) override;
1194 void RecreateBufferObject(int BufferIndex, size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer = false) override;
1195 void UpdateBufferObjectInternal(int BufferIndex, size_t UploadDataSize, void *pUploadData, void *pOffset, bool IsMovedPointer = false);
1196 void CopyBufferObjectInternal(int WriteBufferIndex, int ReadBufferIndex, size_t WriteOffset, size_t ReadOffset, size_t CopyDataSize);
1197 void DeleteBufferObject(int BufferIndex) override;
1198
1199 int CreateBufferContainer(SBufferContainerInfo *pContainerInfo) override;
1200 // destroying all buffer objects means, that all referenced VBOs are destroyed automatically, so the user does not need to save references to them
1201 void DeleteBufferContainer(int &ContainerIndex, bool DestroyAllBO = true) override;
1202 void UpdateBufferContainerInternal(int ContainerIndex, SBufferContainerInfo *pContainerInfo);
1203 void IndicesNumRequiredNotify(unsigned int RequiredIndicesCount) override;
1204
1205 int GetNumScreens() const override;
1206 const char *GetScreenName(int Screen) const override;
1207
1208 void Minimize() override;
1209 void WarnPngliteIncompatibleImages(bool Warn) override;
1210 void SetWindowParams(int FullscreenMode, bool IsBorderless) override;
1211 bool SetWindowScreen(int Index, bool MoveToCenter) override;
1212 bool SwitchWindowScreen(int Index, bool MoveToCenter) override;
1213 void Move(int x, int y) override;
1214 bool Resize(int w, int h, int RefreshRate) override;
1215 void ResizeToScreen() override;
1216 void GotResized(int w, int h, int RefreshRate) override;
1217 void UpdateViewport(int X, int Y, int W, int H, bool ByResize) override;
1218 bool IsScreenKeyboardShown() override;
1219
1220 void AddWindowResizeListener(WINDOW_RESIZE_FUNC pFunc) override;
1222 int GetWindowScreen() override;
1223
1224 void WindowDestroyNtf(uint32_t WindowId) override;
1225 void WindowCreateNtf(uint32_t WindowId) override;
1226
1227 int WindowActive() override;
1228 int WindowOpen() override;
1229
1230 void SetWindowGrab(bool Grab) override;
1231 void NotifyWindow() override;
1232
1233 int Init() override;
1234 void Shutdown() override;
1235
1236 void ReadPixel(ivec2 Position, ColorRGBA *pColor) override;
1237 void TakeScreenshot(const char *pFilename) override;
1238 void TakeCustomScreenshot(const char *pFilename) override;
1239 void Swap() override;
1240 bool SetVSync(bool State) override;
1241 bool SetMultiSampling(uint32_t ReqMultiSamplingCount, uint32_t &MultiSamplingCountBackend) override;
1242
1243 int GetVideoModes(CVideoMode *pModes, int MaxModes, int Screen) override;
1244 void GetCurrentVideoMode(CVideoMode &CurMode, int Screen) override;
1245
1246 // synchronization
1247 void InsertSignal(CSemaphore *pSemaphore) override;
1248 bool IsIdle() const override;
1249 void WaitForIdle() override;
1250
1251 void AddWarning(const SWarning &Warning);
1252 std::optional<SWarning> CurrentWarning() override;
1253
1254 std::optional<int> ShowMessageBox(const CMessageBox &MessageBox) override;
1255
1256 bool IsBackendInitialized() override;
1257
1258 bool GetDriverVersion(EGraphicsDriverAgeType DriverAgeType, int &Major, int &Minor, int &Patch, const char *&pName, EBackendType BackendType) override { return m_pBackend->GetDriverVersion(DriverAgeType, Major, Minor, Patch, pName, BackendType); }
1259 bool IsConfigModernAPI() override { return m_pBackend->IsConfigModernAPI(); }
1267
1268 const char *GetVendorString() override;
1269 const char *GetVersionString() override;
1270 const char *GetRendererString() override;
1271 const char *GetFatalError() const override;
1272
1274};
1275
1276typedef std::function<const char *(const char *, const char *)> TTranslateFunc;
1278
1279#endif // ENGINE_CLIENT_GRAPHICS_THREADED_H
IGraphicsBackend * CreateGraphicsBackend(TTranslateFunc &&TranslateFunc)
Definition backend_sdl.cpp:1848
Definition graphics_threaded.h:50
unsigned char * m_pData
Definition graphics_threaded.h:51
~CBuffer()
Definition graphics_threaded.h:63
unsigned m_Used
Definition graphics_threaded.h:53
void Reset()
Definition graphics_threaded.h:71
unsigned DataSize() const
Definition graphics_threaded.h:91
CBuffer(unsigned BufferSize)
Definition graphics_threaded.h:56
void * Alloc(unsigned Requested, unsigned Alignment=alignof(std::max_align_t))
Definition graphics_threaded.h:76
unsigned DataUsed() const
Definition graphics_threaded.h:92
unsigned char * DataPtr()
Definition graphics_threaded.h:90
unsigned m_Size
Definition graphics_threaded.h:52
Definition graphics_threaded.h:48
SCommand * Head()
Definition graphics_threaded.h:629
@ CMDGROUP_PLATFORM_GL
Definition graphics_threaded.h:112
@ CMDGROUP_CORE
Definition graphics_threaded.h:111
@ CMDGROUP_PLATFORM_SDL
Definition graphics_threaded.h:113
@ CMD_FIRST
Definition graphics_threaded.h:115
GL_SVertexTex3D SVertexTex3D
Definition graphics_threaded.h:179
bool AddCommandUnsafe(const T &Command)
Definition graphics_threaded.h:605
void * AllocData(unsigned WantedSize)
Definition graphics_threaded.h:599
vec2 STexCoord
Definition graphics_threaded.h:175
SCommand * m_pCmdBufferHead
Definition graphics_threaded.h:647
ECommandBufferCMD
Definition graphics_threaded.h:119
@ CMD_MULTISAMPLING
Definition graphics_threaded.h:161
@ CMD_COPY_BUFFER_OBJECT
Definition graphics_threaded.h:139
@ CMD_RECREATE_BUFFER_OBJECT
Definition graphics_threaded.h:137
@ CMD_RENDER_QUAD_LAYER_GROUPED
Definition graphics_threaded.h:151
@ CMD_VSYNC
Definition graphics_threaded.h:162
@ CMD_TEXT_TEXTURES_DESTROY
Definition graphics_threaded.h:127
@ CMD_RENDER_BORDER_TILE
Definition graphics_threaded.h:149
@ CMD_RENDER_QUAD_CONTAINER_SPRITE_MULTIPLE
Definition graphics_threaded.h:155
@ CMD_TEXTURE_DESTROY
Definition graphics_threaded.h:125
@ CMD_UPDATE_VIEWPORT
Definition graphics_threaded.h:165
@ CMD_INDICES_REQUIRED_NUM_NOTIFY
Definition graphics_threaded.h:146
@ CMD_UPDATE_BUFFER_OBJECT
Definition graphics_threaded.h:138
@ CMD_TEXTURE_CREATE
Definition graphics_threaded.h:124
@ CMD_RENDER_TEX3D
Definition graphics_threaded.h:133
@ CMD_SIGNAL
Definition graphics_threaded.h:121
@ CMD_RENDER_QUAD_CONTAINER_EX
Definition graphics_threaded.h:154
@ CMD_WINDOW_CREATE_NTF
Definition graphics_threaded.h:168
@ CMD_RENDER_QUAD_CONTAINER
Definition graphics_threaded.h:153
@ CMD_RENDER_TEXT
Definition graphics_threaded.h:152
@ CMD_RENDER
Definition graphics_threaded.h:132
@ CMD_UPDATE_BUFFER_CONTAINER
Definition graphics_threaded.h:144
@ CMD_WINDOW_DESTROY_NTF
Definition graphics_threaded.h:169
@ CMD_RENDER_TILE_LAYER
Definition graphics_threaded.h:148
@ CMD_CLEAR
Definition graphics_threaded.h:131
@ CMD_TEXT_TEXTURE_UPDATE
Definition graphics_threaded.h:128
@ CMD_TRY_SWAP_AND_READ_PIXEL
Definition graphics_threaded.h:163
@ CMD_SWAP
Definition graphics_threaded.h:158
@ CMD_RENDER_QUAD_LAYER
Definition graphics_threaded.h:150
@ CMD_COUNT
Definition graphics_threaded.h:171
@ CMD_CREATE_BUFFER_OBJECT
Definition graphics_threaded.h:136
@ CMD_DELETE_BUFFER_CONTAINER
Definition graphics_threaded.h:143
@ CMD_DELETE_BUFFER_OBJECT
Definition graphics_threaded.h:140
@ CMD_TRY_SWAP_AND_SCREENSHOT
Definition graphics_threaded.h:164
@ CMD_TEXT_TEXTURES_CREATE
Definition graphics_threaded.h:126
@ CMD_CREATE_BUFFER_CONTAINER
Definition graphics_threaded.h:142
@ MAX_VERTICES
Definition graphics_threaded.h:105
@ MAX_TEXTURES
Definition graphics_threaded.h:104
size_t m_CommandCount
Definition graphics_threaded.h:97
GL_SVertex SVertex
Definition graphics_threaded.h:178
vec2 SPoint
Definition graphics_threaded.h:174
GL_SColorf SColorf
Definition graphics_threaded.h:176
SCommand * m_pCmdBufferTail
Definition graphics_threaded.h:648
GL_SColor SColor
Definition graphics_threaded.h:177
void Reset()
Definition graphics_threaded.h:631
GL_SVertexTex3DStream SVertexTex3DStream
Definition graphics_threaded.h:180
const SCommand * Head() const
Definition graphics_threaded.h:628
CCommandBuffer(unsigned CmdBufferSize, unsigned DataBufferSize)
Definition graphics_threaded.h:594
size_t m_RenderCallCount
Definition graphics_threaded.h:98
void AddRenderCalls(size_t RenderCallCountToAdd)
Definition graphics_threaded.h:641
CBuffer m_CmdBuffer
Definition graphics_threaded.h:96
CBuffer m_DataBuffer
Definition graphics_threaded.h:100
int m_GfxQuadAsTriangle
Definition config.h:441
void AddVertices(int Count)
Definition graphics_threaded.cpp:74
void Move(int x, int y) override
Definition graphics_threaded.cpp:2584
ivec2 m_ReadPixelPosition
Definition graphics_threaded.h:898
void SelectSprite(const CDataSprite *pSprite, int Flags)
Definition graphics_threaded_sprites.cpp:8
int Init() override
Definition graphics_threaded.cpp:2407
void DrawRectExt(float x, float y, float w, float h, float r, int Corners) override
Definition graphics_threaded.cpp:1024
void AddWarning(const SWarning &Warning)
Definition graphics_threaded.cpp:2878
void WindowCreateNtf(uint32_t WindowId) override
Definition graphics_threaded.cpp:2718
bool IsBackendInitialized() override
Definition graphics_threaded.cpp:2909
CTextureHandle LoadSpriteTexture(const CImageInfo &FromImageInfo, const std::optional< CImageInfo > &FallbackImageInfo, const struct CDataSprite *pSprite) override
Definition graphics_threaded.cpp:321
std::optional< SWarning > CurrentWarning() override
Definition graphics_threaded.cpp:2884
int m_TextureMemoryUsage
Definition graphics_threaded.h:797
std::vector< WINDOW_PROPS_CHANGED_FUNC > m_vPropChangeListeners
Definition graphics_threaded.h:852
int CreateBufferObject(size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer=false) override
Definition graphics_threaded.cpp:1922
void CopyBufferObjectInternal(int WriteBufferIndex, int ReadBufferIndex, size_t WriteOffset, size_t ReadOffset, size_t CopyDataSize)
Definition graphics_threaded.cpp:2060
int WindowOpen() override
Definition graphics_threaded.cpp:2736
void DeleteQuadContainer(int &ContainerIndex) override
Definition graphics_threaded.cpp:1640
void RenderQuadContainerAsSprite(int ContainerIndex, int QuadOffset, float X, float Y, float ScaleX=1.f, float ScaleY=1.f) override
Definition graphics_threaded.cpp:1836
bool m_GLHasTextureArraysSupport
Definition graphics_threaded.h:766
void DrawRect(float x, float y, float w, float h, ColorRGBA Color, int Corners, float Rounding) override
Definition graphics_threaded.cpp:1299
bool GetDriverVersion(EGraphicsDriverAgeType DriverAgeType, int &Major, int &Minor, int &Patch, const char *&pName, EBackendType BackendType) override
Definition graphics_threaded.h:1258
std::mutex m_WarningsMutex
Definition graphics_threaded.h:801
void QuadsTex3DEnd() override
Definition graphics_threaded.cpp:769
int CreateQuadContainer(bool AutomaticUpload=true) override
Definition graphics_threaded.cpp:1461
void LoadTextureAddWarning(size_t Width, size_t Height, int Flags, const char *pTexName)
Definition graphics_threaded.cpp:378
int WindowActive() override
Definition graphics_threaded.cpp:2731
std::atomic< bool > m_WarnPngliteIncompatibleImages
Definition graphics_threaded.h:799
CCommandBuffer::SVertexTex3DStream m_aVerticesTex3D[CCommandBuffer::MAX_VERTICES]
Definition graphics_threaded.h:780
void TakeScreenshot(const char *pFilename) override
Definition graphics_threaded.cpp:2777
void QuadsBegin() override
Definition graphics_threaded.cpp:747
CCommandBuffer::SState m_State
Definition graphics_threaded.h:759
const char * GetVersionString() override
Definition graphics_threaded.cpp:2919
void ReadPixelDirect(bool *pSwapped)
Definition graphics_threaded.cpp:2760
const TTwGraphicsGpuList & GetGpus() const override
Definition graphics_threaded.cpp:199
int InitWindow()
Definition graphics_threaded.cpp:2277
EDrawing
Definition graphics_threaded.h:752
@ QUADS
Definition graphics_threaded.h:754
@ TRIANGLES
Definition graphics_threaded.h:756
@ LINES
Definition graphics_threaded.h:755
void LinesBegin() override
Definition graphics_threaded.cpp:215
IGraphics::CTextureHandle LoadTextureRawMove(CImageInfo &Image, int Flags, const char *pTexName=nullptr) override
Definition graphics_threaded.cpp:434
const char * GetRendererString() override
Definition graphics_threaded.cpp:2924
bool CheckImageDivisibility(const char *pContextName, CImageInfo &Image, int DivX, int DivY, bool AllowResize) override
Definition graphics_threaded.cpp:593
int QuadContainerAddSprite(int QuadContainerIndex, float x, float y, float Size) override
Definition graphics_threaded_sprites.cpp:76
int m_CurIndex
Definition graphics_threaded.h:777
void QuadsEnd() override
Definition graphics_threaded.cpp:757
void AddCmd(TName &Cmd, const std::function< bool()> &FailFunc=[] { return true;})
Definition graphics_threaded.h:879
void SetColor2(ColorRGBA First, ColorRGBA Second) override
Definition graphics_threaded.cpp:837
IGraphicsBackend * m_pBackend
Definition graphics_threaded.h:760
void SetColor4(ColorRGBA TopLeft, ColorRGBA TopRight, ColorRGBA BottomLeft, ColorRGBA BottomRight) override
Definition graphics_threaded.cpp:845
void RenderBorderTiles(int BufferContainerIndex, const ColorRGBA &Color, char *pIndexBufferOffset, const vec2 &Offset, const vec2 &Scale, uint32_t DrawNum) override
Definition graphics_threaded.cpp:1385
void GetSpriteScale(const CDataSprite *pSprite, float &ScaleX, float &ScaleY) const override
Definition graphics_threaded_sprites.cpp:45
std::vector< SWarning > m_vWarnings
Definition graphics_threaded.h:802
void WindowDestroyNtf(uint32_t WindowId) override
Definition graphics_threaded.cpp:2705
void LinesBatchEnd(CLineItemBatch *pBatch) override
Definition graphics_threaded.cpp:258
CCommandBuffer * m_apCommandBuffers[2]
Definition graphics_threaded.h:769
void AddBackEndWarningIfExists()
Definition graphics_threaded.cpp:2266
void FlushVerticesTex3D() override
Definition graphics_threaded.cpp:61
void LinesEnd() override
Definition graphics_threaded.cpp:222
void UnloadTexture(IGraphics::CTextureHandle *pIndex) override
Definition graphics_threaded.cpp:309
void TrianglesBegin() override
Definition graphics_threaded.cpp:776
void BlendNormal() override
Definition graphics_threaded.cpp:159
char m_aScreenshotName[IO_MAX_PATH_LENGTH]
Definition graphics_threaded.h:791
void DrawSprite(float x, float y, float Size) override
Definition graphics_threaded_sprites.cpp:64
void TrianglesEnd() override
Definition graphics_threaded.cpp:786
void QuadsDrawFreeform(const CFreeformItem *pArray, int Num) override
Definition graphics_threaded.cpp:925
CCommandBuffer::STexCoord m_aTexture[4]
Definition graphics_threaded.h:784
void DeleteBufferContainer(int &ContainerIndex, bool DestroyAllBO=true) override
Definition graphics_threaded.cpp:2119
bool SetMultiSampling(uint32_t ReqMultiSamplingCount, uint32_t &MultiSamplingCountBackend) override
Definition graphics_threaded.cpp:2841
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:878
bool Uses2DTextureArrays() override
Definition graphics_threaded.h:1264
int m_FirstFreeVertexArrayInfo
Definition graphics_threaded.h:818
void TextureSet(CTextureHandle TextureId) override
Definition graphics_threaded.cpp:729
void QuadsDrawTL(const CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:904
void QuadContainerUpload(int ContainerIndex) override
Definition graphics_threaded.cpp:1485
bool SetVSync(bool State) override
Definition graphics_threaded.cpp:2818
bool IsScreenKeyboardShown() override
Definition graphics_threaded.cpp:2685
bool Resize(int w, int h, int RefreshRate) override
Definition graphics_threaded.cpp:2603
void ResizeToScreen() override
Definition graphics_threaded.cpp:2624
std::vector< WINDOW_RESIZE_FUNC > m_vResizeListeners
Definition graphics_threaded.h:851
void WaitForIdle() override
Definition graphics_threaded.cpp:2873
IGraphics::CTextureHandle LoadTexture(const char *pFilename, int StorageType, int Flags=0) override
Definition graphics_threaded.cpp:459
class IStorage * m_pStorage
Definition graphics_threaded.h:774
void LinesBatchDraw(CLineItemBatch *pBatch, const CLineItem *pArray, size_t Num) override
Definition graphics_threaded.cpp:268
void Swap() override
Definition graphics_threaded.cpp:2792
CTextureHandle m_NullTexture
Definition graphics_threaded.h:793
void Shutdown() override
Definition graphics_threaded.cpp:2484
std::optional< int > ShowMessageBox(const CMessageBox &MessageBox) override
Definition graphics_threaded.cpp:2899
size_t m_FirstFreeTexture
Definition graphics_threaded.h:796
void QuadsEndKeepVertices() override
Definition graphics_threaded.cpp:793
void ClipEnable(int x, int y, int w, int h) override
Definition graphics_threaded.cpp:130
void BlendNone() override
Definition graphics_threaded.cpp:154
TGLBackendReadPresentedImageData & GetReadPresentedImageDataFuncUnsafe() override
Definition graphics_threaded.cpp:2934
bool IsConfigModernAPI() override
Definition graphics_threaded.h:1259
void RenderQuadContainer(int ContainerIndex, int QuadDrawNum) override
Definition graphics_threaded.cpp:1653
void Rotate(const CCommandBuffer::SPoint &Center, TName *pPoints, int NumPoints)
Definition graphics_threaded.h:861
void RenderText(int BufferContainerIndex, int TextQuadNum, int TextureSize, int TextureTextIndex, int TextureTextOutlineIndex, const ColorRGBA &TextColor, const ColorRGBA &TextOutlineColor) override
Definition graphics_threaded.cpp:1441
ColorRGBA * m_pReadPixelColor
Definition graphics_threaded.h:899
CGraphics_Threaded()
Definition graphics_threaded.cpp:93
void AddWindowResizeListener(WINDOW_RESIZE_FUNC pFunc) override
Definition graphics_threaded.cpp:2690
void KickCommandBuffer()
Definition graphics_threaded.cpp:646
bool IsTextBufferingEnabled() override
Definition graphics_threaded.h:1262
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:1715
CCommandBuffer::SColor m_aColor[4]
Definition graphics_threaded.h:783
void FlushVertices(bool KeepVertices=false) override
Definition graphics_threaded.cpp:48
float m_Rotation
Definition graphics_threaded.h:788
void BlendAdditive() override
Definition graphics_threaded.cpp:164
void Clear(float r, float g, float b, bool ForceClearNow=false) override
Definition graphics_threaded.cpp:736
bool m_GLUses2DTextureArrays
Definition graphics_threaded.h:765
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:1093
int m_FirstFreeBufferObjectIndex
Definition graphics_threaded.h:821
void RenderQuadContainerAsSpriteMultiple(int ContainerIndex, int QuadOffset, int DrawCount, SRenderSpriteInfo *pRenderInfo) override
Definition graphics_threaded.cpp:1841
void FlushVerticesImpl(bool KeepVertices, EPrimitiveType &PrimType, size_t &PrimCount, size_t &NumVerts, TName &Command, size_t VertSize)
Definition graphics_threaded.h:1131
void DeleteBufferObject(int BufferIndex) override
Definition graphics_threaded.cpp:2071
void QuadsSetRotation(float Angle) override
Definition graphics_threaded.cpp:807
int m_NumVertices
Definition graphics_threaded.h:781
vec2 m_SpriteScale
Definition graphics_threaded.h:1109
bool m_RenderEnable
Definition graphics_threaded.h:786
bool IsQuadBufferingEnabled() override
Definition graphics_threaded.h:1261
void WrapClamp() override
Definition graphics_threaded.cpp:174
CCommandBuffer * m_pCommandBuffer
Definition graphics_threaded.h:770
void ReadPixel(ivec2 Position, ColorRGBA *pColor) override
Definition graphics_threaded.cpp:2751
int GetNumScreens() const override
Definition graphics_threaded.cpp:2496
int GetVideoModes(CVideoMode *pModes, int MaxModes, int Screen) override
Definition graphics_threaded.cpp:2939
std::vector< int > m_vTextureIndices
Definition graphics_threaded.h:795
void QuadsDrawCurrentVertices(bool KeepVertices=true) override
Definition graphics_threaded.cpp:800
const char * GetFatalError() const override
Definition graphics_threaded.cpp:2929
void QuadContainerChangeAutomaticUpload(int ContainerIndex, bool AutomaticUpload) override
Definition graphics_threaded.cpp:1479
void RenderTileLayer(int BufferContainerIndex, const ColorRGBA &Color, char **pOffsets, unsigned int *pIndicedVertexDrawNum, size_t NumIndicesOffset) override
Definition graphics_threaded.cpp:1341
void WrapNormal() override
Definition graphics_threaded.cpp:169
const char * GetScreenName(int Screen) const override
Definition graphics_threaded.cpp:2501
bool m_GLQuadBufferingEnabled
Definition graphics_threaded.h:762
bool UpdateTextTexture(CTextureHandle TextureId, int x, int y, size_t Width, size_t Height, uint8_t *pData, bool IsMovedPointer) override
Definition graphics_threaded.cpp:512
bool m_GLTileBufferingEnabled
Definition graphics_threaded.h:761
bool m_DoScreenshot
Definition graphics_threaded.h:790
void ScreenshotDirect(bool *pSwapped)
Definition graphics_threaded.cpp:701
bool SetWindowScreen(int Index, bool MoveToCenter) override
Definition graphics_threaded.cpp:2533
void RecreateBufferObject(int BufferIndex, size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer=false) override
Definition graphics_threaded.cpp:1985
void QuadsSetSubset(float TlU, float TlV, float BrU, float BrV) override
Definition graphics_threaded.cpp:865
void UpdateBufferContainerInternal(int ContainerIndex, SBufferContainerInfo *pContainerInfo)
Definition graphics_threaded.cpp:2148
void WarnPngliteIncompatibleImages(bool Warn) override
Definition graphics_threaded.cpp:2514
uint64_t TextureMemoryUsage() const override
Definition graphics_threaded.cpp:179
unsigned m_CurrentCommandBuffer
Definition graphics_threaded.h:771
void * AllocCommandBufferData(size_t AllocSize)
Definition graphics_threaded.cpp:1908
const char * GetVendorString() override
Definition graphics_threaded.cpp:2914
int GetWindowScreen() override
Definition graphics_threaded.cpp:2700
void LinesBatchBegin(CLineItemBatch *pBatch) override
Definition graphics_threaded.cpp:252
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:1308
std::vector< int > m_vBufferObjectIndices
Definition graphics_threaded.h:820
void SetColor(float r, float g, float b, float a) override
Definition graphics_threaded.cpp:827
bool m_GLQuadContainerBufferingEnabled
Definition graphics_threaded.h:764
void UpdateBufferObjectInternal(int BufferIndex, size_t UploadDataSize, void *pUploadData, void *pOffset, bool IsMovedPointer=false)
Definition graphics_threaded.cpp:2034
bool HasTextureArraysSupport() override
Definition graphics_threaded.h:1266
bool IsIdle() const override
Definition graphics_threaded.cpp:2868
bool IsTileBufferingEnabled() override
Definition graphics_threaded.h:1260
void GetCurrentVideoMode(CVideoMode &CurMode, int Screen) override
Definition graphics_threaded.cpp:2953
uint64_t StreamedMemoryUsage() const override
Definition graphics_threaded.cpp:189
uint64_t StagingMemoryUsage() const override
Definition graphics_threaded.cpp:194
bool LoadTextTextures(size_t Width, size_t Height, CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture, uint8_t *pTextData, uint8_t *pTextOutlineData) override
Definition graphics_threaded.cpp:478
void UpdateViewport(int X, int Y, int W, int H, bool ByResize) override
Definition graphics_threaded.cpp:2253
bool IsSpriteTextureFullyTransparent(const CImageInfo &FromImageInfo, const struct CDataSprite *pSprite) override
Definition graphics_threaded.cpp:367
void ClipDisable() override
Definition graphics_threaded.cpp:149
void QuadsDraw(CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:893
void MapScreen(const CScreenRect &ScreenRect) override
Definition graphics_threaded.cpp:204
bool m_GLTextBufferingEnabled
Definition graphics_threaded.h:763
bool IsImageFormatRgba(const char *pContextName, const CImageInfo &Image) override
Definition graphics_threaded.cpp:631
int CreateBufferContainer(SBufferContainerInfo *pContainerInfo) override
Definition graphics_threaded.cpp:2085
int CreateRectQuadContainer(float x, float y, float w, float h, float r, int Corners) override
Definition graphics_threaded.cpp:1211
void RenderQuadLayer(int BufferContainerIndex, SQuadRenderInfo *pQuadInfo, size_t QuadNum, int QuadOffset, bool Grouped=false) override
Definition graphics_threaded.cpp:1406
void IndicesNumRequiredNotify(unsigned int RequiredIndicesCount) override
Definition graphics_threaded.cpp:2167
void SetWindowGrab(bool Grab) override
Definition graphics_threaded.cpp:2741
bool LoadPng(CImageInfo &Image, const char *pFilename, int StorageType) override
Definition graphics_threaded.cpp:562
void AdjustViewport(bool SendViewportChangeToBackend)
Definition graphics_threaded.cpp:2227
CCommandBuffer::SVertex m_aVertices[CCommandBuffer::MAX_VERTICES]
Definition graphics_threaded.h:779
int m_FirstFreeQuadContainer
Definition graphics_threaded.h:849
int QuadContainerAddQuads(int ContainerIndex, CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:1537
std::vector< SQuadContainer > m_vQuadContainers
Definition graphics_threaded.h:848
void QuadsDrawTLImpl(TName *pVertices, const CQuadItem *pArray, int Num)
Definition graphics_threaded.h:990
EDrawing m_Drawing
Definition graphics_threaded.h:789
int TextureLoadFlags() override
Definition graphics_threaded.h:1265
void AddWindowPropChangeListener(WINDOW_PROPS_CHANGED_FUNC pFunc) override
Definition graphics_threaded.cpp:2695
bool m_GLUseTrianglesAsQuad
Definition graphics_threaded.h:767
class IEngine * m_pEngine
Definition graphics_threaded.h:775
void FreeTextureIndex(CTextureHandle *pIndex)
Definition graphics_threaded.cpp:299
void GetSpriteScaleImpl(int Width, int Height, float &ScaleX, float &ScaleY) const override
Definition graphics_threaded_sprites.cpp:57
CScreenRect GetScreen() const override
Definition graphics_threaded.cpp:210
void QuadsText(float x, float y, float Size, const char *pText) override
Definition graphics_threaded.cpp:995
void SelectSprite7(int Id, int Flags=0) override
Definition graphics_threaded_sprites.cpp:39
bool SwitchWindowScreen(int Index, bool MoveToCenter) override
Definition graphics_threaded.cpp:2549
void TakeCustomScreenshot(const char *pFilename) override
Definition graphics_threaded.cpp:2786
bool UnloadTextTextures(CTextureHandle &TextTexture, CTextureHandle &TextOutlineTexture) override
Definition graphics_threaded.cpp:498
bool m_IsForcedViewport
Definition graphics_threaded.h:806
void LinesDraw(const CLineItem *pArray, size_t Num) override
Definition graphics_threaded.cpp:229
IGraphics::CTextureHandle LoadTextureRaw(const CImageInfo &Image, int Flags, const char *pTexName=nullptr) override
Definition graphics_threaded.cpp:411
void SetWindowParams(int FullscreenMode, bool IsBorderless) override
Definition graphics_threaded.cpp:2519
IGraphics::CTextureHandle FindFreeTextureIndex()
Definition graphics_threaded.cpp:284
void GotResized(int w, int h, int RefreshRate) override
Definition graphics_threaded.cpp:2635
std::vector< SVertexArrayInfo > m_vVertexArrayInfo
Definition graphics_threaded.h:817
bool IsImageSubFullyTransparent(const CImageInfo &FromImageInfo, int x, int y, int w, int h) override
Definition graphics_threaded.cpp:346
void NotifyWindow() override
Definition graphics_threaded.cpp:2746
int IssueInit()
Definition graphics_threaded.cpp:2174
void QuadContainerReset(int ContainerIndex) override
Definition graphics_threaded.cpp:1628
uint64_t BufferMemoryUsage() const override
Definition graphics_threaded.cpp:184
void ChangeColorOfQuadVertices(size_t QuadOffset, unsigned char r, unsigned char g, unsigned char b, unsigned char a) override
Definition graphics_threaded.cpp:855
void QuadsTex3DBegin() override
Definition graphics_threaded.cpp:764
void QuadsTex3DDrawTL(const CQuadItem *pArray, int Num) override
Definition graphics_threaded.cpp:909
bool IsQuadContainerBufferingEnabled() override
Definition graphics_threaded.h:1263
void DrawCircle(float CenterX, float CenterY, float Radius, int Segments) override
Definition graphics_threaded.cpp:1316
void Minimize() override
Definition graphics_threaded.cpp:2506
void InsertSignal(CSemaphore *pSemaphore) override
Definition graphics_threaded.cpp:2861
Definition image.h:12
Definition graphics.h:186
Definition sphore.h:62
Definition graphics.h:75
Definition color.h:183
Definition graphics.h:678
Definition engine.h:15
Definition graphics_threaded.h:667
virtual void GetCurrentVideoMode(CVideoMode &CurMode, float HiDPIScale, int MaxWindowWidth, int MaxWindowHeight, int Screen)=0
virtual bool SetWindowScreen(int Index, bool MoveToCenter, ivec2 *pDesktopSize)=0
virtual int WindowActive()=0
virtual bool HasTextureArraysSupport()
Definition graphics_threaded.h:730
virtual bool HasTileBuffering()
Definition graphics_threaded.h:725
virtual const char * GetErrorString()
Definition graphics_threaded.h:731
virtual bool IsScreenKeyboardShown()=0
virtual bool GetWarning(std::vector< std::string > &WarningStrings)=0
virtual void GetDisplayCutoutInsets(int &Left, int &Right)=0
virtual bool IsConfigModernAPI()
Definition graphics_threaded.h:723
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
@ INITFLAG_BORDERLESS
Definition graphics_threaded.h:674
@ INITFLAG_FULLSCREEN
Definition graphics_threaded.h:671
@ INITFLAG_DESKTOP_FULLSCREEN
Definition graphics_threaded.h:675
@ INITFLAG_VSYNC
Definition graphics_threaded.h:672
@ INITFLAG_RESIZABLE
Definition graphics_threaded.h:673
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:724
virtual bool HasQuadContainerBuffering()
Definition graphics_threaded.h:728
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 const char * GetFatalError() const =0
virtual ~IGraphicsBackend()=default
virtual int WindowOpen()=0
virtual uint64_t TextureMemoryUsage() const =0
virtual void WaitForIdle()=0
virtual bool Uses2DTextureArrays()
Definition graphics_threaded.h:729
virtual bool UpdateDisplayMode(int Index, ivec2 *pDesktopSize)=0
virtual void SetWindowParams(int FullscreenMode, bool IsBorderless)=0
virtual uint64_t BufferMemoryUsage() const =0
virtual bool HasTextBuffering()
Definition graphics_threaded.h:727
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:726
Definition graphics.h:439
Definition graphics.h:420
Definition graphics.h:633
Definition graphics.h:261
@ TEXLOAD_TO_3D_TEXTURE
Definition graphics.h:255
@ TEXLOAD_TO_2D_ARRAY_TEXTURE
Definition graphics.h:256
Definition storage.h:21
CConfig g_Config
Definition config.cpp:16
vector4_base< unsigned char > GL_SColor
Definition graphics.h:107
ColorRGBA GL_SColorf
Definition graphics.h:105
EBackendType
Definition graphics.h:143
EGraphicsDriverAgeType
Definition graphics.h:134
std::function< bool(uint32_t &Width, uint32_t &Height, CImageInfo::EImageFormat &Format, std::vector< uint8_t > &vDstData)> TGLBackendReadPresentedImageData
Definition graphics.h:181
std::function< void()> WINDOW_RESIZE_FUNC
Definition graphics.h:178
STWGraphicGpu TTwGraphicsGpuList
Definition graphics.h:176
std::function< void()> WINDOW_PROPS_CHANGED_FUNC
Definition graphics.h:179
std::function< const char *(const char *, const char *)> TTranslateFunc
Definition graphics_threaded.h:1276
constexpr int CMD_BUFFER_DATA_BUFFER_SIZE
Definition graphics_threaded.h:16
EWrapMode
Definition graphics_threaded.h:42
@ REPEAT
Definition graphics_threaded.h:43
@ CLAMP
Definition graphics_threaded.h:44
constexpr int CMD_BUFFER_CMD_BUFFER_SIZE
Definition graphics_threaded.h:17
EBlendMode
Definition graphics_threaded.h:35
@ ALPHA
Definition graphics_threaded.h:37
@ ADDITIVE
Definition graphics_threaded.h:38
EPrimitiveType
Definition graphics_threaded.h:28
@ QUADS
Definition graphics_threaded.h:30
@ TRIANGLES
Definition graphics_threaded.h:31
@ LINES
Definition graphics_threaded.h:29
EGraphicsBackendErrorCodes
Definition graphics_threaded.h:652
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_SCREEN_INFO_REQUEST_FAILED
Definition graphics_threaded.h:659
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_INIT_FAILED
Definition graphics_threaded.h:657
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_SCREEN_RESOLUTION_REQUEST_FAILED
Definition graphics_threaded.h:660
@ GRAPHICS_BACKEND_ERROR_CODE_NONE
Definition graphics_threaded.h:653
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_WINDOW_CREATE_FAILED
Definition graphics_threaded.h:661
@ GRAPHICS_BACKEND_ERROR_CODE_SDL_SCREEN_REQUEST_FAILED
Definition graphics_threaded.h:658
@ GRAPHICS_BACKEND_ERROR_CODE_GL_VERSION_FAILED
Definition graphics_threaded.h:655
@ GRAPHICS_BACKEND_ERROR_CODE_GL_CONTEXT_FAILED
Definition graphics_threaded.h:654
@ GRAPHICS_BACKEND_ERROR_CODE_GLEW_INIT_FAILED
Definition graphics_threaded.h:656
#define dbg_assert(test, fmt,...)
Definition dbg.h:27
constexpr auto IO_MAX_PATH_LENGTH
Definition types.h:26
Definition graphics_threaded.h:20
constexpr uint32_t TO_2D_ARRAY_TEXTURE
Definition graphics_threaded.h:23
constexpr uint32_t NO_MIPMAPS
Definition graphics_threaded.h:21
constexpr uint32_t NO_2D_TEXTURE
Definition graphics_threaded.h:24
constexpr uint32_t TO_3D_TEXTURE
Definition graphics_threaded.h:22
SColorf m_Color
Definition graphics_threaded.h:211
SCommand_Clear()
Definition graphics_threaded.h:209
bool m_ForceClear
Definition graphics_threaded.h:212
SCommand_CopyBufferObject()
Definition graphics_threaded.h:285
size_t m_WriteOffset
Definition graphics_threaded.h:292
int m_WriteBufferIndex
Definition graphics_threaded.h:288
int m_ReadBufferIndex
Definition graphics_threaded.h:289
size_t m_ReadOffset
Definition graphics_threaded.h:291
size_t m_CopySize
Definition graphics_threaded.h:293
SCommand_CreateBufferContainer()
Definition graphics_threaded.h:306
int m_Stride
Definition graphics_threaded.h:311
int m_VertBufferBindingIndex
Definition graphics_threaded.h:312
int m_BufferContainerIndex
Definition graphics_threaded.h:309
size_t m_AttrCount
Definition graphics_threaded.h:314
SBufferContainerInfo::SAttribute * m_pAttributes
Definition graphics_threaded.h:315
size_t m_DataSize
Definition graphics_threaded.h:251
void * m_pUploadData
Definition graphics_threaded.h:250
int m_BufferIndex
Definition graphics_threaded.h:247
bool m_DeletePointer
Definition graphics_threaded.h:249
SCommand_CreateBufferObject()
Definition graphics_threaded.h:244
int m_Flags
Definition graphics_threaded.h:253
int m_BufferContainerIndex
Definition graphics_threaded.h:337
bool m_DestroyAllBO
Definition graphics_threaded.h:338
SCommand_DeleteBufferContainer()
Definition graphics_threaded.h:334
SCommand_DeleteBufferObject()
Definition graphics_threaded.h:298
int m_BufferIndex
Definition graphics_threaded.h:301
SCommand_IndicesRequiredNumNotify()
Definition graphics_threaded.h:343
unsigned int m_RequiredIndicesNum
Definition graphics_threaded.h:346
SCommand_MultiSampling()
Definition graphics_threaded.h:488
bool * m_pRetOk
Definition graphics_threaded.h:493
uint32_t * m_pRetMultiSamplingCount
Definition graphics_threaded.h:492
uint32_t m_RequestedMultiSamplingCount
Definition graphics_threaded.h:491
void * m_pUploadData
Definition graphics_threaded.h:264
int m_BufferIndex
Definition graphics_threaded.h:261
int m_Flags
Definition graphics_threaded.h:267
size_t m_DataSize
Definition graphics_threaded.h:265
bool m_DeletePointer
Definition graphics_threaded.h:263
SCommand_RecreateBufferObject()
Definition graphics_threaded.h:258
SState m_State
Definition graphics_threaded.h:368
uint32_t m_DrawNum
Definition graphics_threaded.h:371
char * m_pIndicesOffset
Definition graphics_threaded.h:370
vec2 m_Offset
Definition graphics_threaded.h:374
SColorf m_Color
Definition graphics_threaded.h:369
SCommand_RenderBorderTile()
Definition graphics_threaded.h:366
int m_BufferContainerIndex
Definition graphics_threaded.h:372
vec2 m_Scale
Definition graphics_threaded.h:375
SCommand_RenderQuadContainerAsSpriteMultiple()
Definition graphics_threaded.h:438
SPoint m_Center
Definition graphics_threaded.h:446
int m_BufferContainerIndex
Definition graphics_threaded.h:442
unsigned int m_DrawNum
Definition graphics_threaded.h:449
unsigned int m_DrawCount
Definition graphics_threaded.h:450
SState m_State
Definition graphics_threaded.h:440
void * m_pOffset
Definition graphics_threaded.h:451
IGraphics::SRenderSpriteInfo * m_pRenderInfo
Definition graphics_threaded.h:444
SColorf m_VertexColor
Definition graphics_threaded.h:447
int m_BufferContainerIndex
Definition graphics_threaded.h:425
void * m_pOffset
Definition graphics_threaded.h:433
SPoint m_Center
Definition graphics_threaded.h:428
SState m_State
Definition graphics_threaded.h:423
float m_Rotation
Definition graphics_threaded.h:427
SCommand_RenderQuadContainerEx()
Definition graphics_threaded.h:421
unsigned int m_DrawNum
Definition graphics_threaded.h:432
SColorf m_VertexColor
Definition graphics_threaded.h:430
unsigned int m_DrawNum
Definition graphics_threaded.h:415
SCommand_RenderQuadContainer()
Definition graphics_threaded.h:409
void * m_pOffset
Definition graphics_threaded.h:416
int m_BufferContainerIndex
Definition graphics_threaded.h:413
SState m_State
Definition graphics_threaded.h:411
int m_QuadOffset
Definition graphics_threaded.h:387
SCommand_RenderQuadLayer(bool Grouped)
Definition graphics_threaded.h:380
SState m_State
Definition graphics_threaded.h:382
int m_BufferContainerIndex
Definition graphics_threaded.h:384
SQuadRenderInfo * m_pQuadInfo
Definition graphics_threaded.h:385
size_t m_QuadNum
Definition graphics_threaded.h:386
EPrimitiveType m_PrimType
Definition graphics_threaded.h:237
unsigned m_PrimCount
Definition graphics_threaded.h:238
SVertexTex3DStream * m_pVertices
Definition graphics_threaded.h:239
SCommand_RenderTex3D()
Definition graphics_threaded.h:234
SState m_State
Definition graphics_threaded.h:236
ColorRGBA m_TextOutlineColor
Definition graphics_threaded.h:404
ColorRGBA m_TextColor
Definition graphics_threaded.h:403
SCommand_RenderText()
Definition graphics_threaded.h:392
int m_TextureSize
Definition graphics_threaded.h:397
int m_DrawNum
Definition graphics_threaded.h:402
int m_TextOutlineTextureIndex
Definition graphics_threaded.h:400
int m_TextTextureIndex
Definition graphics_threaded.h:399
SState m_State
Definition graphics_threaded.h:394
int m_BufferContainerIndex
Definition graphics_threaded.h:396
int m_BufferContainerIndex
Definition graphics_threaded.h:361
SColorf m_Color
Definition graphics_threaded.h:354
char ** m_pIndicesOffsets
Definition graphics_threaded.h:357
int m_IndicesDrawNum
Definition graphics_threaded.h:360
SState m_State
Definition graphics_threaded.h:353
SCommand_RenderTileLayer()
Definition graphics_threaded.h:351
unsigned int * m_pDrawCount
Definition graphics_threaded.h:358
EPrimitiveType m_PrimType
Definition graphics_threaded.h:227
SVertex * m_pVertices
Definition graphics_threaded.h:229
SState m_State
Definition graphics_threaded.h:226
unsigned m_PrimCount
Definition graphics_threaded.h:228
SCommand_Render()
Definition graphics_threaded.h:224
SCommand_Signal()
Definition graphics_threaded.h:217
CSemaphore * m_pSemaphore
Definition graphics_threaded.h:219
SCommand_Swap()
Definition graphics_threaded.h:473
uint8_t * m_pData
Definition graphics_threaded.h:574
SCommand_TextTexture_Update()
Definition graphics_threaded.h:564
size_t m_Width
Definition graphics_threaded.h:572
int m_Slot
Definition graphics_threaded.h:568
int m_X
Definition graphics_threaded.h:570
int m_Y
Definition graphics_threaded.h:571
size_t m_Height
Definition graphics_threaded.h:573
SCommand_TextTextures_Create()
Definition graphics_threaded.h:538
int m_SlotOutline
Definition graphics_threaded.h:543
size_t m_Width
Definition graphics_threaded.h:545
uint8_t * m_pTextData
Definition graphics_threaded.h:548
uint8_t * m_pTextOutlineData
Definition graphics_threaded.h:549
size_t m_Height
Definition graphics_threaded.h:546
int m_Slot
Definition graphics_threaded.h:542
int m_Slot
Definition graphics_threaded.h:558
int m_SlotOutline
Definition graphics_threaded.h:559
SCommand_TextTextures_Destroy()
Definition graphics_threaded.h:554
SCommand_Texture_Create()
Definition graphics_threaded.h:514
size_t m_Height
Definition graphics_threaded.h:521
uint8_t * m_pData
Definition graphics_threaded.h:524
size_t m_Width
Definition graphics_threaded.h:520
int m_Flags
Definition graphics_threaded.h:522
int m_Slot
Definition graphics_threaded.h:518
SCommand_Texture_Destroy()
Definition graphics_threaded.h:529
int m_Slot
Definition graphics_threaded.h:533
ivec2 m_Position
Definition graphics_threaded.h:458
bool * m_pSwapped
Definition graphics_threaded.h:460
SColorf * m_pColor
Definition graphics_threaded.h:459
SCommand_TrySwapAndReadPixel()
Definition graphics_threaded.h:456
CImageInfo * m_pImage
Definition graphics_threaded.h:467
SCommand_TrySwapAndScreenshot()
Definition graphics_threaded.h:465
bool * m_pSwapped
Definition graphics_threaded.h:468
SBufferContainerInfo::SAttribute * m_pAttributes
Definition graphics_threaded.h:329
int m_VertBufferBindingIndex
Definition graphics_threaded.h:326
int m_BufferContainerIndex
Definition graphics_threaded.h:323
SCommand_UpdateBufferContainer()
Definition graphics_threaded.h:320
int m_Stride
Definition graphics_threaded.h:325
size_t m_AttrCount
Definition graphics_threaded.h:328
SCommand_UpdateBufferObject()
Definition graphics_threaded.h:272
size_t m_DataSize
Definition graphics_threaded.h:280
void * m_pUploadData
Definition graphics_threaded.h:279
int m_BufferIndex
Definition graphics_threaded.h:275
bool m_DeletePointer
Definition graphics_threaded.h:277
void * m_pOffset
Definition graphics_threaded.h:278
SCommand_Update_Viewport()
Definition graphics_threaded.h:498
int m_Height
Definition graphics_threaded.h:505
int m_X
Definition graphics_threaded.h:502
int m_DrawableWidth
Definition graphics_threaded.h:507
bool m_ByResize
Definition graphics_threaded.h:509
int m_Width
Definition graphics_threaded.h:504
int m_DrawableHeight
Definition graphics_threaded.h:508
int m_Y
Definition graphics_threaded.h:503
int m_VSync
Definition graphics_threaded.h:482
SCommand_VSync()
Definition graphics_threaded.h:479
bool * m_pRetOk
Definition graphics_threaded.h:483
uint32_t m_WindowId
Definition graphics_threaded.h:582
SCommand_WindowCreateNtf()
Definition graphics_threaded.h:579
SCommand_WindowDestroyNtf()
Definition graphics_threaded.h:587
uint32_t m_WindowId
Definition graphics_threaded.h:590
Definition graphics_threaded.h:183
SCommand(unsigned Cmd)
Definition graphics_threaded.h:185
SCommand * m_pNext
Definition graphics_threaded.h:188
unsigned m_Cmd
Definition graphics_threaded.h:187
Definition graphics_threaded.h:192
bool m_ClipEnable
Definition graphics_threaded.h:200
int m_Texture
Definition graphics_threaded.h:195
int m_ClipW
Definition graphics_threaded.h:203
SPoint m_ScreenTL
Definition graphics_threaded.h:196
SPoint m_ScreenBR
Definition graphics_threaded.h:197
int m_ClipY
Definition graphics_threaded.h:202
EBlendMode m_BlendMode
Definition graphics_threaded.h:193
int m_ClipH
Definition graphics_threaded.h:204
EWrapMode m_WrapMode
Definition graphics_threaded.h:194
int m_ClipX
Definition graphics_threaded.h:201
Definition graphics_threaded.h:835
CCommandBuffer::SVertex m_aVertices[4]
Definition graphics_threaded.h:836
int m_FreeIndex
Definition graphics_threaded.h:844
int m_QuadBufferObjectIndex
Definition graphics_threaded.h:841
std::vector< SQuad > m_vQuads
Definition graphics_threaded.h:839
int m_QuadBufferContainerIndex
Definition graphics_threaded.h:842
bool m_AutomaticUpload
Definition graphics_threaded.h:846
SQuadContainer(bool AutomaticUpload=true)
Definition graphics_threaded.h:825
SVertexArrayInfo()
Definition graphics_threaded.h:810
int m_AssociatedBufferObjectIndex
Definition graphics_threaded.h:813
int m_FreeIndex
Definition graphics_threaded.h:815
Definition graphics.h:124
Definition graphics.h:117
Definition graphics.h:110
Definition graphics.h:471
float m_Y
Definition graphics.h:472
float m_Height
Definition graphics.h:472
float m_X
Definition graphics.h:472
float m_Width
Definition graphics.h:472
Definition graphics.h:497
Definition graphics.h:32
Definition graphics.h:26
Definition graphics.h:45
Definition warning.h:5
vector2_base< int > ivec2
Definition vmath.h:170
vector2_base< float > vec2
Definition vmath.h:168