Fix a lot of small bugs/warnings

This commit is contained in:
Jérôme Leclercq 2021-12-25 20:07:53 +01:00
parent 1080823c4d
commit b98fd65a01
26 changed files with 62 additions and 52 deletions

View File

@ -297,6 +297,12 @@ namespace Nz
To SafeCast(From value) To SafeCast(From value)
{ {
#if defined(NAZARA_DEBUG) && !defined(NDEBUG) #if defined(NAZARA_DEBUG) && !defined(NDEBUG)
#ifdef NAZARA_COMPILER_MSVC
// Disable unreachable code warnings
#pragma warning(push)
#pragma warning(disable: 4702)
#endif
if constexpr (std::is_integral_v<To>) if constexpr (std::is_integral_v<To>)
{ {
if constexpr (std::is_enum_v<From>) if constexpr (std::is_enum_v<From>)
@ -368,6 +374,10 @@ namespace Nz
} }
} }
} }
#ifdef NAZARA_COMPILER_MSVC
#pragma warning(pop)
#endif
#endif #endif
return static_cast<To>(value); return static_cast<To>(value);

View File

@ -11,6 +11,7 @@
#ifdef NAZARA_COMPILER_MSVC #ifdef NAZARA_COMPILER_MSVC
// Bits tricks require us to disable some warnings under VS // Bits tricks require us to disable some warnings under VS
#pragma warning(push)
#pragma warning(disable: 4146) #pragma warning(disable: 4146)
#pragma warning(disable: 4804) #pragma warning(disable: 4804)
#endif #endif
@ -1665,8 +1666,7 @@ namespace std
#ifdef NAZARA_COMPILER_MSVC #ifdef NAZARA_COMPILER_MSVC
// Reenable those warnings // Reenable those warnings
#pragma warning(default: 4146) #pragma warning(pop)
#pragma warning(default: 4804)
#endif #endif
#include <Nazara/Core/DebugOff.hpp> #include <Nazara/Core/DebugOff.hpp>

View File

@ -12,12 +12,12 @@ namespace Nz
m_renderTarget(nullptr), m_renderTarget(nullptr),
m_clearColor(Color::Black), m_clearColor(Color::Black),
m_fov(90.f), m_fov(90.f),
m_renderOrder(0),
m_projectionType(projectionType), m_projectionType(projectionType),
m_targetRegion(0.f, 0.f, 1.f, 1.f), m_targetRegion(0.f, 0.f, 1.f, 1.f),
m_viewport(0, 0, 0, 0), m_viewport(0, 0, 0, 0),
m_renderMask(0xFFFFFFFF),
m_renderOrder(0),
m_size(-1.f, -1.f), m_size(-1.f, -1.f),
m_renderMask(0xFFFFFFFF),
m_zFar((projectionType == ProjectionType::Perspective) ? 1000.f : 1.f), m_zFar((projectionType == ProjectionType::Perspective) ? 1000.f : 1.f),
m_zNear((projectionType == ProjectionType::Perspective) ? 1.f : -1.f) m_zNear((projectionType == ProjectionType::Perspective) ? 1.f : -1.f)
{ {
@ -28,12 +28,12 @@ namespace Nz
m_renderTarget(nullptr), m_renderTarget(nullptr),
m_clearColor(camera.m_clearColor), m_clearColor(camera.m_clearColor),
m_fov(camera.m_fov), m_fov(camera.m_fov),
m_renderOrder(camera.m_renderOrder),
m_projectionType(camera.m_projectionType), m_projectionType(camera.m_projectionType),
m_targetRegion(camera.m_targetRegion), m_targetRegion(camera.m_targetRegion),
m_viewport(camera.m_viewport), m_viewport(camera.m_viewport),
m_renderMask(camera.m_renderMask),
m_renderOrder(camera.m_renderOrder),
m_size(camera.m_size), m_size(camera.m_size),
m_renderMask(camera.m_renderMask),
m_aspectRatio(camera.m_aspectRatio), m_aspectRatio(camera.m_aspectRatio),
m_zFar(camera.m_zFar), m_zFar(camera.m_zFar),
m_zNear(camera.m_zNear) m_zNear(camera.m_zNear)
@ -45,12 +45,12 @@ namespace Nz
m_renderTarget(nullptr), m_renderTarget(nullptr),
m_clearColor(camera.m_clearColor), m_clearColor(camera.m_clearColor),
m_fov(camera.m_fov), m_fov(camera.m_fov),
m_renderOrder(camera.m_renderOrder),
m_projectionType(camera.m_projectionType), m_projectionType(camera.m_projectionType),
m_targetRegion(camera.m_targetRegion), m_targetRegion(camera.m_targetRegion),
m_viewport(camera.m_viewport), m_viewport(camera.m_viewport),
m_renderMask(camera.m_renderMask),
m_renderOrder(camera.m_renderOrder),
m_size(camera.m_size), m_size(camera.m_size),
m_renderMask(camera.m_renderMask),
m_aspectRatio(camera.m_aspectRatio), m_aspectRatio(camera.m_aspectRatio),
m_zFar(camera.m_zFar), m_zFar(camera.m_zFar),
m_zNear(camera.m_zNear) m_zNear(camera.m_zNear)

View File

@ -30,10 +30,10 @@ namespace Nz
SpriteChainRenderer(RenderDevice& device, std::size_t maxVertexBufferSize = 32 * 1024); SpriteChainRenderer(RenderDevice& device, std::size_t maxVertexBufferSize = 32 * 1024);
~SpriteChainRenderer() = default; ~SpriteChainRenderer() = default;
std::unique_ptr<ElementRendererData> InstanciateData(); std::unique_ptr<ElementRendererData> InstanciateData() override;
void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, const Pointer<const RenderElement>* elements, std::size_t elementCount); void Prepare(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, RenderFrame& currentFrame, const Pointer<const RenderElement>* elements, std::size_t elementCount) override;
void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer<const RenderElement>* elements, std::size_t elementCount) override; void Render(const ViewerInstance& viewerInstance, ElementRendererData& rendererData, CommandBufferBuilder& commandBuffer, const Pointer<const RenderElement>* elements, std::size_t elementCount) override;
void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame); void Reset(ElementRendererData& rendererData, RenderFrame& currentFrame) override;
private: private:
struct BufferCopy struct BufferCopy

