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