mirror of
https://github.com/luanti-org/luanti.git
synced 2025-11-05 01:35:29 +01:00
Irrlicht: expose MaxArrayTextureLayers
This commit is contained in:
@@ -62,6 +62,15 @@ struct SFrameStats {
|
||||
u32 HWBuffersActive = 0;
|
||||
};
|
||||
|
||||
struct SDriverLimits {
|
||||
//! Maximum amount of primitives that can be rendered in a single call
|
||||
u32 MaxPrimitiveCount = 0;
|
||||
//! Maximum width/height for a texture
|
||||
u32 MaxTextureSize = 0;
|
||||
//! Maximum number of images in an array texture
|
||||
u32 MaxArrayTextureImages = 0;
|
||||
};
|
||||
|
||||
//! Interface to driver which is able to perform 2d and 3d graphics functions.
|
||||
/** This interface is one of the most important interfaces of
|
||||
the Irrlicht Engine: All rendering and texture manipulation is done with
|
||||
@@ -852,11 +861,8 @@ public:
|
||||
\param writer: Pointer to the external writer created. */
|
||||
virtual void addExternalImageWriter(IImageWriter *writer) = 0;
|
||||
|
||||
//! Returns the maximum amount of primitives
|
||||
/** (mostly vertices) which the device is able to render with
|
||||
one drawVertexPrimitiveList call.
|
||||
\return Maximum amount of primitives. */
|
||||
virtual u32 getMaximalPrimitiveCount() const = 0;
|
||||
//! Returns some common driver limits.
|
||||
virtual SDriverLimits getLimits() const = 0;
|
||||
|
||||
//! Enables or disables a texture creation flag.
|
||||
/** These flags define how textures should be created. By
|
||||
@@ -1116,7 +1122,11 @@ public:
|
||||
virtual void setAllowZWriteOnTransparent(bool flag) = 0;
|
||||
|
||||
//! Get the maximum texture size supported.
|
||||
virtual core::dimension2du getMaxTextureSize() const = 0;
|
||||
inline core::dimension2du getMaxTextureSize() const
|
||||
{
|
||||
auto l = getLimits();
|
||||
return {l.MaxTextureSize, l.MaxTextureSize};
|
||||
}
|
||||
|
||||
//! Check if the driver supports creating textures with the given color format
|
||||
/** \return True if the format is available, false if not. */
|
||||
|
||||
@@ -837,18 +837,18 @@ void CNullDriver::makeColorKeyTexture(video::ITexture *texture,
|
||||
makeColorKeyTexture(texture, colorKey);
|
||||
}
|
||||
|
||||
//! Returns the maximum amount of primitives (mostly vertices) which
|
||||
//! the device is able to render with one drawIndexedTriangleList
|
||||
//! call.
|
||||
u32 CNullDriver::getMaximalPrimitiveCount() const
|
||||
SDriverLimits CNullDriver::getLimits() const
|
||||
{
|
||||
return 0xFFFFFFFF;
|
||||
SDriverLimits ret;
|
||||
ret.MaxPrimitiveCount = 0xFFFFFFFF;
|
||||
ret.MaxTextureSize = 0x10000; // maybe large enough
|
||||
return ret;
|
||||
}
|
||||
|
||||
//! checks triangle count and print warning if wrong
|
||||
bool CNullDriver::checkPrimitiveCount(u32 prmCount) const
|
||||
{
|
||||
const u32 m = getMaximalPrimitiveCount();
|
||||
const u32 m = getLimits().MaxPrimitiveCount;
|
||||
|
||||
if (prmCount > m) {
|
||||
char tmp[128];
|
||||
@@ -1732,11 +1732,6 @@ void CNullDriver::enableMaterial2D(bool enable)
|
||||
OverrideMaterial2DEnabled = enable;
|
||||
}
|
||||
|
||||
core::dimension2du CNullDriver::getMaxTextureSize() const
|
||||
{
|
||||
return core::dimension2du(0x10000, 0x10000); // maybe large enough
|
||||
}
|
||||
|
||||
bool CNullDriver::needsTransparentRenderPass(const video::SMaterial &material) const
|
||||
{
|
||||
// TODO: I suspect it would be nice if the material had an enum for further control.
|
||||
|
||||
@@ -229,10 +229,7 @@ public:
|
||||
virtual void makeColorKeyTexture(video::ITexture *texture,
|
||||
core::position2d<s32> colorKeyPixelPos) const override;
|
||||
|
||||
//! Returns the maximum amount of primitives (mostly vertices) which
|
||||
//! the device is able to render with one drawIndexedTriangleList
|
||||
//! call.
|
||||
u32 getMaximalPrimitiveCount() const override;
|
||||
SDriverLimits getLimits() const override;
|
||||
|
||||
//! Enables or disables a texture creation flag.
|
||||
void setTextureCreationFlag(E_TEXTURE_CREATION_FLAG flag, bool enabled) override;
|
||||
@@ -280,7 +277,7 @@ public:
|
||||
//! Check if the driver supports creating textures with the given color format
|
||||
bool queryTextureFormat(ECOLOR_FORMAT format) const override
|
||||
{
|
||||
return false;
|
||||
return format == video::ECF_A8R8G8B8;
|
||||
}
|
||||
|
||||
protected:
|
||||
@@ -529,9 +526,6 @@ public:
|
||||
AllowZWriteOnTransparent = flag;
|
||||
}
|
||||
|
||||
//! Returns the maximum texture size supported.
|
||||
core::dimension2du getMaxTextureSize() const override;
|
||||
|
||||
//! Used by some SceneNodes to check if a material should be rendered in the transparent render pass
|
||||
bool needsTransparentRenderPass(const video::SMaterial &material) const override;
|
||||
|
||||
|
||||
@@ -2652,9 +2652,12 @@ ITexture *COpenGLDriver::addRenderTargetTextureCubemap(const u32 sideLen, const
|
||||
//! Returns the maximum amount of primitives (mostly vertices) which
|
||||
//! the device is able to render with one drawIndexedTriangleList
|
||||
//! call.
|
||||
u32 COpenGLDriver::getMaximalPrimitiveCount() const
|
||||
SDriverLimits COpenGLDriver::getLimits() const
|
||||
{
|
||||
return 0x7fffffff;
|
||||
SDriverLimits ret;
|
||||
ret.MaxPrimitiveCount = 0x7fffffff;
|
||||
ret.MaxTextureSize = MaxTextureSize;
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool COpenGLDriver::setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SColor clearColor, f32 clearDepth, u8 clearStencil)
|
||||
@@ -2863,11 +2866,6 @@ IImage *COpenGLDriver::createScreenShot(video::ECOLOR_FORMAT format, video::E_RE
|
||||
return newImage;
|
||||
}
|
||||
|
||||
core::dimension2du COpenGLDriver::getMaxTextureSize() const
|
||||
{
|
||||
return core::dimension2du(MaxTextureSize, MaxTextureSize);
|
||||
}
|
||||
|
||||
//! Convert E_PRIMITIVE_TYPE to OpenGL equivalent
|
||||
GLenum COpenGLDriver::primitiveTypeToGL(scene::E_PRIMITIVE_TYPE type) const
|
||||
{
|
||||
|
||||
@@ -241,10 +241,7 @@ public:
|
||||
//! IMaterialRendererServices)
|
||||
IVideoDriver *getVideoDriver() override;
|
||||
|
||||
//! Returns the maximum amount of primitives (mostly vertices) which
|
||||
//! the device is able to render with one drawIndexedTriangleList
|
||||
//! call.
|
||||
u32 getMaximalPrimitiveCount() const override;
|
||||
SDriverLimits getLimits() const override;
|
||||
|
||||
virtual ITexture *addRenderTargetTexture(const core::dimension2d<u32> &size,
|
||||
const io::path &name, const ECOLOR_FORMAT format = ECF_UNKNOWN) override;
|
||||
@@ -274,9 +271,6 @@ public:
|
||||
//! Returns the graphics card vendor name.
|
||||
core::stringc getVendorInfo() override { return VendorName; }
|
||||
|
||||
//! Returns the maximum texture size supported.
|
||||
core::dimension2du getMaxTextureSize() const override;
|
||||
|
||||
//! Removes a texture from the texture cache and deletes it, freeing lot of memory.
|
||||
void removeTexture(ITexture *texture) override;
|
||||
|
||||
|
||||
@@ -1688,10 +1688,13 @@ ITexture *COpenGL3DriverBase::addRenderTargetTextureCubemap(const u32 sideLen, c
|
||||
return renderTargetTexture;
|
||||
}
|
||||
|
||||
//! Returns the maximum amount of primitives
|
||||
u32 COpenGL3DriverBase::getMaximalPrimitiveCount() const
|
||||
SDriverLimits COpenGL3DriverBase::getLimits() const
|
||||
{
|
||||
return Version.Spec == OpenGLSpec::ES ? 65535 : 0x7fffffff;
|
||||
SDriverLimits ret;
|
||||
ret.MaxPrimitiveCount = Version.Spec == OpenGLSpec::ES ? UINT16_MAX : INT32_MAX;
|
||||
ret.MaxTextureSize = MaxTextureSize;
|
||||
ret.MaxArrayTextureImages = MaxArrayTextureLayers;
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool COpenGL3DriverBase::setRenderTargetEx(IRenderTarget *target, u16 clearFlag, SColor clearColor, f32 clearDepth, u8 clearStencil)
|
||||
@@ -1864,11 +1867,6 @@ void COpenGL3DriverBase::removeTexture(ITexture *texture)
|
||||
CNullDriver::removeTexture(texture);
|
||||
}
|
||||
|
||||
core::dimension2du COpenGL3DriverBase::getMaxTextureSize() const
|
||||
{
|
||||
return core::dimension2du(MaxTextureSize, MaxTextureSize);
|
||||
}
|
||||
|
||||
GLenum COpenGL3DriverBase::getGLBlend(E_BLEND_FACTOR factor) const
|
||||
{
|
||||
static GLenum const blendTable[] = {
|
||||
|
||||
@@ -135,9 +135,6 @@ public:
|
||||
//! Returns the name of the video driver.
|
||||
const char *getName() const override;
|
||||
|
||||
//! Returns the maximum texture size supported.
|
||||
core::dimension2du getMaxTextureSize() const override;
|
||||
|
||||
//! sets a viewport
|
||||
void setViewPort(const core::rect<s32> &area) override;
|
||||
|
||||
@@ -202,8 +199,7 @@ public:
|
||||
//! Returns a pointer to the IVideoDriver interface.
|
||||
IVideoDriver *getVideoDriver() override;
|
||||
|
||||
//! Returns the maximum amount of primitives
|
||||
u32 getMaximalPrimitiveCount() const override;
|
||||
SDriverLimits getLimits() const override;
|
||||
|
||||
virtual ITexture *addRenderTargetTexture(const core::dimension2d<u32> &size,
|
||||
const io::path &name, const ECOLOR_FORMAT format = ECF_UNKNOWN) override;
|
||||
|
||||
Reference in New Issue
Block a user