View File

@ -298,7 +298,7 @@ namespace Nz::ShaderBuilder
swizzleNode->componentCount = swizzleComponents.size(); swizzleNode->componentCount = swizzleComponents.size();
for (std::size_t i = 0; i < swizzleNode->componentCount; ++i) for (std::size_t i = 0; i < swizzleNode->componentCount; ++i)
{ {
assert(swizzleComponents[i] >= 0 && swizzleComponents[i] <= 4); assert(swizzleComponents[i] <= 4);
swizzleNode->components[i] = swizzleComponents[i]; swizzleNode->components[i] = swizzleComponents[i];
} }

View File

@ -24,7 +24,7 @@ namespace Nz
LabelWidget(LabelWidget&&) = default; LabelWidget(LabelWidget&&) = default;
~LabelWidget() = default; ~LabelWidget() = default;
void UpdateText(const AbstractTextDrawer& drawer, float scale = 1.f); void UpdateText(const AbstractTextDrawer& drawer);
LabelWidget& operator=(const LabelWidget&) = delete; LabelWidget& operator=(const LabelWidget&) = delete;
LabelWidget& operator=(LabelWidget&&) = default; LabelWidget& operator=(LabelWidget&&) = default;

View File

@ -121,7 +121,7 @@ std::shared_ptr<Animation> LoadAnimation(Stream& stream, const AnimationParams&
aiSetImportPropertyInteger(properties, AI_CONFIG_PP_LBW_MAX_WEIGHTS, 4); aiSetImportPropertyInteger(properties, AI_CONFIG_PP_LBW_MAX_WEIGHTS, 4);
aiSetImportPropertyInteger(properties, AI_CONFIG_PP_RVC_FLAGS, ~aiComponent_ANIMATIONS); aiSetImportPropertyInteger(properties, AI_CONFIG_PP_RVC_FLAGS, ~aiComponent_ANIMATIONS);
const aiScene* scene = aiImportFileExWithProperties(userdata.originalFilePath, 0, &fileIO, properties); const aiScene* scene = aiImportFileExWithProperties(userdata.originalFilePath, postProcess, &fileIO, properties);
aiReleasePropertyStore(properties); aiReleasePropertyStore(properties);
if (!scene) if (!scene)

View File

@ -15,9 +15,9 @@
namespace Nz namespace Nz
{ {
SpriteChainRenderer::SpriteChainRenderer(RenderDevice& device, std::size_t maxVertexBufferSize) : SpriteChainRenderer::SpriteChainRenderer(RenderDevice& device, std::size_t maxVertexBufferSize) :
m_device(device),
m_maxVertexBufferSize(maxVertexBufferSize), m_maxVertexBufferSize(maxVertexBufferSize),
m_maxVertexCount(m_maxVertexBufferSize / (2 * sizeof(float))) // Treat vec2 as the minimum declaration possible m_maxVertexCount(m_maxVertexBufferSize / (2 * sizeof(float))), // Treat vec2 as the minimum declaration possible
m_device(device)
{ {
m_vertexBufferPool = std::make_shared<VertexBufferPool>(); m_vertexBufferPool = std::make_shared<VertexBufferPool>();

View File

@ -419,7 +419,7 @@ namespace Nz
return static_cast<unsigned int>(result); return static_cast<unsigned int>(result);
} }
SocketState SocketImpl::PollConnection(SocketHandle handle, const IpAddress& address, UInt64 msTimeout, SocketError* error) SocketState SocketImpl::PollConnection(SocketHandle handle, const IpAddress& /*address*/, UInt64 msTimeout, SocketError* error)
{ {
// Wait until socket is available for writing or an error occurs (ie when connection succeeds or fails) // Wait until socket is available for writing or an error occurs (ie when connection succeeds or fails)
pollfd descriptor; pollfd descriptor;

View File

@ -63,9 +63,9 @@ namespace Nz
RigidBody3D::RigidBody3D(RigidBody3D&& object) noexcept : RigidBody3D::RigidBody3D(RigidBody3D&& object) noexcept :
m_geom(std::move(object.m_geom)), m_geom(std::move(object.m_geom)),
m_body(std::move(object.m_body)),
m_forceAccumulator(std::move(object.m_forceAccumulator)), m_forceAccumulator(std::move(object.m_forceAccumulator)),
m_torqueAccumulator(std::move(object.m_torqueAccumulator)), m_torqueAccumulator(std::move(object.m_torqueAccumulator)),
m_body(std::move(object.m_body)),
m_world(object.m_world), m_world(object.m_world),
m_gravityFactor(object.m_gravityFactor), m_gravityFactor(object.m_gravityFactor),
m_mass(object.m_mass) m_mass(object.m_mass)

View File

@ -534,7 +534,7 @@ namespace Nz
} }
} }
} }
catch (std::exception e) catch (const std::exception& e)
{ {
NazaraError(e.what()); NazaraError(e.what());
} }

