MCPcopy Create free account
hub / github.com/ddnet/ddnet / CreateBufferObject

Method CreateBufferObject

src/engine/client/graphics_threaded.cpp:1936–1997  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1934}
1935
1936int CGraphics_Threaded::CreateBufferObject(size_t UploadDataSize, void *pUploadData, int CreateFlags, bool IsMovedPointer)
1937{
1938 int Index = -1;
1939 if(m_FirstFreeBufferObjectIndex == -1)
1940 {
1941 Index = m_vBufferObjectIndices.size();
1942 m_vBufferObjectIndices.push_back(Index);
1943 }
1944 else
1945 {
1946 Index = m_FirstFreeBufferObjectIndex;
1947 m_FirstFreeBufferObjectIndex = m_vBufferObjectIndices[Index];
1948 m_vBufferObjectIndices[Index] = Index;
1949 }
1950
1951 dbg_assert((CreateFlags & EBufferObjectCreateFlags::BUFFER_OBJECT_CREATE_FLAGS_ONE_TIME_USE_BIT) == 0 || (UploadDataSize <= CCommandBuffer::MAX_VERTICES * maximum(sizeof(CCommandBuffer::SVertexTex3DStream), sizeof(CCommandBuffer::SVertexTex3D))),
1952 "If BUFFER_OBJECT_CREATE_FLAGS_ONE_TIME_USE_BIT is used, then the buffer size must not exceed max(sizeof(CCommandBuffer::SVertexTex3DStream), sizeof(CCommandBuffer::SVertexTex3D)) * CCommandBuffer::MAX_VERTICES");
1953
1954 CCommandBuffer::SCommand_CreateBufferObject Cmd;
1955 Cmd.m_BufferIndex = Index;
1956 Cmd.m_DataSize = UploadDataSize;
1957 Cmd.m_DeletePointer = IsMovedPointer;
1958 Cmd.m_Flags = CreateFlags;
1959
1960 if(IsMovedPointer)
1961 {
1962 Cmd.m_pUploadData = pUploadData;
1963 AddCmd(Cmd);
1964 }
1965 else
1966 {
1967 if(UploadDataSize <= CMD_BUFFER_DATA_BUFFER_SIZE)
1968 {
1969 Cmd.m_pUploadData = AllocCommandBufferData(UploadDataSize);
1970
1971 AddCmd(Cmd, [&] {
1972 Cmd.m_pUploadData = m_pCommandBuffer->AllocData(UploadDataSize);
1973 return Cmd.m_pUploadData != nullptr;
1974 });
1975 mem_copy(Cmd.m_pUploadData, pUploadData, UploadDataSize);
1976 }
1977 else
1978 {
1979 Cmd.m_pUploadData = nullptr;
1980 AddCmd(Cmd);
1981
1982 // update the buffer instead
1983 size_t UploadDataOffset = 0;
1984 while(UploadDataSize > 0)
1985 {
1986 size_t UpdateSize = (UploadDataSize > CMD_BUFFER_DATA_BUFFER_SIZE ? CMD_BUFFER_DATA_BUFFER_SIZE : UploadDataSize);
1987
1988 UpdateBufferObjectInternal(Index, UpdateSize, (((char *)pUploadData) + UploadDataOffset), (void *)UploadDataOffset);
1989
1990 UploadDataOffset += UpdateSize;
1991 UploadDataSize -= UpdateSize;
1992 }
1993 }

Callers 3

UploadTileDataMethod · 0.45
InitMethod · 0.45
UploadTextContainerMethod · 0.45

Calls 3

maximumFunction · 0.85
mem_copyFunction · 0.85
AllocDataMethod · 0.80

Tested by

no test coverage detected