nCine::RHI::Software::SwTexture class

CPU texture object of the software backend (aliased as RHI::Texture).

Wraps a single, tightly-packed level-0 pixel buffer in one of the formats the rasterizer can sample (PixelFormat::RGBA8 for the textured path, PixelFormat::R8 / PixelFormat::RG8 for the palette path). It exposes the neutral upload surface Texture.cpp drives (TexImage2D, TexSubImage2D, TexStorage2D, filter/wrap/swizzle setters); binding records the texture on the device so the effect running the draw can read its texels. Mip levels above 0 and compressed formats are accepted but not stored (the fast path samples level 0 only).

Public static variables

static std::uint32_t MaxTextureUnits constexpr
Number of texture units tracked by the device.

Public static functions

static auto Unbind(std::uint32_t textureUnit) -> bool
Unbinds any texture from the specified texture unit.
static void SetUnpackAlignment(std::int32_t alignment)
Sets the client pixel-row alignment of uploads (ignored, uploads are tightly packed).
static auto SupportsImmutableStorage() -> bool
static auto SupportsTextureReadback() -> bool
static void ClearErrors()
static auto CheckErrors() -> bool
static void CheckFormatSupport(PixelFormat format)
static auto BytesPerPixel(PixelFormat format) -> std::int32_t
Returns the number of bytes occupied by one texel of the given format (0 if unsupported).

Constructors, destructors, conversion operators

SwTexture(TextureTarget target) explicit
~SwTexture()
SwTexture(const SwTexture&) deleted

Public functions

auto operator=(const SwTexture&) -> SwTexture& deleted
auto GetUniqueId() const -> std::uint32_t
Returns a backend-neutral identifier uniquely identifying the texture (feeds material sort keys).
auto GetTarget() const -> TextureTarget
Returns the texture target.
auto GetWidth() const -> std::int32_t
Returns the width of level 0 in texels.
auto GetHeight() const -> std::int32_t
Returns the height of level 0 in texels.
auto GetFormat() const -> PixelFormat
Returns the pixel format of the stored texels (after any promotion to the RGBA8 store).
auto GetUploadFormat() const -> PixelFormat
Returns the original upload format before promotion (R8/RG8/RGB8 kept, so the palette path can tell an R8 index texture from an RG8 index+alpha one).
auto GetStrideBytes() const -> std::int32_t
Returns the byte distance between two consecutive rows of level 0.
auto GetPixels(std::int32_t level = 0) const -> const std::uint8_t*
Returns the base pointer of the level-0 texel store (may be nullptr before an upload); the single-level store ignores level.
auto GetWrapS() const -> SamplerWrapping
Returns the horizontal texture-coordinate wrap mode (used by the rasterizer sampler).
auto GetWrapT() const -> SamplerWrapping
Returns the vertical texture-coordinate wrap mode (single stored mode, same as GetWrapS()).
auto GetSwizzle() const -> const SwizzleChannel*
Returns the four-channel sampling swizzle (identity by default; the palette path maps .a to green for RG8 index textures).
auto GetMagFilter() const -> nCine::SamplerFilter
Returns the magnification filter (alias of GetMagFiltering() the rasterizer samples with).
auto IsRenderTarget() const -> bool
Returns true if the texture is bound as a color render target (its store is treated as bottom-up by the fast blit).
void SetRenderTarget(bool isRenderTarget)
Marks the texture as (or no longer as) a color render target.
auto MutablePixels() -> std::uint8_t*
Returns a writable base pointer of the level-0 texel store (for render-target output).
auto GetContentVersion() const -> std::uint32_t
Returns a globally monotonic stamp of the texel store, advanced by every allocation or upload (used to key content-derived caches; render-target writes bypass it).
auto Bind(std::uint32_t textureUnit) const -> bool
Binds the texture to the specified texture unit on the device.
auto Bind() const -> bool
Binds the texture to texture unit 0.
auto Unbind() const -> bool
Unbinds the texture from the unit it was last bound to.
void TexImage2D(std::int32_t level, PixelFormat format, bool bgr, std::int32_t width, std::int32_t height, const void* data)
Allocates level-0 storage of the given format/size and optionally uploads its texels.
void TexSubImage2D(std::int32_t level, std::int32_t xoffset, std::int32_t yoffset, std::int32_t width, std::int32_t height, PixelFormat format, bool bgr, const void* data)
Updates a rectangular subregion of level 0.
void TexStorage2D(std::int32_t levels, PixelFormat format, std::int32_t width, std::int32_t height)
Allocates immutable level-0 storage of the given format/size (no texels yet).
void CompressedTexImage2D(std::int32_t level, PixelFormat format, std::int32_t width, std::int32_t height, std::int32_t imageSize, const void* data)
Compressed upload (unsupported by the fast path, accepted as a no-op).
void CompressedTexSubImage2D(std::int32_t level, std::int32_t xoffset, std::int32_t yoffset, std::int32_t width, std::int32_t height, PixelFormat format, std::int32_t imageSize, const void* data)
Compressed sub-upload (unsupported by the fast path, accepted as a no-op).
void GetTexImage(std::int32_t level, PixelFormat format, bool bgr, void* pixels)
Reads back level-0 texels into client memory.
void SetMinFiltering(nCine::SamplerFilter filter)
Sets the minification filter (stored; the fast path currently samples nearest).
void SetMagFiltering(nCine::SamplerFilter filter)
Sets the magnification filter (stored; the fast path currently samples nearest).
void SetWrap(SamplerWrapping wrap)
Sets the wrap mode (stored).
void SetSwizzle(SwizzleChannel r, SwizzleChannel g, SwizzleChannel b, SwizzleChannel a)
Sets the sampling swizzle (stored; used by the palette path).
void SetMaxLevel(std::int32_t maxLevel)
Sets the highest defined mipmap level (ignored).
void SetObjectLabel(StringView label)
Sets a debug label for the texture (ignored).
auto GetMagFiltering() const -> nCine::SamplerFilter
Returns the magnification filter, for the effect to choose nearest vs. bilinear.