View File

@ -206,21 +206,6 @@ namespace Nz::ShaderAst
else if (IsPrimitiveType(exprType) || IsVectorType(exprType)) else if (IsPrimitiveType(exprType) || IsVectorType(exprType))
{ {
// Swizzle expression // Swizzle expression
PrimitiveType baseType;
std::size_t componentCount;
if (IsVectorType(exprType))
{
const VectorType& swizzledVec = std::get<VectorType>(exprType);
baseType = swizzledVec.type;
componentCount = swizzledVec.componentCount;
}
else
{
baseType = std::get<PrimitiveType>(exprType);
componentCount = 1;
}
std::size_t swizzleComponentCount = identifier.size(); std::size_t swizzleComponentCount = identifier.size();
if (swizzleComponentCount > 4) if (swizzleComponentCount > 4)
throw AstError{ "cannot swizzle more than four elements" }; throw AstError{ "cannot swizzle more than four elements" };
@ -239,6 +224,12 @@ namespace Nz::ShaderAst
// Use a Cast expression to replace swizzle // Use a Cast expression to replace swizzle
indexedExpr = CacheResult(std::move(indexedExpr)); //< Since we are going to use a value multiple times, cache it if required indexedExpr = CacheResult(std::move(indexedExpr)); //< Since we are going to use a value multiple times, cache it if required
PrimitiveType baseType;
if (IsVectorType(exprType))
baseType = std::get<VectorType>(exprType).type;
else
baseType = std::get<PrimitiveType>(exprType);
auto cast = std::make_unique<CastExpression>(); auto cast = std::make_unique<CastExpression>();
cast->targetType = VectorType{ swizzleComponentCount, baseType }; cast->targetType = VectorType{ swizzleComponentCount, baseType };
for (std::size_t j = 0; j < swizzleComponentCount; ++j) for (std::size_t j = 0; j < swizzleComponentCount; ++j)

View File

@ -1023,6 +1023,7 @@ namespace Nz
default: default:
break; break;
} }
break;
} }
case ShaderAst::UnaryType::Plus: case ShaderAst::UnaryType::Plus:

View File

@ -134,7 +134,9 @@ namespace Nz
const auto& expressionType = GetExpressionType(*node.expression); const auto& expressionType = GetExpressionType(*node.expression);
assert(IsVectorType(expressionType)); assert(IsVectorType(expressionType));
SwizzledPointer swizzledPointer{ pointer }; SwizzledPointer swizzledPointer;
swizzledPointer.pointerId = pointer.pointerId;
swizzledPointer.storage = pointer.storage;
swizzledPointer.swizzledType = std::get<ShaderAst::VectorType>(expressionType); swizzledPointer.swizzledType = std::get<ShaderAst::VectorType>(expressionType);
swizzledPointer.componentCount = node.componentCount; swizzledPointer.componentCount = node.componentCount;
swizzledPointer.swizzleIndices = node.components; swizzledPointer.swizzleIndices = node.components;

