Skip to content

Commit 9101161

Browse files
committed
Increase vertex pos precision to handle large coordinates
This helps handle large screen resolution and graphing extension. Used to pack x,y on a u16 each (normalized between to 8000 range) now just use float Makes each vertice size go from 12bytes to 16bytes, a 33% increase
1 parent bf471d8 commit 9101161

File tree

5 files changed

+11
-12
lines changed

5 files changed

+11
-12
lines changed

Code/Client/NetImgui_Api.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@
44
//! @Name : NetImgui
55
//=================================================================================================
66
//! @author : Sammy Fatnassi
7-
//! @date : 2026/01/04
8-
//! @version : v1.13.0
7+
//! @date : 2026/02/01
8+
//! @version : v1.13.1
99
//! @Details : For integration info : https://github.com/sammyfreg/netImgui/wiki
1010
//=================================================================================================
11-
#define NETIMGUI_VERSION "1.13.0" // Release of v 1.13
12-
#define NETIMGUI_VERSION_NUM 11300
11+
#define NETIMGUI_VERSION "1.13.1" // Switched vtx pos to float (from u16) to support large coordinates
12+
#define NETIMGUI_VERSION_NUM 11301
1313

1414

1515
//-------------------------------------------------------------------------------------------------

Code/Client/Private/NetImgui_CmdPackets.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ struct alignas(8) CmdVersion : public CmdHeader
4545
UpdatedComs = 16, // Faster protocol by removing blocking coms
4646
RemDisconnect = 17, // Removed Disconnect command
4747
ManagedTextures = 18, // Adding support for Dear Imgui Managed Textures (introduced in 1.92))
48+
VertexFloat = 19, // Increased Vertex from UNorm16 bit to float for added precision on large screen/graphing tools
4849
// Insert new version here
4950

5051
//--------------------------------

Code/Client/Private/NetImgui_CmdPackets_DrawFrame.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ inline void ImGui_ExtractVertices(const ImDrawList& cmdList, ImguiDrawGroup& dra
7878
pVertices[i].mColor = Vtx.col;
7979
pVertices[i].mUV[0] = static_cast<uint16_t>((Vtx.uv.x - static_cast<float>(ImguiVert::kUvRange_Min) + 0.5f/65535.f) * 0xFFFF / (ImguiVert::kUvRange_Max - ImguiVert::kUvRange_Min));
8080
pVertices[i].mUV[1] = static_cast<uint16_t>((Vtx.uv.y - static_cast<float>(ImguiVert::kUvRange_Min) + 0.5f/65535.f) * 0xFFFF / (ImguiVert::kUvRange_Max - ImguiVert::kUvRange_Min));
81-
pVertices[i].mPos[0] = static_cast<uint16_t>((Vtx.pos.x - drawGroupOut.mReferenceCoord[0] - static_cast<float>(ImguiVert::kPosRange_Min)) * 0xFFFF / (ImguiVert::kPosRange_Max - ImguiVert::kPosRange_Min));
82-
pVertices[i].mPos[1] = static_cast<uint16_t>((Vtx.pos.y - drawGroupOut.mReferenceCoord[1] - static_cast<float>(ImguiVert::kPosRange_Min)) * 0xFFFF / (ImguiVert::kPosRange_Max - ImguiVert::kPosRange_Min));
81+
pVertices[i].mPos[0] = Vtx.pos.x - drawGroupOut.mReferenceCoord[0];
82+
pVertices[i].mPos[1] = Vtx.pos.y - drawGroupOut.mReferenceCoord[1];
8383
}
8484
}
8585

Code/Client/Private/NetImgui_CmdPackets_DrawFrame.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace NetImgui { namespace Internal
88
struct ImguiVert
99
{
1010
//Note: If updating this, increase 'CmdVersion::eVersion'
11-
enum Constants{ kUvRange_Min=0, kUvRange_Max=1, kPosRange_Min=-8192, kPosRange_Max=8192};
12-
uint16_t mPos[2];
11+
enum Constants{ kUvRange_Min=0, kUvRange_Max=1};
12+
float mPos[2];
1313
uint16_t mUV[2];
1414
uint32_t mColor;
1515
};

Code/ServerApp/Source/NetImguiServer_RemoteClient.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,8 +336,6 @@ NetImguiImDrawData* Client::GetImguiDrawData(ImTextureID EmtpyTextureID)
336336
//=================================================================================================
337337
void Client::ProcessCmdDrawFrame(NetImgui::Internal::CmdDrawFrame* pCmdDrawFrame)
338338
{
339-
constexpr float kPosRangeMin = static_cast<float>(NetImgui::Internal::ImguiVert::kPosRange_Min);
340-
constexpr float kPosRangeMax = static_cast<float>(NetImgui::Internal::ImguiVert::kPosRange_Max);
341339
constexpr float kUVRangeMin = static_cast<float>(NetImgui::Internal::ImguiVert::kUvRange_Min);
342340
constexpr float kUVRangeMax = static_cast<float>(NetImgui::Internal::ImguiVert::kUvRange_Max);
343341

@@ -391,8 +389,8 @@ void Client::ProcessCmdDrawFrame(NetImgui::Internal::CmdDrawFrame* pCmdDrawFrame
391389
const NetImgui::Internal::ImguiVert* pVertexSrc = drawGroup.mpVertices.Get();
392390
for (uint32_t vtxIdx(0); vtxIdx < drawGroup.mVerticeCount; ++vtxIdx)
393391
{
394-
pVertexDst[vtxIdx].pos.x = (static_cast<float>(pVertexSrc[vtxIdx].mPos[0]) * (kPosRangeMax - kPosRangeMin)) / static_cast<float>(0xFFFF) + kPosRangeMin + drawGroup.mReferenceCoord[0];
395-
pVertexDst[vtxIdx].pos.y = (static_cast<float>(pVertexSrc[vtxIdx].mPos[1]) * (kPosRangeMax - kPosRangeMin)) / static_cast<float>(0xFFFF) + kPosRangeMin + drawGroup.mReferenceCoord[1];
392+
pVertexDst[vtxIdx].pos.x = pVertexSrc[vtxIdx].mPos[0] + drawGroup.mReferenceCoord[0];
393+
pVertexDst[vtxIdx].pos.y = pVertexSrc[vtxIdx].mPos[1] + drawGroup.mReferenceCoord[1];
396394
pVertexDst[vtxIdx].uv.x = (static_cast<float>(pVertexSrc[vtxIdx].mUV[0]) * (kUVRangeMax - kUVRangeMin)) / static_cast<float>(0xFFFF) + kUVRangeMin;
397395
pVertexDst[vtxIdx].uv.y = (static_cast<float>(pVertexSrc[vtxIdx].mUV[1]) * (kUVRangeMax - kUVRangeMin)) / static_cast<float>(0xFFFF) + kUVRangeMin;
398396
pVertexDst[vtxIdx].col = pVertexSrc[vtxIdx].mColor;

0 commit comments

Comments
 (0)