97 _imInterface->BeginBatch(reserveBuffers, vertexCount, attributeCount);
191 idxBuff.dynamic =
true;
197 params._bindConfig = { ._bufferIdx = 0u, ._bindIdx = 0u };
198 params._bufferParams._elementCount =
to_U32(batchData.m_PositionData.size());
199 params._initialData = { batchData.m_PositionData.data(), batchData.m_PositionData.size() *
sizeof(
NS_GLIM::Glim4ByteData) };
206 vertBinding._bufferBindIndex = params._bindConfig._bindIdx;
207 vertBinding._strideInBytes = 3 *
sizeof(
F32 );
212 for (
auto& [index, data] : batchData.m_Attributes) {
214 params._bindConfig = { ._bufferIdx = bufferIdx++, ._bindIdx =
to_U16(index) };
215 params._bufferParams._elementCount =
to_U32(data.m_ArrayData.size());
216 params._initialData = { data.m_ArrayData.data(), data.m_ArrayData.size() *
sizeof(
NS_GLIM::Glim4ByteData) };
225 vertBinding._strideInBytes = params._elementStride;
240 idxBuff.count = batchData.m_IndexBuffer_Lines.size();
241 idxBuff.data = batchData.m_IndexBuffer_Lines.data();
244 idxBuff.count = batchData.m_IndexBuffer_Points.size();
245 idxBuff.data = batchData.m_IndexBuffer_Points.data();
248 idxBuff.count = batchData.m_IndexBuffer_Triangles.size();
249 idxBuff.data = batchData.m_IndexBuffer_Triangles.data();
252 idxBuff.count = batchData.m_IndexBuffer_Wireframe.size();
253 idxBuff.data = batchData.m_IndexBuffer_Wireframe.data();
267 for (
auto& [index, data] : batchData.m_Attributes) {
283 for (
size_t i = 0u; i < count; ++i) {
299 for (
size_t i = 0u; i < count; ++i) {
311 lines[lineCount++] = temp;
317 lines[lineCount++] = temp;
323 lines[lineCount++] = temp;
329 lines[lineCount++] = temp;
336 lines[lineCount++] = temp;
342 lines[lineCount++] = temp;
348 lines[lineCount++] = temp;
354 lines[lineCount++] = temp;
361 lines[lineCount++] = temp;
367 lines[lineCount++] = temp;
373 lines[lineCount++] = temp;
379 lines[lineCount++] = temp;
393 std::array<Line, 12> lines = {};
397 for (
size_t i = 0u; i < count; ++i) {
400 for (
U8 j = 0u; j < 12u; ++j)
402 lines[j]._positionStart = edges[j]._start;
403 lines[j]._positionEnd = edges[j]._end;
404 lines[j]._colourStart = descriptor.
colour;
405 lines[j]._colourEnd = descriptor.
colour;
425 for (
size_t i = 0u; i < count; ++i) {
477 for (
size_t c = 0u; c < count; ++c) {
486 for (
U32 i = 0u; i < sphere.
stacks; i++) {
487 const F32 rho = i * drho;
488 const F32 srho = std::sin(rho);
489 const F32 crho = std::cos(rho);
490 const F32 srhodrho = std::sin(rho + drho);
491 const F32 crhodrho = std::cos(rho + drho);
492 for (
U32 j = 0; j <= sphere.
slices; j++) {
493 const F32 theta = j == sphere.
slices ? 0.0f : j * dtheta;
494 const F32 stheta = -std::sin(theta);
495 const F32 ctheta = std::cos(theta);
497 F32 x = stheta * srho;
498 F32 y = ctheta * srho;
506 x = stheta * srhodrho;
507 y = ctheta * srhodrho;
513 if (i == 0 && j == 0) {
518 vertex(startVert.x, startVert.y, startVert.z);
537 for (
size_t i = 0u; i < count; ++i) {
548 std::array<vec3<F32>, 32u> pts = {};
549 for (
size_t j = 0u; j < slices; ++j) {
550 const F32 rad = angInc * j;
551 pts[j] = c + (e0 * std::cos(rad) + e1 * std::sin(rad)) * cone.
radius;
559 for (
U8 j = 0u; j < slices; ++j) {
567 for (
I8 j = slices - 1; j >= 0; --j) {
599 for (
size_t i = 0u; i < count; ++i) {
600 const Line& line = lines[i];
670 drawCmd._cmd.instanceCount = 1u;
673 GFX::EnqueueCommand<GFX::BeginDebugScopeCommand>(commandBufferInOut)->_scopeName = _name.c_str();
675 auto cmd = GFX::EnqueueCommand<GFX::BindShaderResourcesCommand>(commandBufferInOut);
699 GFX::EnqueueCommand<GFX::BindPipelineCommand>(commandBufferInOut)->_pipeline =
_pipelines[i];
700 auto pushConstantsCmd = GFX::EnqueueCommand<GFX::SendPushConstantsCommand>(commandBufferInOut);
703 GFX::EnqueueCommand<GFX::DrawCommand>(commandBufferInOut)->_drawCommands.emplace_back(drawCmd);
708 GFX::EnqueueCommand<GFX::EndDebugScopeCommand>(commandBufferInOut);
void getCornersWorldSpace(std::array< vec3< F32 >, to_base(FrustumPoints::COUNT)> &cornersWS) const noexcept
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
Pipeline * newPipeline(const PipelineDescriptor &descriptor)
Create and return a new graphics pipeline. This is only used for caching and doesn't use the object a...
GenericVertexData_ptr newGVD(U32 ringBufferLength, std::string_view name)
void attribute1f(U32 attribLocation, F32 value)
void getCommandBuffer(GFX::CommandBuffer &commandBufferInOut, GFX::MemoryBarrierCommand &memCmdInOut)
void beginBatch(bool reserveBuffers, U32 vertexCount, U32 attributeCount)
GFX::MemoryBarrierCommand _memCmd
void attribute4ub(U32 attribLocation, U8 x, U8 y, U8 z, U8 w)
void setUniformData(const UniformData &constants)
void vertex(F32 x, F32 y, F32 z)
IMPrimitive(GFXDevice &context, const Str< 64 > &name)
bool hasBatch() const noexcept
void fromOBB(const IM::OBBDescriptor &box)
PushConstantsStruct _fastData
GFXDevice & context() noexcept
std::array< size_t, to_base(NS_GLIM::GLIM_BUFFER_TYPE::COUNT)> _indexCount
GenericVertexData_ptr _dataBuffer
void attribute1i(U32 attribLocation, I32 value)
UniformData _additionalUniforms
void fromLinesInternal(const Line *lines, size_t count)
void fromSpheres(const IM::SphereDescriptor *spheres, size_t count)
void fromCones(const IM::ConeDescriptor *cones, size_t count)
void fromOBBs(const IM::OBBDescriptor *boxes, size_t count)
NS_GLIM::GLIM_BATCH_uptr _imInterface
std::array< bool, to_base(NS_GLIM::GLIM_BUFFER_TYPE::COUNT)> _drawFlags
void setPipelineDescriptor(const PipelineDescriptor &descriptor)
void fromFrustums(const IM::FrustumDescriptor *frustums, size_t count)
void fromBox(const IM::BoxDescriptor &box)
void fromCone(const IM::ConeDescriptor &cone)
void attribute4f(U32 attribLocation, F32 x, F32 y, F32 z, F32 w)
void fromBoxes(const IM::BoxDescriptor *boxes, size_t count)
void fromLines(const IM::LineDescriptor &lines)
std::array< Pipeline *, to_base(NS_GLIM::GLIM_BUFFER_TYPE::COUNT)> _pipelines
void attribute3f(U32 attribLocation, vec3< F32 > value)
void attribute2f(U32 attribLocation, vec2< F32 > value)
SamplerDescriptor _sampler
void fromFrustum(const IM::FrustumDescriptor &frustum)
static void InitStaticData()
void setPushConstants(const PushConstantsStruct &fastData)
std::array< U8, to_base(NS_GLIM::GLIM_BUFFER_TYPE::COUNT)> _indexBufferId
void setTexture(const ImageView &texture, SamplerDescriptor sampler)
PipelineDescriptor _basePipelineDescriptor
void setUniformDataAndConstants(const UniformData &constants, const PushConstantsStruct &fastData)
void begin(PrimitiveTopology type)
void fromSphere(const IM::SphereDescriptor &sphere)
std::array< LineSegment, 12 > OOBBEdgeList
OOBBEdgeList edgeList() const noexcept
static const SamplerDescriptor DefaultSampler() noexcept
static Handle< Texture > DefaultTexture2D() noexcept
UColour4 ToByteColour(const FColour4 &floatColour) noexcept
FColour4 ToFloatColour(const UColour4 &byteColour) noexcept
std::array< NS_GLIM::GLIM_ENUM, to_base(PrimitiveTopology::COUNT)> glimPrimitiveType
PrimitiveTopology GetTopology(const NS_GLIM::GLIM_BUFFER_TYPE type)
size_t GetSizeFactor(const NS_GLIM::GLIM_ENUM dataType) noexcept
Handle console commands that start with a forward slash.
constexpr U32 to_U32(const T value)
TextureType TargetType(const ImageView &imageView) noexcept
constexpr U16 to_U16(const T value)
vec3< T > Perpendicular(const vec3< T > &v) noexcept
void Set(DescriptorSetBindingData &dataInOut, ShaderBuffer *buffer, const BufferRange range) noexcept
constexpr U64 _ID(const char *const str, const U64 value=val_64_const) noexcept
DescriptorSetBinding & AddBinding(DescriptorSet &setInOut, U8 slot, U16 stageVisibilityMask)
void efficient_clear(eastl::fixed_vector< T, nodeCount, bEnableOverflow, OverflowAllocator > &fixed_vector)
constexpr U8 to_U8(const T value)
vec2< T > Cross(vec2< T > v1, vec2< T > v2) noexcept
general vec2 cross function
constexpr F32 M_PIDIV180_f
static const mat4< F32 > MAT4_IDENTITY
constexpr auto to_base(const Type value) -> Type
GLIM_ENUM
The enum holding all important GLIM configuration values.
@ GLIM_LINES
Can be passed to GLIM::Begin.
@ GLIM_LINE_STRIP
Can be passed to GLIM::Begin.
@ GLIM_TRIANGLE_STRIP
Can be passed to GLIM::Begin (not yet implemented)
@ GLIM_POINTS
Can be passed to GLIM::Begin.
@ GLIM_TRIANGLE_FAN
Can be passed to GLIM::Begin.
@ GLIM_TRIANGLES
Can be passed to GLIM::Begin.
VertexBindings _vertexBindings
BufferUpdateFrequency _updateFrequency
DescriptorSetBindingData _data
BufferParams _bufferParams
vec3< F32 > _positionStart
PrimitiveTopology _primitiveTopology
AttributeMap _vertexFormat
Handle< ShaderProgram > _shaderProgramHandle