View File

@ -72,8 +72,8 @@ namespace Nz
else else
UnrecognizedLine(); UnrecognizedLine();
#endif #endif
break;
} }
break;
} }
case 'd': case 'd':
@ -471,6 +471,7 @@ namespace Nz
UnrecognizedLine(); UnrecognizedLine();
#endif #endif
} }
break;
} }
default: default:

View File

@ -269,12 +269,14 @@ namespace Nz
} }
} }
VkInstanceCreateInfo instanceInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; VkInstanceCreateInfo instanceInfo = {};
instanceInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
#ifdef NAZARA_DEBUG #ifdef NAZARA_DEBUG
// Handle VK_LAYER_KHRONOS_validation extended features // Handle VK_LAYER_KHRONOS_validation extended features
VkValidationFeaturesEXT features = { VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT }; VkValidationFeaturesEXT features = {};
features.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
std::array<VkValidationFeatureEnableEXT, 1> enabledFeatures = { std::array<VkValidationFeatureEnableEXT, 1> enabledFeatures = {
//VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, //VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT,

View File

@ -55,7 +55,8 @@ namespace Nz
} }
} }
VkRenderPassBeginInfo beginInfo = { VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO }; VkRenderPassBeginInfo beginInfo = {};
beginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
beginInfo.renderPass = vkRenderPass.GetRenderPass(); beginInfo.renderPass = vkRenderPass.GetRenderPass();
beginInfo.framebuffer = vkFramebuffer.GetFramebuffer(); beginInfo.framebuffer = vkFramebuffer.GetFramebuffer();
beginInfo.renderArea.offset.x = renderRect.x; beginInfo.renderArea.offset.x = renderRect.x;
@ -190,15 +191,16 @@ namespace Nz
SafeCast<Int32>(fromBox.y), SafeCast<Int32>(fromBox.y),
SafeCast<Int32>(fromBox.z) SafeCast<Int32>(fromBox.z)
}, },
todo,
{ {
SafeCast<Int32>(toPos.x), SafeCast<Int32>(toPos.x),
SafeCast<Int32>(toPos.y), SafeCast<Int32>(toPos.y),
SafeCast<Int32>(toPos.z), SafeCast<Int32>(toPos.z),
}, },
{ {
SafeCast<Int32>(fromBox.width), SafeCast<UInt32>(fromBox.width),
SafeCast<Int32>(fromBox.height), SafeCast<UInt32>(fromBox.height),
SafeCast<Int32>(fromBox.depth) SafeCast<UInt32>(fromBox.depth)
} }
}; };

View File

@ -27,7 +27,8 @@ namespace Nz
createInfo.tiling = VK_IMAGE_TILING_OPTIMAL; createInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
createInfo.usage = ToVulkan(params.usageFlags); createInfo.usage = ToVulkan(params.usageFlags);
VkImageViewCreateInfo createInfoView = { VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO }; VkImageViewCreateInfo createInfoView = {};
createInfoView.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
createInfoView.subresourceRange = { createInfoView.subresourceRange = {
ToVulkan(PixelFormatInfo::GetContent(params.pixelFormat)), ToVulkan(PixelFormatInfo::GetContent(params.pixelFormat)),
0, 0,

View File

@ -13,7 +13,8 @@ namespace Nz
{ {
ValidateSamplerInfo(device, samplerInfo); ValidateSamplerInfo(device, samplerInfo);
VkSamplerCreateInfo createInfo = { VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO }; VkSamplerCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
createInfo.magFilter = ToVulkan(samplerInfo.magFilter); createInfo.magFilter = ToVulkan(samplerInfo.magFilter);
createInfo.minFilter = ToVulkan(samplerInfo.minFilter); createInfo.minFilter = ToVulkan(samplerInfo.minFilter);
createInfo.addressModeU = ToVulkan(samplerInfo.wrapModeU); createInfo.addressModeU = ToVulkan(samplerInfo.wrapModeU);

View File

@ -218,7 +218,8 @@ namespace Nz
return; return;
} }
VkDebugUtilsMessengerCreateInfoEXT callbackCreateInfo = { VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT }; VkDebugUtilsMessengerCreateInfoEXT callbackCreateInfo = {};
callbackCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
callbackCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT; callbackCreateInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT;
callbackCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; callbackCreateInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
callbackCreateInfo.pfnUserCallback = &DebugCallback; callbackCreateInfo.pfnUserCallback = &DebugCallback;

View File

@ -11,12 +11,12 @@ namespace Nz
{ {
Canvas::Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController, UInt32 renderMask, int initialRenderLayer) : Canvas::Canvas(entt::registry& registry, Nz::EventHandler& eventHandler, Nz::CursorControllerHandle cursorController, UInt32 renderMask, int initialRenderLayer) :
BaseWidget(std::make_shared<DefaultWidgetTheme>()), BaseWidget(std::make_shared<DefaultWidgetTheme>()),
m_cursorController(cursorController),
m_renderMask(renderMask), m_renderMask(renderMask),
m_keyboardOwner(InvalidCanvasIndex), m_keyboardOwner(InvalidCanvasIndex),
m_hoveredWidget(InvalidCanvasIndex), m_hoveredWidget(InvalidCanvasIndex),
m_mouseOwner(InvalidCanvasIndex), m_mouseOwner(InvalidCanvasIndex),
m_registry(registry), m_registry(registry)
m_cursorController(cursorController)
{ {
m_canvas = this; m_canvas = this;
BaseWidget::m_registry = &m_registry; BaseWidget::m_registry = &m_registry;

View File

@ -22,7 +22,7 @@ namespace Nz
Layout(); Layout();
} }
void LabelWidget::UpdateText(const AbstractTextDrawer& drawer, float scale) void LabelWidget::UpdateText(const AbstractTextDrawer& drawer)
{ {
m_style->UpdateText(drawer); m_style->UpdateText(drawer);

View File

@ -110,7 +110,7 @@ void TextureValue::BuildNodeEdition(QFormLayout* layout)
layout->addRow(tr("Texture"), textureSelection); layout->addRow(tr("Texture"), textureSelection);
} }
Nz::ShaderAst::NodePtr TextureValue::BuildNode(Nz::ShaderAst::ExpressionPtr* expressions, std::size_t count, std::size_t outputIndex) const Nz::ShaderAst::NodePtr TextureValue::BuildNode(Nz::ShaderAst::ExpressionPtr* /*expressions*/, std::size_t count, std::size_t outputIndex) const
{ {
if (!m_currentTextureIndex) if (!m_currentTextureIndex)
throw std::runtime_error("invalid texture input"); throw std::runtime_error("invalid texture input");

View File

@ -96,7 +96,7 @@ void TextureEditor::OnTextureSelectionUpdate(int textureIndex)
m_currentTextureIndex.reset(); m_currentTextureIndex.reset();
} }
void TextureEditor::OnTextureListUpdate(ShaderGraph* graph) void TextureEditor::OnTextureListUpdate(ShaderGraph* /*graph*/)
{ {
RefreshTextures(); RefreshTextures();
} }

View File

@ -296,7 +296,6 @@ void CheckRead(const char* title)
#define BitVal3 01101010 #define BitVal3 01101010
std::array<Nz::UInt8, 3> data = {{NazaraPrefixMacro(BitVal1, 0b), NazaraPrefixMacro(BitVal2, 0b), NazaraPrefixMacro(BitVal3, 0b)}}; std::array<Nz::UInt8, 3> data = {{NazaraPrefixMacro(BitVal1, 0b), NazaraPrefixMacro(BitVal2, 0b), NazaraPrefixMacro(BitVal3, 0b)}};
const char result[] = NazaraStringifyMacro(BitVal3) NazaraStringifyMacro(BitVal2) NazaraStringifyMacro(BitVal1); const char result[] = NazaraStringifyMacro(BitVal3) NazaraStringifyMacro(BitVal2) NazaraStringifyMacro(BitVal1);
std::size_t resultLength = Nz::CountOf(result) - 1;
std::size_t bitCount = data.size() * 8; std::size_t bitCount = data.size() * 8;
#undef BitVal1 #undef BitVal1
#undef BitVal2 #undef BitVal2

View File

@ -11,7 +11,6 @@ SCENARIO("PrimitiveList", "[CORE][PRIMITIVELIST]")
{ {
float size = 1.f; float size = 1.f;
unsigned int subdivision = 1; unsigned int subdivision = 1;
unsigned int recursionLevel = 1;
Nz::Matrix4f identity = Nz::Matrix4f::Identity(); Nz::Matrix4f identity = Nz::Matrix4f::Identity();
primitiveList.AddCubicSphere(size, subdivision, identity); primitiveList.AddCubicSphere(size, subdivision, identity);